Академический Документы
Профессиональный Документы
Культура Документы
1
Prof. Dr. Luiz Fernando Martha
6º trabalho – Programa para controle de visualização 3D
Implementação de transformações geométricas 3D em coordenadas homogêneas e de
mecanismos para controle de visualização com base em eixos da tela
Rio de Janeiro – RJ
2019
Neste trabalho foi solicitado que o aluno completasse códigos faltantes nos arquivos
“t3d.cpp” e “glcanvas.cpp”.
No primeiro arquivo, referente ao cálculo das matrizes de transformações 3D, foi
detectado que os arrays de duas dimensões responsáveis por representar as matrizes
apresentavam valores diferentes quando não eram inicializados, para corrigir isso, estes
mesmos arrays foram inicializados com valor 0. Esta observação pode ser conferida
abaixo.
O trechos completados/editados do arquivo “t3d.cpp” foram os seguintes:
double scale[4][4] = { 0 };
double trans[4][4] = { 0 };
double rot[4][4] = { 0 };
/*** COMPLETE HERE - T3D: 03 ***/
rot[0][0] = v.getX()*v.getX() + cost*(1 - v.getX()*v.getX());
rot[0][1] = v.getX()*v.getY()*(1 - cost) - v.getZ()*sint;
rot[0][2] = v.getZ()*v.getX()*(1 - cost) + v.getY()*sint;
rot[1][0] = v.getX()*v.getY()*(1 - cost) + v.getZ()*sint;
rot[1][1] = v.getY()*v.getY() + cost*(1 - v.getY()*v.getY());
rot[1][2] = v.getY()*v.getZ()*(1 - cost) - v.getX()*sint;
rot[2][0] = v.getX()*v.getZ()*(1 - cost) - v.getY()*sint;
rot[2][1] = v.getY()*v.getZ()*(1 - cost) + v.getX()*sint;
rot[2][2] = v.getZ()*v.getZ() + cost*(1 - v.getZ()*v.getZ());
rot[3][3] = 1.0;
/*** COMPLETE HERE - T3D: 03 ***/
/* Translate to origin. */
/*** COMPLETE HERE - T3D: 04 ***/
translate(-px, -py, -pz);
/*** COMPLETE HERE - T3D: 04 ***/
/* Rotate about given vector direction. */
/*** COMPLETE HERE - T3D: 05 ***/
rotateVecOrg(angle, vx, vy, vz);
/*** COMPLETE HERE - T3D: 05 ***/
double rot[4][4] = { 0 };
/* Define alpha and beta parameters from the front and back
* arguments.*/
/*** COMPLETE HERE - T3D: 12 ***/
alpha = -(back + front);
beta = -(back * front);
/*** COMPLETE HERE - T3D: 12 ***/
double pers[4][4] = { 0 };
/* Create Perspective matrix.
*/
/*** COMPLETE HERE - T3D: 13 ***/
pers[0][0] = d; pers[1][1] = d;
pers[2][2] = -alpha;
pers[2][3] = -beta;
pers[3][2] = -1.0;
/*** COMPLETE HERE - T3D: 13 ***/