2010-08-12 3 views
2

Я создаю приложение для Android с использованием OpenGL ES и нуждаюсь в некоторой помощи с вершинами, текстурами и обычными указателями. Примеры, которые я видел, останавливаются на довольно базовом уровне, поэтому я, кажется, не хватает информации.Должен ли glVertexPointer содержать различные вершины или все вершины?

Моя основная ничья() процесс

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
gl.glTexCoordPointer(3, GL10.GL_FLOAT, 0, uvBuffer); 
gl.glDrawElements(GL10.GL_TRIANGLES, faceBufferLength, GL10.GL_UNSIGNED_BYTE, faceBuffer); 

Вершина и уф являются FloatBuffers, построенные из различных х, у, г координаты соответствующих вершин и УФ.

faceBuffer является ByteBuffer индексов, указывающих на соответствующий vertexBuffer.

Каждая грань состоит из трех вершин, и каждая грань определяет другой УФ для его вершины (правильно?)

Моим вопроса поэтому есть, мне нужно заново определить каждое отчетливое сочетание вершин/УФ в все буферы?

Рассмотрите простой тетраэдр. Он состоит из

4 вершин (три 'базовых' и одна 'точка'):

Vertex 1: <1,1,1> (the point) 
Vertex 2: <2,1,0> 
Vertex 3: <0,0,0> 
Vertex 4: <2,0,0> 

3 координат УФ (все грани имеют один и тот же образ)

UV 1: <0,0,0> (top left) 
UV 2: <0,1,0> (bottom left) 
UV 3: <1,0,0> (top right) 

4 лица:

Face 1: v1/u1, v2/u2, v3/u3 
Face 2: v1/u1, v3/u2, v4/u3 
Face 3: v1/u1, v4/u2, v2/u3 
Face 4: v2/u1, v3/u2, v4/u3 

Так что мой вопрос в том, как мне сказать GL, который UV использовать для каждой грани/вершины?

Должно ли vertexBuffer содержать 4 набора значений, или 12? Must uvBuffer и vertexBuffer имеют то же самое количество позиций.

В принципе, могу ли я «повторно использовать» вершины, если они имеют разные значения УФ и/или нормальные значения?

Или я должен быть уникальным:

Vertex 1: <1,1,1> (face A) 
Vertex 2: <2,1,0> (face A) 
Vertex 3: <0,0,0> (face A) 
Vertex 4: <1,1,1> (face B) 
Vertex 5: <0,0,0> (face B) 
Vertex 6: <2,0,0> (face B) 
Vertex 7: <1,1,1> (face C) 
Vertex 8: <2,0,0> (face C) 
Vertex 9: <2,1,0> (face C) 
Vertex 10: <2,1,0> (face D) 
Vertex 11: <0,0,0> (face D) 
Vertex 12: <2,0,0> (face D) 

UV 1: <0,0,0> (face A) 
UV 2: <0,1,0> (face A) 
UV 3: <1,0,0> (face A) 
UV 4: <0,0,0> (face B) 
UV 5: <0,1,0> (face B) 
UV 6: <1,0,0> (face B) 
UV 7: <0,0,0> (face C) 
UV 8: <0,1,0> (face C) 
UV 9: <1,0,0> (face C) 
UV 10: <0,0,0> (face D) 
UV 11: <0,1,0> (face D) 
UV 12: <1,0,0> (face D) 

Face 1: v1/u1, v2/u2, v3/u3 
Face 2: v4/u5, v5/u5, v6/u6 
Face 3: v7/u7, v8/u8, v9/u9 
Face 4: v10/u10, v11/u11, v12/u12 

ответ

3

Дублирование данных о местоположении, как есть 12 позиции вершин в vertexData. Сделайте то же самое для координат текстуры.

Индексов, как вы заметили, индекс все массивов с одинаковыми индексами, поэтому стандарт дублировать позиции вершин так, что каждый индекс имеет свои собственные данные вершин (позиция + UV).

+0

Спасибо за быстрый ответ! Это не большая проблема, чтобы «расширить» идентификаторы на повторяющиеся вершины, я полагаю, я просто подумал, что лучше всего проверить, что я где-то не вижу очевидной возможности. – Cylindric

Смежные вопросы