lovrGraphicsTransform;

This commit is contained in:
bjorn 2016-11-01 20:48:04 -07:00
parent c0e7837ac1
commit 94a9c0e8cb
3 changed files with 21 additions and 20 deletions

View File

@ -277,7 +277,22 @@ void lovrGraphicsScale(float x, float y, float z) {
mat4_scale(vec_last(&state.transforms), x, y, z); mat4_scale(vec_last(&state.transforms), x, y, z);
} }
void lovrGraphicsTransform(mat4 transform) { void lovrGraphicsTransform(float tx, float ty, float tz, float sx, float sy, float sz, float angle, float ax, float ay, float az) {
float cos2 = cos(angle / 2.f);
float sin2 = sin(angle / 2.f);
float qw = cos2;
float qx = sin2 * ax;
float qy = sin2 * ay;
float qz = sin2 * az;
float transform[16];
mat4_setTranslation(transform, tx, ty, tz);
mat4_scale(transform, sx, sy, sz);
mat4_rotate(transform, qw, qx, qy, qz);
lovrGraphicsMatrixTransform(transform);
}
void lovrGraphicsMatrixTransform(mat4 transform) {
mat4_multiply(vec_last(&state.transforms), transform); mat4_multiply(vec_last(&state.transforms), transform);
} }
@ -359,12 +374,8 @@ void lovrGraphicsPlane(DrawMode mode, float x, float y, float z, float size, flo
// Angle between normal vector and the normal vector of the default geometry (dot product) // Angle between normal vector and the normal vector of the default geometry (dot product)
float theta = acos(nz); float theta = acos(nz);
float transform[16];
mat4_setTranslation(transform, x, y, z);
mat4_scale(transform, size, size, size);
mat4_rotate(transform, theta, cx, cy, cz);
lovrGraphicsPush(); lovrGraphicsPush();
lovrGraphicsTransform(transform); lovrGraphicsTransform(x, y, z, size, size, size, theta, cx, cy, cz);
if (mode == DRAW_MODE_LINE) { if (mode == DRAW_MODE_LINE) {
float points[] = { float points[] = {
@ -392,19 +403,8 @@ void lovrGraphicsPlane(DrawMode mode, float x, float y, float z, float size, flo
} }
void lovrGraphicsCube(DrawMode mode, float x, float y, float z, float size, float angle, float axisX, float axisY, float axisZ) { void lovrGraphicsCube(DrawMode mode, float x, float y, float z, float size, float angle, float axisX, float axisY, float axisZ) {
float cos2 = cos(angle / 2);
float sin2 = sin(angle / 2);
float rw = cos2;
float rx = sin2 * axisX;
float ry = sin2 * axisY;
float rz = sin2 * axisZ;
float transform[16];
mat4_setTranslation(transform, x, y, z);
mat4_scale(transform, size, size, size);
mat4_rotate(transform, rw, rx, ry, rz);
lovrGraphicsPush(); lovrGraphicsPush();
lovrGraphicsTransform(transform); lovrGraphicsTransform(x, y, z, size, size, size, angle, axisX, axisY, axisZ);
if (mode == DRAW_MODE_LINE) { if (mode == DRAW_MODE_LINE) {
float points[] = { float points[] = {

View File

@ -87,7 +87,8 @@ void lovrGraphicsOrigin();
void lovrGraphicsTranslate(float x, float y, float z); void lovrGraphicsTranslate(float x, float y, float z);
void lovrGraphicsRotate(float w, float x, float y, float z); void lovrGraphicsRotate(float w, float x, float y, float z);
void lovrGraphicsScale(float x, float y, float z); void lovrGraphicsScale(float x, float y, float z);
void lovrGraphicsTransform(mat4 transform); void lovrGraphicsTransform(float tx, float ty, float tz, float sx, float sy, float sz, float angle, float ax, float ay, float az);
void lovrGraphicsMatrixTransform(mat4 transform);
void lovrGraphicsGetDimensions(int* width, int* height); void lovrGraphicsGetDimensions(int* width, int* height);
void lovrGraphicsSetShapeData(float* data, int dataCount, unsigned int* indices, int indicesCount); void lovrGraphicsSetShapeData(float* data, int dataCount, unsigned int* indices, int indicesCount);
void lovrGraphicsDrawLinedShape(GLenum mode); void lovrGraphicsDrawLinedShape(GLenum mode);

View File

@ -340,7 +340,7 @@ void viveRenderTo(void* headset, headsetRenderCallback callback, void* userdata)
lovrGraphicsClear(1, 1); lovrGraphicsClear(1, 1);
lovrGraphicsPush(); lovrGraphicsPush();
lovrGraphicsOrigin(); lovrGraphicsOrigin();
lovrGraphicsTransform(transformMatrix); lovrGraphicsMatrixTransform(transformMatrix);
lovrGraphicsSetProjectionRaw(projectionMatrix); lovrGraphicsSetProjectionRaw(projectionMatrix);
callback(i, userdata); callback(i, userdata);
lovrGraphicsPop(); lovrGraphicsPop();