Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Modelo 3d A Codigo C++ Opengl

Iniciado por manko, 27 de Junio de 2004, 02:16:02 PM

« anterior - próximo »

manko

 Hola a todos, mi situación es la siguiente, estoy empezando a programar en 3d con OpenGL en C++, uso tambien las librerias Allegro y allegrogl y de momento pues me van saliendo todas las cosas que busco. Pero debido a mi ignorancia e ineptitud con el diseño, me encuentro que aparte de poligonos y esferas necesito ahora algun buen modelo en 3d capaz de manejar en mi codigo.

Para conseguir un modelo en 3d he buscado modeladores y demas programas freeware, pero me encuentro que para exportar el modelo y poderlo usar en mi código no consigo nada decente. Vamos lo mas es desde una pqueña herramienta llamada Draw3D exportar en formato de texto CVS y desde el texto recibir kla lista de vertices, pero me da pereza tener que implementar yo todo lo que se refiere a este paso.

Por eso me gustaria saber si existen mejores métodos, alguna libreria que lo implemente, o por lo menos informarme del tema de los modelos en 3d, que estoy muy pez.

Un saludo y gracias por adelantado a cualquier info.

BeRSeRKeR

 Si no quieres gastarte un duro en una herramienta para crear tus modelos 3D, puedes utilizar Blender.

Con respecto a qué formato utilizar, la mejor opción es utilizar un formato que soporte bones y pesos. Uno que ya tiene mucho tiempo es el MDL de Half-Life pero creo que éste sólo soporta un peso por bone. Otra opción es el MD5 de Doom3 pero desconozco si existe algún exportador en Blender para este formato. También podrías mirarte el formato X de DirectX. En realidad hay muchos formatos. Si pasas de bones y quieres algo sencillo, mírate el formato MD2 de Quake2 o el MD3 de Quake3. Sobre estos formatos tienes bastante información en la red. En concreto, para información sobre MD2 y MD3 pásate por esta web.

Sea como sea, Blender te ofrece la posibilidad de programarte tu propio exportador de forma que puedes crearte tu propio formato si quieres.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

manko

 Muchas gracias Berserker, me han venido de lujo los links. Ahora tendre que aprender a diseñar modelos, que me suena todo a chino, jejej pero bueno es bonito.

Un saludo.

manko

 Una ayuda, estoy intentando implementar mi exportador de modelos 3d desde .Obj a OpenGL, no puedo usar exactamente el del link que me pasaste porque estoy usando tambien allegrogl y bueno quiero integrarlo de forma un poco diferente.

Resulta que el modelo es dibujado mediante triangulos, y no se porque me aparece el error "la memoria nos e puede read" tipico de c++ por algun desbordamiento, despues de  unos 500 vertices. El pseudocodigo podria ponerlo como:

glBegin(GL_TRIANGLES);
       
      for(i = 0 ; i < numVertices ; i++)
      glVertex3f(v.x,v.y,v.z)

glEnd():

el caso esq esta instrución me salta como os he comentado despues de normalmente unos 500 vertices, a alguien se le ocurre algo?

BeRSeRKeR

 Mirando esas líneas de código que has puesto, sólo se me ocurre que el array v tiene una capacidad menor que numVertices. Por eso cuando i llega a un cierto número (tú dices que alrededor de 500), se produce el error que has citado.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

manko

 Hola, el problema es un poco mas extraño de lo que parece.

El problema me salta en la libreria OPENGL.dll por eso no encuentro la solucion, sucede y no por el array de vertices que cuenta con 2000 vertices inicializados, es por alguna razon que no conozco bien del funcionamiento del opengl.dll. Pudiera ser porque la estructura de triangulos sea irrealizable ,  o nose por que he probado a dibujar 3000 triangulos con sus tres vertices en (0,0,0) y no ocurria error. pff nose.

el codigo mas concretamente es el diguiente:

for(int j = 0; j < pObject->numOfFaces; j++)
         {
            // Go through each corner of the triangle and draw it.
            for(int whichVertex = 0; whichVertex < 3; whichVertex++)
            {
               // Get the vertex index for each point of the face
               int vertIndex = pObject->pFaces[j].vertIndex[whichVertex];
   
                         glColor3ub(pColor[0], pColor[1], pColor[2]);

                    // Pass in the current vertex of the object (Corner of current face)
               glVertex3f(    pObject->pVerts[ vertIndex ].x,
                                                            pObject->pVerts[ vertIndex ].y,
                                                            pObject->pVerts[ vertIndex ].z);
            }
}

glEnd();                        // End the drawing

usease por cada lado del objeto (unos 2000) hay un triangulo que lo define, se dibujan vertice a vertice, pues la instruccion me salta dentro de opengl.dll en el verice 509, con valores en debug normales (x = -0.43 , y = 2.043 etc) y nose, he preobado varias cosas, pero es muy raro.

Gracias de nuevo por la ayuda.

manko

 me contesto a mi mismo.

Es muuuy raro, si ejecuto el bucle y pinto 2000 triangulos con vertices (1,1,0) (2,0,0) y (0,2,0) tan contento. Ahora si pongo algun valor de esos puntos en negativo (-1,1,0) (2,0,0) y (0,2,0) me salta la librearia opengl.dll en el triangulo 56 (56 * 3 vertices). Suena raro . lose pero es asi como ocurre.

con este codigo todo bien

while(1){

glBegin(GL_TRIANGLES);
for(int i=0;i<2000;i++){
       glVertex3g(1,1,0);
       glVertex3g(2,0,0);
       glVertex3g(0,2,0);
}
glEnd();

glflush();

}

con este salta el error en opengl.dll (o poniendo cualquier cifra en negativo, en el triangulo 56 en mi caso salta, muy raro

while(1){

glBegin(GL_TRIANGLES);
for(int i=0;i<2000;i++){
       glVertex3g(-1,1,0);
       glVertex3g(2,0,0);
       glVertex3g(0,2,0);
}
glEnd();

glflush();

}


a ver si lo soluciono que seguro q es unatonteria pero me esta matando
Un saludo.

SamVader

 Hola quiza este el deep exploration te pueda servir, es una especie de visor-conversor de modelos 3d, soporta la capacidad de exportar en formato c++ para openGL, aki dejo un link a la pagina principal puedes descargar una version de evaluacion de 30 dias.

PD: no tengo ni idea del resultado del codigo que genera, asin que pruebalo y lo comentas.

Un saludo

manko

 olvidaros de todo lo dicho, problema resuelto.  Era un problema con la carga de texturas anterior , que al hacerlas en mal sitio quedaban a veces los objetos apuntando a NULL y luego me saltaba el error en cualquier momento , me ha vuelto loco.  

gdl

 por eso los llamo "punteros locos"






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.