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