Tengo unas rutinas que permiten pintar figuras en 3D en la pantalla. Consiste basicamente multiplicar matrices, en este link explican los calculos necesarios:
http://homepages.cae.wisc.edu/~ece734/mmx/3D_geometry.htmlEn un principio, lo realice todo en flotante, pero ahora quiero optimizarlo utilizando las funciones de Matrices del dsPIC (MatrixMultiply y MatrixScale)
Necesito multiplicar una matriz de [4*1]*[4*4]=[4*1], y lo estoy intentando de la siguiente manera:
*3D Engine.h*****************************************************
#define Tx M_TRANS[3][0]
#define Ty M_TRANS[3][1]
#define Tz M_TRANS[3][2]
//(Th = translation along h axis)
fractional
M_TRANS[4][4] = { 1, 0, 0, 0, //{ 1, 0, 0, Tx,
0, 1, 0, 0, // 0, 1, 0, Ty,
0, 0, 1, 0, // 0, 0, 1, Tz,
0, 0, 0, 1 }; // 0, 0, 0, 1 };
//Source Matrix
fractional
M_src[4] = { 0, 0, 0, 0 };
//Destination Matrix
fractional
M_dst[4] = { 0, 0, 0, 0 };
****************************************************************
*dspic.c**********************************************************
Tx = 5;
Ty = 10;
Tz = 0;
M_src[0][0] = 20;
M_src[1][0] = 0;
M_src[2][0] = 0;
M_src[3][0] = 0;
MatrixMultiply( 1, 4, 4, &M_dst, &M_src, &M_TRANS );
xout = M_dst[0][0];
yout = M_dst[1][0];
zout = M_dst[2][0];
****************************************************************
El codigo me compila, pero no me funciona como deberia:
- ¿Estoy declarando correctamente las matrices?
- ¿Estoy llamando correctamente a la funcion MatrixMultiply?