我正在做我的学校项目并且刚刚开始。提供了一个框架,我设法加载 SGF 模型并显示它,但是当我想使用另一个着色器从顶点创建简单的纹理地板时,它只显示模型(编译后地板可见约 0.5 秒,但后来消失)有什么建议如何做吗?
public void display(GLAutoDrawable drawable) {
final GL3 gl = drawable.getGL().getGL3();
loader.setUniformMatrix("projection", projection);
gl.glClear(GL3.GL_COLOR_BUFFER_BIT | GL3.GL_DEPTH_BUFFER_BIT);
myTexture.bind(gl, modeling, "my_texture");
myTexture.bind(gl, modeling, "my_texture2");
myTexture.bind(gl, program, "my_texture");
myTexture.bind(gl, program, "my_texture2");
Mat4 mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);
program.setUniformMatrix("model_view", mv);
program.use(gl);
gl.glDrawArrays(GL3.GL_TRIANGLES, 0, numVertices);
// 2nd part
// modeling.setUniformMatrix("model_view", mv);
modeling.setUniformMatrix("model_view", mv);
modeling.use(gl);
for (Map.Entry<String, VertexBufferObject> entry : vboHashMap.entrySet()) {
String key = entry.getKey();
entry.getValue().bind(gl);
gl.glDrawArrays(GL3.GL_TRIANGLES, 0, SGFLoader.getNumVertices(key));
}
}
当我删除第二部分(负责加载模型)之后的线条时,木板是可见的,否则它只渲染模型。
有什么建议吗?
最佳答案
看起来您没有在 display() 方法中绑定(bind)地板的顶点数组。我猜你在设置所有内容时绑定(bind)了一次,但忘记每帧再次绑定(bind)它,这可以解释为什么它会闪烁几分之一秒。
OpenGL 在底层并不是面向对象的。当您调用 glDrawArrays
时,它将绘制您最后绑定(bind)的数组。
关于java - 使用多个着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14283409/