Применение текстур к объектному примитиву буфера вершин - PullRequest
1 голос
/ 02 октября 2011

Как применить текстуры к объекту буфера вершин в Android?

ОТВЕТ:


Код работает нормально, за исключением того, что отсутствует вызовto

glEnable(GL_TEXTURE_2D);

Это и вызов

glEnableClientState(GL_TEXTURE_COORD_ARRAY);

необходимы для того, чтобы объект буфера вершин мог нарисовать текстуру.


ВОПРОС:

Из того, что я знаю, сначала вы должны создать буфер NIO:

ByteBuffer tbb = ByteBuffer.allocateDirect(texCoords.length * 4);
tbb.order(ByteOrder.nativeOrder());
FloatBuffer textureBuffer = tbb.asFloatBuffer();
textureBuffer.put(texCoords);
textureBuffer.position(0);

В этом примере кода массив texCoords содержит 2-компонентные (s, t) данные текстуры.

После создания буфера NIO вам нужно передать его в opengl и создать объект буфера Vertex:

int[] id = new int[1];//stores the generated ID.
gl11.glGenBuffers(1, id, 0);
gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, id[0]);
gl11.glBufferData(GL11.GL_ARRAY_BUFFER, texCoords.length * 4, textureBuffer, GL11.GL_STATIC_DRAW);

, чтобы все заботилосьинициализация.Затем нам нужно нарисовать его, и мы сделаем так:

gl11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);//enable for textures
gl11.glActiveTexture(GL11.GL_TEXTURE0);
//lets pretend we created our texture elsewheres and we have an ID to represent it.
gl11.glBindTexture(GL11.GL_TEXTURE_2D, textureId);

//Now we bind the VBO and point to the buffer.
gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, id[0])//the id generated earlier.
gl11.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0);//this points to the bound buffer

//Lets also pretend we have our Vertex and Index buffers specified.
//and they are bound/drawn correctly.

Так что, хотя я думаю, что это необходимо для того, чтобы OpenGL рисовал текстуру, у меня есть ошибка, ирендерится только красный треугольник (без моей модулированной текстуры камня).

1 Ответ

1 голос
/ 13 октября 2011

Обе функции для VBO необходимо вызывать для включения текстур.

gl.glEnable (GL11.GL_TEXTURE_2D); gl.glEnableClientState (GL11.GL_TEXTURE_COORD_ARRAY);

...