2009-12-01 8 views
12

Estoy haciendo un procesador usando OpenGL. Tengo modelos texturizados en Blender/Sketchup (puedo intercambiarlos fácilmente) y me gustaría poder exportar esos archivos a mi procesador. Mi idea inicial era simplemente exportar las caras en bruto y renderizar esos triángulos, pero también me gustaría cortar fácilmente mis archivos de textura en coordenadas de textura.Uso de los modelos de Blender/SketchUp en OpenGL

Con eso, quiero decir que las caras de mi modelo se tallan en triángulos. Puede ver en this image (reproducido a continuación) que mi curva se convierte en 24 triángulos. Me gustaría saber qué coordenadas de textura usar para cada triángulo.

Polygonized curved 3D object

¿Sería un archivo DAE ser la forma más sencilla de hacerlo? He estado leyendo las especificaciones para el formato y parece bastante fácil. Creo que podría analizar XML y recrear fielmente los modelos en OpenGL. Me pregunto si hay una manera más fácil (es decir, una que no reinventa la rueda).

+0

¿Puede usted explicar de lo que entendemos por "Me gustaría cortar fácilmente mis archivos de textura en coordenadas de textura también" –

+0

¡Claro! Editado mi publicación original. – mkenyon

+2

Preguntas con la regla de imágenes, así que me tomé la libertad de agregar la tuya. – unwind

Respuesta

12

Si te sientes cómodo con el análisis del formato .dae, seguro úsalo. Sin embargo, si solo está interesado en exportar mallas de triángulos texturizados, consideraría usar el .obj format, que es mucho más fácil de analizar. Por lo que puedo decir, tanto Sketchup como Blender pueden exportar este formato.

+0

Parece una forma más simple de representar los mismos datos. Veré el formato OBJ esta noche. – mkenyon

+1

Quiero que sepas que el OBJ (y los archivos MTL correspondientes) funcionó maravillosamente. Muchas gracias! – mkenyon

+0

¡De nada! –

1

Cualquier formato de archivo decente utilizado por los programas de modelado (como Blender o Sketchup) incluirá toda la información necesaria para recrear la geometría que ve. Esto debe incluir el tipo de geometría (por ejemplo, tiras de triángulos, triángulos individuales, etc.), los vértices y las normales para la geometría, las propiedades del material utilizado y también las texturas utilizadas junto con las coordenadas de textura apropiadas. Si falta algo de un posible formato de archivo, elija otro.

Si piensas que analizar XML es simple, entonces espero que estés planeando utilizar las bibliotecas existentes para hacer esto, como expat, Xerces o alguna otra implementación específica de un idioma.

Al considerar importar/exportar, primero intente encontrar una biblioteca de código abierto que pueda manejar la importación y poner los datos a disposición de su programa en un formato razonable. Si eso no está disponible, y debe escribir su propio importador, intente encontrar un ASCII simple (no basado en XML) o formato binario que se ajuste a sus necesidades. PLY podría ser adecuado. Solo como último recurso, recomendaría tratar de implementar un importador para un formato basado en XML.

+0

He trabajado en aplicaciones web antes; Sé lo suficiente como para no hacer mi propio análisis XML. Sería a través de una biblioteca. – mkenyon

2

Si desea analizar archivos .dae, le sugiero que consulte los analizadores Collada. .dae es en realidad la extensión para archivos Collada, el último esfuerzo del Khronos group (mantenedores de OpenGL) para tener un único formato de archivo unificado para el intercambio de datos 3D.

En cuanto a los programas de análisis existentes, esto es lo que he encontrado:

  • collada-dom, la implementación de referencia. Como su nombre lo sugiere, es solo una abstracción del árbol XML.
  • FCollada, una bonita abstracción. Sin embargo, este proyecto ha estado muerto durante casi dos años, y, por lo que he reunido, es poco probable que veamos ninguna actualización en el futuro.
  • OpenCollada, un nuevo esfuerzo reciente. No lo he probado, pero hay una comunidad activa detrás de él.

Dicho esto, si su único objetivo está cargando una pieza simple de la geometría con vértices, las normales y las coordenadas de texturas, yendo con el formato de archivo .obj podría ser una manera más rápida.

+0

Quiero que sepas que los archivos OBJ funcionaron muy bien. Muchas gracias! – mkenyon

0

Usted debe echar un vistazo a:

http://sketchup.google.com/community/developers.html

El equipo de SketchUp proporciona un servidor COM ++ C gratis. Al usar esto, puede obtener acceso a mucha información sobre un archivo .skp.

Debe poder utilizar este servidor COM para escribir un importador .skp para su aplicación.

Debería tratar de obtener el archivo .tlb si puede. Esto le dará acceso a punteros inteligentes, que simplificarán su importador (cliente COM)

Utilicé la versión 6 SDK (que incluía el archivo tlb). La versión actual del SDK no parece incluir este archivo.

Alguien envió una solución (para el archivo TLB falta) en los foros de desarrolladores: http://groups.google.com/group/su-sdk-fileshare/topics

5

Si formatos binarios no le tiene miedo, me gustaría sugerir escribir un plug-in de Sketchup Blender & y exportación de la geometría precocida en matrices de vértices empaquetados.

Lo bueno de este método es que no hay análisis ni conversión de tipos en su aplicación. Todo está listo para ser enviado a la GPU en simples copias de memoria contigua. Ideal para geometría estática.

Un despojado exportador batidora ve algo como esto:


#!BPY 
import bpy, struct 
from Blender import * 

self.fh = open("MyFileName", "w") 
m = bpy.data.meshes["MyMeshName"] 
faces = m.faces 
for face in faces: 
    for (vertex, uv) in zip(face.verts, face.uv): 
     self.fh.write(struct.pack('<fff', *vertex.co)) # coords 
     self.fh.write(struct.pack('<fff', *vertex.no)) # normals 
     self.fh.write(struct.pack('<ff', uv.x, uv.y)) # uvs 

self.fh.close() 
1

Hay también: Lib3DS - http://www.lib3ds.org/ LibOBJ (no me deja publicar enlace)

+0

¡Eso es interesante! Lo comprobaré. – mkenyon

+0

@mkenyon También es probable que haya muchas bibliotecas de código abierto en todo Github. – FracturedRetina

Cuestiones relacionadas