Hola a todos. Pongo aqui mi pregunta, estoy intentando aprender a cargar modelos ASC.
Uso C++ Builder. El asunto es que estoy seguro de que cargo bien el modelo, se cargan todos los objetos del modelo con sus vertices y aristas. Pero a la hora de visualizar me salen figuras muy simples. No sé si es porque no muestro bien, yo pongo el codigo que tengo de OpenGL, estoy bastante desesperado la verdad.
-Lo que hago es:
-cargo el modelo (estoy seguro que cargo bien todas las aristas y vertices).
ViewPort:
Uso un control TOpenGLPanel, este funciona.
glViewport(0,0,GLPanel->Width,GLPanel->Height);
-Hago un glOrtho con las coordenadas maximas y minimas del modelo.
glOrtho(cmBarco.xmin,cmBarco.xmax,cmBarco.ymin,cmBarco.ymax,-10,10);
Estas dos instrucciones están en el init del formulario y su resize.
Para mostrar hago lo siguiente:
void TForm1::paint(){
glClearColor(0.0f,0.0f,1.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT);
// drawEdges();+
glColor3f(1.0f,0.0f,0.0f);
if(cmBarco.load) cmBarco.renderObjects();
Form1->GLPanel->SwapBuffers();
}
Render del modelo es el siguiente:
El modelo CMoldel tiene un vector de CObjectos entonces:
Modelo:
void CModel::renderObjects(){
int i;
// Rota la malla sobre sí misma para que sea más fácil de ver
//glRotatef(101.0f, 0.0f, 1.0f, 0.0f);
//glRotatef(60.0f, 1.0f, 1.0f, 0.0f);
//glRotatef(60.0, 1.0f, 0.0f, 0.0f);
glEnable(GL_POLYGON_SMOOTH);
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);//GL_POINTS);
for(i=0;i!=vObj.size();i++){
vObj[i].renderObject();
}
}
Objecto: Tiene un vector de aristas y un vector de vertices.
void CInfoObject::renderObject(){
int i,j;
/*Triangulos*/
glBegin(GL_TRIANGLES);
for(j=0;j!=vTri.size();j++){
glVertex3s(vVertex[vTri[j].p[0]].c[0],
vVertex[vTri[j].p[0]].c[1],
vVertex[vTri[j].p[0]].c[2]);
glVertex3s(vVertex[vTri[j].p[1]].c[0],
vVertex[vTri[j].p[1]].c[1],
vVertex[vTri[j].p[1]].c[2]);
glVertex3s(vVertex[vTri[j].p[2]].c[0],
vVertex[vTri[j].p[2]].c[1],
vVertex[vTri[j].p[2]].c[2]);
}
glEnd();
};
vVertex vector de array de 3, que indica cada coordenada.
vTri vector de array de 3, que indica cada punto del triangulo.
He comprobado el contenido de los vector y coincide con los vertices, tanto en numero como en valores de todos los objetos.
Esto es lo que muestra:
(http://img297.imageshack.us/img297/8445/captura6ay.gif)
Y mi modelo es el siguiente:
http://s42.yousendit.com/d.aspx?id=2ILA6S5...RN30Z5PBUJ9QTKI¿Alguien sabe que puede estar pasando?.
Muchas gracias. Si se necesita ver el codigo del proyecto entero de Builder que me lo diga, pero no hay mucho mas.
Notas:
Con este metodo si he conseguido cargar modelos en un formato como el asc pero solo los numeros.
El modelo es un barco con 76 objectos. Y comprueba que dan las muchisimas vueltas por los for de los triangulos.
Los valores max y min
Ten en cuenta que glVertex3s especifica las coordenadas de vértice en forma de short y no float. Así que es posible que te esté redondeando las coordenadas a 0, 1, 2...
Saludos.
Muchas gracias. Era eso. Dios que alivio es que no podia ni dormir XD.
Pon una imagen de cómo queda, que me parecia muy raro eso de las lineas y ya tengo curiosidad ;).