¿Cómo configurar / texturebuffer calcular en glTexCoordPointer al importar desde OBJ-archivo

StackOverflow https://stackoverflow.com/questions/4233152

  •  26-09-2019
  •  | 
  •  

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.

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top