mirror of https://github.com/bjornbytes/lovr.git
graphics.cube and Model:draw accept Transform;
This commit is contained in:
parent
a118a6bff5
commit
5e2cfcc9bd
|
@ -499,9 +499,9 @@ void lovrGraphicsPlaneFullscreen(Texture* texture) {
|
|||
lovrRelease(&lastShader->ref);
|
||||
}
|
||||
|
||||
void lovrGraphicsCube(DrawMode mode, Texture* texture, float x, float y, float z, float size, float angle, float axisX, float axisY, float axisZ) {
|
||||
void lovrGraphicsCube(DrawMode mode, Texture* texture, mat4 transform) {
|
||||
lovrGraphicsPush();
|
||||
lovrGraphicsTransform(x, y, z, size, size, size, angle, axisX, axisY, axisZ);
|
||||
lovrGraphicsMatrixTransform(transform);
|
||||
|
||||
if (mode == DRAW_MODE_LINE) {
|
||||
float points[] = {
|
||||
|
|
|
@ -134,5 +134,5 @@ void lovrGraphicsLine(float* points, int count);
|
|||
void lovrGraphicsTriangle(DrawMode mode, float* points);
|
||||
void lovrGraphicsPlane(DrawMode mode, Texture* texture, float x, float y, float z, float size, float nx, float ny, float nz);
|
||||
void lovrGraphicsPlaneFullscreen(Texture* texture);
|
||||
void lovrGraphicsCube(DrawMode mode, Texture* texture, float x, float y, float z, float size, float angle, float axisX, float axisY, float axisZ);
|
||||
void lovrGraphicsCube(DrawMode mode, Texture* texture, mat4 transform);
|
||||
void lovrGraphicsSkybox(Skybox* skybox, float angle, float ax, float ay, float az);
|
||||
|
|
|
@ -140,9 +140,9 @@ void lovrModelDataDestroy(ModelData* modelData) {
|
|||
free(modelData);
|
||||
}
|
||||
|
||||
void lovrModelDraw(Model* model, float x, float y, float z, float scale, float angle, float ax, float ay, float az) {
|
||||
void lovrModelDraw(Model* model, mat4 transform) {
|
||||
lovrGraphicsPush();
|
||||
lovrGraphicsTransform(x, y, z, scale, scale, scale, angle, ax, ay, az);
|
||||
lovrGraphicsMatrixTransform(transform);
|
||||
lovrBufferDraw(model->buffer);
|
||||
lovrGraphicsPop();
|
||||
}
|
||||
|
|
|
@ -58,6 +58,6 @@ typedef struct {
|
|||
Model* lovrModelCreate(ModelData* modelData);
|
||||
void lovrModelDestroy(const Ref* ref);
|
||||
void lovrModelDataDestroy(ModelData* modelData);
|
||||
void lovrModelDraw(Model* model, float x, float y, float z, float scale, float angle, float ax, float ay, float az);
|
||||
void lovrModelDraw(Model* model, mat4 transform);
|
||||
Texture* lovrModelGetTexture(Model* model);
|
||||
void lovrModelSetTexture(Model* model, Texture* texture);
|
||||
|
|
|
@ -4,10 +4,12 @@
|
|||
#include "lovr/types/shader.h"
|
||||
#include "lovr/types/skybox.h"
|
||||
#include "lovr/types/texture.h"
|
||||
#include "lovr/types/transform.h"
|
||||
#include "graphics/graphics.h"
|
||||
#include "loaders/model.h"
|
||||
#include "loaders/texture.h"
|
||||
#include "filesystem/filesystem.h"
|
||||
#include "math/mat4.h"
|
||||
#include "util.h"
|
||||
#include <math.h>
|
||||
|
||||
|
@ -509,15 +511,9 @@ int l_lovrGraphicsCube(lua_State* L) {
|
|||
drawMode = DRAW_MODE_FILL;
|
||||
texture = luax_checktype(L, 1, Texture);
|
||||
}
|
||||
float x = luaL_optnumber(L, 2, 0.f);
|
||||
float y = luaL_optnumber(L, 3, 0.f);
|
||||
float z = luaL_optnumber(L, 4, 0.f);
|
||||
float s = luaL_optnumber(L, 5, 1.f);
|
||||
float angle = luaL_optnumber(L, 6, 0.f);
|
||||
float axisX = luaL_optnumber(L, 7, 0.f);
|
||||
float axisY = luaL_optnumber(L, 8, 1.f);
|
||||
float axisZ = luaL_optnumber(L, 9, 0.f);
|
||||
lovrGraphicsCube(drawMode, texture, x, y, z, s, angle, axisX, axisY, axisZ);
|
||||
float transform[16];
|
||||
luax_readtransform(L, 2, transform);
|
||||
lovrGraphicsCube(drawMode, texture, transform);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -59,20 +59,8 @@ int l_lovrMathNewTransform(lua_State* L) {
|
|||
int hasArgs = lua_gettop(L) > 0;
|
||||
mat4 m = luax_newtransform(L);
|
||||
mat4_identity(m);
|
||||
|
||||
if (hasArgs) {
|
||||
float x = luaL_checknumber(L, 1);
|
||||
float y = luaL_checknumber(L, 2);
|
||||
float z = luaL_checknumber(L, 3);
|
||||
float s = luaL_optnumber(L, 4, 1);
|
||||
float angle = luaL_optnumber(L, 5, 0);
|
||||
float ax = luaL_optnumber(L, 6, 0);
|
||||
float ay = luaL_optnumber(L, 7, 0);
|
||||
float az = luaL_optnumber(L, 8, 0);
|
||||
mat4_translate(m, x, y, z);
|
||||
mat4_scale(m, s, s, s);
|
||||
mat4_rotate(m, angle, ax, ay, az);
|
||||
luax_readtransform(L, 1, m);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "lovr/types/model.h"
|
||||
#include "lovr/types/texture.h"
|
||||
#include "lovr/types/transform.h"
|
||||
|
||||
const luaL_Reg lovrModel[] = {
|
||||
{ "draw", l_lovrModelDraw },
|
||||
|
@ -10,15 +11,9 @@ const luaL_Reg lovrModel[] = {
|
|||
|
||||
int l_lovrModelDraw(lua_State* L) {
|
||||
Model* model = luax_checktype(L, 1, Model);
|
||||
float x = luaL_optnumber(L, 2, 0.f);
|
||||
float y = luaL_optnumber(L, 3, 0.f);
|
||||
float z = luaL_optnumber(L, 4, 0.f);
|
||||
float scale = luaL_optnumber(L, 5, 1.f);
|
||||
float angle = luaL_optnumber(L, 6, 0.f);
|
||||
float ax = luaL_optnumber(L, 7, 0.f);
|
||||
float ay = luaL_optnumber(L, 8, 1.f);
|
||||
float az = luaL_optnumber(L, 9, 0.f);
|
||||
lovrModelDraw(model, x, y, z, scale, angle, ax, ay, az);
|
||||
float transform[16];
|
||||
luax_readtransform(L, 2, transform);
|
||||
lovrModelDraw(model, transform);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,25 @@ mat4 luax_checktransform(lua_State* L, int i) {
|
|||
return luaL_checkudata(L, i, "Transform");
|
||||
}
|
||||
|
||||
void luax_readtransform(lua_State* L, int i, mat4 m) {
|
||||
if (lua_isnumber(L, i)) {
|
||||
float x = luaL_optnumber(L, i++, 0);
|
||||
float y = luaL_optnumber(L, i++, 0);
|
||||
float z = luaL_optnumber(L, i++, 0);
|
||||
float s = luaL_optnumber(L, i++, 1);
|
||||
float angle = luaL_optnumber(L, i++, 0);
|
||||
float ax = luaL_optnumber(L, i++, 0);
|
||||
float ay = luaL_optnumber(L, i++, 1);
|
||||
float az = luaL_optnumber(L, i++, 0);
|
||||
mat4_identity(m);
|
||||
mat4_translate(m, x, y, z);
|
||||
mat4_scale(m, s, s, s);
|
||||
mat4_rotate(m, angle, ax, ay, az);
|
||||
} else {
|
||||
mat4_init(m, luax_checktransform(L, i));
|
||||
}
|
||||
}
|
||||
|
||||
const luaL_Reg lovrTransform[] = {
|
||||
{ "clone", l_lovrTransformClone },
|
||||
{ "unpack", l_lovrTransformUnpack },
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
mat4 luax_newtransform(lua_State* L);
|
||||
mat4 luax_checktransform(lua_State* L, int i);
|
||||
void luax_readtransform(lua_State* L, int i, mat4 transform);
|
||||
|
||||
extern const luaL_Reg lovrTransform[];
|
||||
int l_lovrTransformClone(lua_State* L);
|
||||
|
|
Loading…
Reference in New Issue