【发布时间】:2014-04-04 22:14:58
【问题描述】:
目前,我有一个 OBJ 加载器,可以加载必要的 OBJ,解析材质,并在必要时绑定纹理。
但是,我需要澄清一下,当顶点指针在您刚刚绑定的 VBO 中移动时,您是否可以绑定多个纹理。我的意思是:我想在一个 VBO 中将多种材质放在不同的网格中。研究告诉我我需要使用着色器,但没有指定如何在 VBO 中途加载它们。
我正在尝试尽量减少绘图调用和 VBO 的数量,同时(希望)尽可能远离多重纹理。非常感谢任何帮助!
当前绘制代码:
private void Run() {
GetInput inputController = new GetInput();
while (!Display.isCloseRequested() && !Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
CalculateFPS();
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
//Get Input
GL11.glLoadIdentity();
inputController.GetMouse();
inputController.GetKeyboard();
//Rotate
GL11.glRotated(inputController.mousey, 1, 0, 0);
GL11.glRotated(inputController.mousex, 0, 1, 0);
//Move
GL11.glTranslated(inputController.position.x, inputController.position.y, inputController.position.z);
//Draw
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); //Allow vertex arrays
GL11.glEnableClientState(GL11.GL_NORMAL_ARRAY); //Allow normal arrays
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBO_OBJ.vertexVBO); //Bind vertexVBO for drawing
GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0L); //Setup vertexPointer for drawing
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBO_OBJ.normalVBO); //Bind normalVBO for drawing
GL11.glNormalPointer(GL11.GL_FLOAT, 0, 0L); //Setup normalPointer for drawing
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, VBO_OBJ.totalVertices); //Draw!
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); //Unbind
GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
GL11.glDisableClientState(GL11.GL_NORMAL_ARRAY);
//Update Display
Display.update();
Display.sync(1000);
}
System.exit(0);
}
【问题讨论】: