Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: videador en 25 de Noviembre de 2005, 02:01:49 PM

Título: Problema Basico Opengl Ayuda
Publicado por: videador en 25 de Noviembre de 2005, 02:01:49 PM
 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
Título: Problema Basico Opengl Ayuda
Publicado por: BeRSeRKeR en 25 de Noviembre de 2005, 02:25:49 PM
 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.
Título: Problema Basico Opengl Ayuda
Publicado por: videador en 25 de Noviembre de 2005, 02:44:45 PM
 Muchas gracias. Era eso. Dios que alivio es que no podia ni dormir XD.
Título: Problema Basico Opengl Ayuda
Publicado por: ajmendoza en 25 de Noviembre de 2005, 03:29:47 PM
 Pon una imagen de cómo queda, que me parecia muy raro eso de las lineas y ya tengo curiosidad ;).