OpenGL中多模型创建时后创建模型覆盖先创建模型的问题求助
解决OpenGL多模型渲染时后创建模型覆盖前一个的问题
嘿,我一眼就揪出问题所在了——你的Model类的Render方法里漏掉了绑定当前模型VAO的关键步骤!
OpenGL是个状态驱动的API,你创建第二个模型时,最后绑定的是它的VAO,这个状态会一直保持着。所以你渲染第一个模型的时候,OpenGL还是在用第二个模型的VAO,自然两个物体都显示成红色小立方体了。
修改方案
只需要给Model的Render方法加一行绑定VAO的代码就行:
public void Render() { GL.BindVertexArray(VAO); // 关键!先绑定当前模型的VAO GL.DrawElements(BeginMode.Triangles, Indices.Length, DrawElementsType.UnsignedInt, 0); }
原理说明
每个模型的VAO存储了专属的顶点属性配置、VBO和EBO的关联信息。渲染前绑定对应的VAO,相当于告诉OpenGL:“接下来要用这个模型的顶点数据啦”。之前你没做这一步,所有渲染操作都复用了最后一次绑定的VAO(也就是第二个红色立方体的),第一个模型的顶点数据根本没被调用到。
改完之后再运行,你就能看到蓝色大立方体和红色小立方体各自正确显示在对应位置了。
内容的提问来源于stack exchange,提问作者QuantumAbyss
相关产品推荐
相关产品推荐

