Autor Tema: Motor 3D para dsPIC  (Leído 2093 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jgpeiro

  • PIC10
  • *
  • Mensajes: 24
Motor 3D para dsPIC
« en: 27 de Febrero de 2006, 05:58:00 »
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.html

En 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?