Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "main.h"
- #include "Matrix.h"
- #include "Vertice.h"
- #include <stdio.h>
- #include "objLoader.h"
- using namespace std;
- // Ponteiro para o objeto que carregará o modelo 3D (formato OBJ).
- objLoader *objData;
- Vertice V1[4];
- /// home/abraao/Documentos/trabalho-CG/trabalho2/monkey_head2.obj
- //-----------------------------------------------------------------------------
- void MyGlDraw(void)
- {
- Vertice V2[objData->faceCount][3];
- for(int i=0; i < objData->faceCount; i++){
- obj_face* obj = objData->faceList[i];
- for(int j=0; j < 3; j++){
- V2[i][j].m_V[0] = objData->vertexList[obj->vertex_index[j]]->e[0];
- V2[i][j].m_V[1] = objData->vertexList[obj->vertex_index[j]]->e[1];
- V2[i][j].m_V[2] = objData->vertexList[obj->vertex_index[j]]->e[2];
- V2[i][j].m_V[3] = 1;
- }
- }
- //****************************************************************************************
- Vertice V1[4];
- V1[0].m_V[0] = 100; V1[1].m_V[0] = 200; V1[2].m_V[0] = 100; V1[3].m_V[0] = 200;
- V1[0].m_V[1] = 100; V1[1].m_V[1] = 100; V1[2].m_V[1] = 200; V1[3].m_V[1] = 200;
- V1[0].m_V[2] = 0; V1[1].m_V[2] = 0; V1[2].m_V[2] = 0; V1[3].m_V[2] = 0;
- V1[0].m_V[3] = 1; V1[1].m_V[3] = 1; V1[2].m_V[3] = 1; V1[3].m_V[3] = 1;
- //*******************************************************************************************************
- //*******************************************************************************************************
- //Matriz model******************************************
- Matrix m_Model, m_Identidade, m_Translacao, m_Escala;
- m_Identidade.m_M[0][0] = 1; m_Identidade.m_M[0][1] = 0; m_Identidade.m_M[0][2] = 0; m_Identidade.m_M[0][3] = 0;
- m_Identidade.m_M[1][0] = 0; m_Identidade.m_M[1][1] = 1; m_Identidade.m_M[1][2] = 0; m_Identidade.m_M[1][3] = 0;
- m_Identidade.m_M[2][0] = 0; m_Identidade.m_M[2][1] = 0; m_Identidade.m_M[2][2] = 1; m_Identidade.m_M[2][3] = 0;
- m_Identidade.m_M[3][0] = 0; m_Identidade.m_M[3][1] = 0; m_Identidade.m_M[3][2] = 0; m_Identidade.m_M[3][3] = 1;
- m_Translacao.m_M[0][0] = 1; m_Translacao.m_M[0][1] = 0; m_Translacao.m_M[0][2] = 0; m_Translacao.m_M[0][3] = 0;
- m_Translacao.m_M[1][0] = 0; m_Translacao.m_M[1][1] = 1; m_Translacao.m_M[1][2] = 0; m_Translacao.m_M[1][3] = 0;
- m_Translacao.m_M[2][0] = 0; m_Translacao.m_M[2][1] = 0; m_Translacao.m_M[2][2] = 1; m_Translacao.m_M[2][3] = 0;
- m_Translacao.m_M[3][0] = 0; m_Translacao.m_M[3][1] = 0; m_Translacao.m_M[3][2] = 0; m_Translacao.m_M[3][3] = 1;
- m_Escala.m_M[0][0] = 2; m_Escala.m_M[0][1] = 0; m_Escala.m_M[0][2] = 0; m_Escala.m_M[0][3] = 0;
- m_Escala.m_M[1][0] = 0; m_Escala.m_M[1][1] = 2; m_Escala.m_M[1][2] = 0; m_Escala.m_M[1][3] = 0;
- m_Escala.m_M[2][0] = 0; m_Escala.m_M[2][1] = 0; m_Escala.m_M[2][2] = 2; m_Escala.m_M[2][3] = 0;
- m_Escala.m_M[3][0] = 0; m_Escala.m_M[3][1] = 0; m_Escala.m_M[3][2] = 0; m_Escala.m_M[3][3] = 1;
- m_Model = m_Escala * m_Translacao;// * m_Escala * m_Translacao;
- //*******************************************************************************************************
- //*******************************************************************************************************
- //M_view9procurar)
- //Camera***********************************
- Vertice cam_Posicao(0, 0, 5);
- Vertice cam_LookAt(0, 0, 0);
- Vertice cam_Up(0, 1, 0);
- Vertice cam_Z = (cam_Posicao - cam_LookAt) / cam_Z.normaVetor(cam_Posicao - cam_LookAt);
- Vertice cam_X = cam_X.prodVetorial(cam_Up, cam_Z) / cam_X.normaVetor( cam_X.prodVetorial(cam_Up, cam_Z) );
- Vertice cam_Y = cam_Y.prodVetorial(cam_Z, cam_X) / cam_Y.normaVetor(cam_Y.prodVetorial(cam_Z, cam_X));
- //*******************************************************************************************************
- //*******************************************************************************************************
- //Matriz view***********
- Matrix m_View, m_Bt, m_trans;
- m_Bt.m_M[0][0] = cam_X.m_V[0]; m_Bt.m_M[0][1] = cam_X.m_V[1]; m_Bt.m_M[0][2] = cam_X.m_V[2]; m_Bt.m_M[0][3] = 0;
- m_Bt.m_M[1][0] = cam_Y.m_V[0]; m_Bt.m_M[1][1] = cam_Y.m_V[1]; m_Bt.m_M[1][2] = cam_Y.m_V[2]; m_Bt.m_M[1][3] = 0;
- m_Bt.m_M[2][0] = cam_Z.m_V[0]; m_Bt.m_M[2][1] = cam_Z.m_V[1]; m_Bt.m_M[2][2] = cam_Z.m_V[2]; m_Bt.m_M[2][3] = 0;
- m_Bt.m_M[3][0] = 0 ; m_Bt.m_M[3][1] = 0 ; m_Bt.m_M[3][2] = 0 ; m_Bt.m_M[3][3] = 1;
- m_trans.m_M[0][0] = 1; m_trans.m_M[0][1] = 0; m_trans.m_M[0][2] = 0; m_trans.m_M[0][3] = -cam_Posicao.m_V[0];
- m_trans.m_M[1][0] = 0; m_trans.m_M[1][1] = 1; m_trans.m_M[1][2] = 0; m_trans.m_M[1][3] = -cam_Posicao.m_V[1];
- m_trans.m_M[2][0] = 0; m_trans.m_M[2][1] = 0; m_trans.m_M[2][2] = 1; m_trans.m_M[2][3] = -cam_Posicao.m_V[2];
- m_trans.m_M[3][0] = 0; m_trans.m_M[3][1] = 0; m_trans.m_M[3][2] = 0; m_trans.m_M[3][3] = 1 ;
- m_View = m_Bt * m_trans ;
- //*******************************************************************************************************
- //*******************************************************************************************************
- //Matriz modelView******************
- Matrix m_model_view = m_View * m_Model;
- //*******************************************************************************************************
- //*******************************************************************************************************
- //Matriz projection***************
- Matrix m_Projecao;
- double d = 2.2;
- m_Projecao.m_M[0][0] = 1; m_Projecao.m_M[0][1] = 0; m_Projecao.m_M[0][2] = 0 ; m_Projecao.m_M[0][3] = 0;
- m_Projecao.m_M[1][0] = 0; m_Projecao.m_M[1][1] = 1; m_Projecao.m_M[1][2] = 0 ; m_Projecao.m_M[1][3] = 0;
- m_Projecao.m_M[2][0] = 0; m_Projecao.m_M[2][1] = 0; m_Projecao.m_M[2][2] = 1 ; m_Projecao.m_M[2][3] = d;
- m_Projecao.m_M[3][0] = 0; m_Projecao.m_M[3][1] = 0; m_Projecao.m_M[3][2] =-1/d; m_Projecao.m_M[3][3] = 0;
- //*******************************************************************************************************
- //*******************************************************************************************************
- //Matriz modelViewProjection***********************
- Matrix m_ModelViewProjection = m_Projecao * m_model_view;
- //*******************************************************************************************************
- //*******************************************************************************************************
- Vertice Vtransformado[4];
- Vertice V_Transf2[objData->faceCount][3];
- for(int i=0; i < objData->faceCount; i++)
- { for(int j=0; j < 3; j++)
- {
- V_Transf2[i][j] = m_ModelViewProjection * V2[i][j];
- }
- }
- //Homegeinizaçao*******************************
- Cor *cor = new Cor(255,255,255,0);
- Cor *cor1 = new Cor(255,255,255,0);
- for(int i=0; i < objData->faceCount; i++)
- {
- for(int j=0; j < 3; j++)
- {
- V_Transf2[i][j] = V_Transf2[i][j] / V_Transf2[i][j].m_V[3];
- }
- }
- //-----------------------------------------------------------------------------
- // Funcao que imprime as coordenadas de um vertice.
- // Pode ser utilizada para fazer debug de código.
- //-----------------------------------------------------------------------------
- // Esta funcao apenas imprime informacoes referentes ao modelo que foi carregado,
- // tais como numero de vertices, normais, fontes de luz, etc.
- //-----------------------------------------------------------------------------
- // Libera a memoria do objeto responsavel por guardar dados do modelo.
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////// Mapeando pontos do espaço na tela
- Matrix mT, mS, mI, mG;
- int xMax = 2, xMin = -2, yMax = 2, yMin = -2;
- mT.m_M[0][3] = ((IMAGE_WIDTH-1) / xMax - xMin);
- mT.m_M[1][3] = ((IMAGE_HEIGHT-1) / yMax - yMin);
- mS.m_M[0][0] = ((IMAGE_WIDTH-1)/(xMax - xMin));
- mS.m_M[1][1] = ((IMAGE_HEIGHT-1)/(yMax - yMin));
- mI.m_M[1][1] = -1;
- mG = mT * mS * mI;
- for(int i=0; i < objData->faceCount; i++)
- for(int j=0; j < 3; j++)
- V_Transf2[i][j] = mG * V_Transf2[i][j];
- for(int i=0; i < objData->faceCount; i++)
- {
- for(int j=0; j < 3; j++)
- for(int k=0; k < 3; k++)
- {
- //cout << round(facesTransf[i][j].V[k]) << endl;
- //system("pause");
- V_Transf2[i][j].m_V[k] = round( V_Transf2[i][j].m_V[k]);
- //cout<< i << j << k <<endl;
- }
- DrawTriangle( &V_Transf2[i][0], &V_Transf2[i][1], &V_Transf2[i][2], cor,cor);
- }
- //**************************************************************************************************************
- //**************************************************************************************************************
- }
- //-----------------------------------------------------------------------------
- // Programa principal
- int main(int argc, char **argv)
- {
- objData = new objLoader(); // cria o objeto que carrega o modelo
- objData->load("/home/abraao/Imagens/monkey_head2.obj"); // a carga do modelo é indicada atraves do nome do arquivo.
- // Neste caso, deve ser sempre do tipo OBJ.
- // Habilite esta função se você deseja imprimir na tela dados do modelo
- // gerados durante a sua carga.
- //PrintModelInfo(objData);
- InitOpenGL(&argc, argv);
- InitCallBacks();
- InitDataStructures();
- DrawFunc = MyGlDraw;
- // atexit(FreeMemFunc);
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement