15#include "nlua_transform.h"
74 return (
mat4 *)lua_touserdata( L, ind );
88 luaL_typerror( L, ind, TRANSFORM_METATABLE );
102 luaL_getmetatable( L, TRANSFORM_METATABLE );
103 lua_setmetatable( L, -2 );
117 if ( lua_getmetatable( L, ind ) == 0 )
119 lua_getfield( L, LUA_REGISTRYINDEX, TRANSFORM_METATABLE );
122 if ( lua_rawequal( L, -1, -2 ) )
138 char buf[STRMAX_SHORT];
140 mat4_tostr( t, buf,
sizeof( buf ) );
141 lua_pushstring( L, buf );
157 lua_pushboolean( L, ( memcmp( t1, t2,
sizeof(
mat4 ) ) == 0 ) );
208 for (
int i = 0; i < 4; i++ ) {
210 for (
int j = 0; j < 4; j++ ) {
211 lua_pushnumber( L, M->m[j][i] );
212 lua_rawseti( L, -2, j + 1 );
214 lua_rawseti( L, -2, i + 1 );
231 int i = luaL_checkinteger( L, 2 ) - 1;
232 int j = luaL_checkinteger( L, 3 ) - 1;
233 double v = luaL_checknumber( L, 4 );
235 if ( i < 0 || i > 3 ) {
236 NLUA_WARN( L, _(
"Matrix column value not in range: %d" ), i );
237 i =
CLAMP( 0, 3, i );
239 if ( j < 0 || j > 3 ) {
240 NLUA_WARN( L, _(
"Matrix row value not in range: %d" ), j );
241 j =
CLAMP( 0, 3, j );
261 double x = luaL_checknumber( L, 2 );
262 double y = luaL_checknumber( L, 3 );
263 double z = luaL_optnumber( L, 4, 1. );
283 double x = luaL_checknumber( L, 2 );
284 double y = luaL_checknumber( L, 3 );
285 double z = luaL_optnumber( L, 4, 0. );
302 double a = luaL_checknumber( L, 2 );
323 double left = luaL_checknumber( L, 1 );
324 double right = luaL_checknumber( L, 2 );
325 double bottom = luaL_checknumber( L, 3 );
326 double top = luaL_checknumber( L, 4 );
327 double nearVal = luaL_checknumber( L, 5 );
328 double farVal = luaL_checknumber( L, 6 );
330 mat4_ortho( left, right, bottom, top, nearVal, farVal ) );
350 gp[0] = luaL_checknumber( L, 2 );
351 gp[1] = luaL_checknumber( L, 3 );
352 gp[2] = luaL_checknumber( L, 4 );
354 for (
int i = 0; i < 3; i++ )
355 p[i] = M->m[0][i] * gp[0] + M->m[1][i] * gp[1] + M->m[2][i] * gp[2] +
358 lua_pushnumber( L, p[0] );
359 lua_pushnumber( L, p[1] );
360 lua_pushnumber( L, p[2] );
383 gp[0] = luaL_checknumber( L, 2 );
384 gp[1] = luaL_checknumber( L, 3 );
385 gp[2] = luaL_checknumber( L, 4 );
387 for (
int i = 0; i < 3; i++ )
388 p[i] = M->m[0][i] * gp[0] + M->m[1][i] * gp[1] + M->m[2][i] * gp[2];
390 lua_pushnumber( L, p[0] );
391 lua_pushnumber( L, p[1] );
392 lua_pushnumber( L, p[2] );
void mat4_translate(mat4 *m, double x, double y, double z)
Translates a homogenous transformation matrix.
mat4 mat4_identity(void)
Creates an identity matrix.
void mat4_scale(mat4 *m, double x, double y, double z)
Scales a homogeneous transformation matrix.
void mat4_mul(mat4 *out, const mat4 *m1, const mat4 *m2)
Multiplies two matrices (out = m1 * m2).
mat4 mat4_ortho(double left, double right, double bottom, double top, double nearVal, double farVal)
Creates an orthographic projection matrix.
void mat4_rotate2d(mat4 *m, double angle)
Rotates an angle, in radians, around the z axis.
Header file with generic functions and naev-specifics.