¿Cómo configurar / texturebuffer calcular en glTexCoordPointer al importar desde OBJ-archivo
Pregunta
Estoy analizar un archivo OBJ-en Android y mi objetivo es hacer y mostrar el objeto. Todo funciona bien, excepto la asignación correcta de textura (importar el recurso / imagen en OpenGL, etc funciona bien).
No sé cómo rellenar los datos relacionados con la textura de la obj-archivo en una texturebuffer a objetos.
En el archivo OBJ-He VT-líneas:
vt 0.495011 0.389417
vt 0.500686 0.561346
y la cara líneas:
f 127/73/62 98/72/62 125/75/62
Mis sorteo es de rutina parece (sólo partes pertinentes):
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glNormalPointer(GL10.GL_FLOAT, 0, normalsBuffer);
gl.glTexCoordPointer(2, GL10.GL_SHORT, 0, t.getvtBuffer());
gl.glDrawElements(GL10.GL_TRIANGLES, t.getFacesCount(), GL10.GL_UNSIGNED_SHORT, t.getFaceBuffer());
Salida de los cargos de los archivos OBJ:
Vertex-count: 1023
Vns-count: 1752
Vts-count: 524
/////////////////////////
Part 0
Material name:default
Number of faces:2037
Number of vnPointers:2037
Number of vtPointers:2037
Cualquier consejo es bienvenido.
Solución
Lo sentimos, no sé hasta qué punto esto es condescendiente, pero desde la parte superior:
f 127/73/62 98/72/62 125/75/62
Means un triángulo entre el vértice con la posición 127a dado en el archivo, la posición 73a de la textura en el archivo y el 62o normal y los otros dos vértices especificado de una manera similar.
En OpenGL se especifica únicamente un solo índice por vértice (como todo el asunto pasa a través de la transformación como una sola unidad), por lo que necesita para averiguar todas las diferentes combinaciones de posición, coordenadas de textura y normal y organizar las memorias intermedias que pasar a glVertexPointer
, glNormalPointer
y glTexCoordPointer
en consecuencia. Por ejemplo, la cara anterior podría llegar a ser especificado a través de GL_TRIANGLES como entre los vértices 0, 1 y 2, en las que había copiado la posición 127ª a la primera en su búfer de vértice interno, que había copiado la 73ª coordenadas de textura a la primera en su textura interna coordinar tampón y que había copiado la 62ª normal a la primera en la lista de lo normal interna.
Es muy probable que usted quiere tomar un HashMap la combinación de teclas vértice / coordenada de textura / normal y asignación a una posición en sus matrices internas. A medida que entran a través de cada cara en el OBJ entrante, puede comprobar si se ha conseguido ya que la combinación asignada a un puesto en sus buffers internos y darle la siguiente disponible si no.
vt es un coord textura, así por ejemplo, la textura de coordenadas:
vt 0.495011 0.389417
quiere decir que, dentro del espacio de la textura, x = 0.495011, y = 0,389417. De memoria, el formato de archivo OBJ y OpenGL tienen los ejes y en direcciones opuestas. Así que en términos de OpenGL que querrías s = 0,495011, t = 1 -. = 0.389417 0.610583
Si su objeto es el uso de una adecuada complicados atlas de textura o desollado, me imagino que estaría lejos de ser evidente que las coordenadas y se da la vuelta; si sólo tiene algo así como un cubo con la misma textura repetida en su totalidad en cada cara, entonces probablemente solo lo ven como siendo volteado a lo largo de la vertical.
¿Tiene que cubren la fuente de confusión?