Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema Basico Opengl Ayuda

Iniciado por videador, 25 de Noviembre de 2005, 02:01:49 PM

« anterior - próximo »

videador

 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:



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

BeRSeRKeR

 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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

videador

 Muchas gracias. Era eso. Dios que alivio es que no podia ni dormir XD.

ajmendoza

 Pon una imagen de cómo queda, que me parecia muy raro eso de las lineas y ya tengo curiosidad ;).






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.