mirror of https://github.com/bjornbytes/lovr.git
lovrGraphicsTransform;
This commit is contained in:
parent
c0e7837ac1
commit
94a9c0e8cb
|
@ -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[] = {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue