我的项目中有一个问题,我试图在屏幕上绘制金字塔,但没有显示深度。public void create(float[] vertices, int[] indices, int numberOfVertices, int numberOfIndices) { indexCount = numberOfIndices; vao = gl.genVertexArrays(); gl.bindVertexArray(vao); IntBuffer indicesBuffer = factory.create(indices); ibo = gl.genBuffers(); gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); gl.bufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_STATIC_DRAW); FloatBuffer verticesBuffer = factory.create(vertices); vbo = gl.genBuffers(); gl.bindBuffer(GL_ARRAY_BUFFER, vbo); gl.bufferData(GL_ARRAY_BUFFER, verticesBuffer, GL_STATIC_DRAW); gl.vertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0); gl.enableVertexAttribArray(0); gl.bindBuffer(GL_ARRAY_BUFFER, 0); gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); gl.bindVertexArray(0); }我使用以下代码创建网格对象,其中顶点和索引定义为:private void createTriangles() { float[] vertices = new float[] { //x y z -1.0f, -1.0f, 0.0f, //0 0.0f, 0.0f, 1.0f, //1 1.0f, -1.0f, 0.0f, //2 0.0f, 1.0f, 0.0f //3 }; int[] indices = new int[] { 0, 3, 1, 1, 3, 2, 2, 3, 0, 0, 1, 2 }; mesh.create(vertices, indices, 12, 12);}为了将它们显示到屏幕上,我从定义为的游戏循环中调用了渲染函数。public void render() { gl.bindVertexArray(vao); gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); gl.drawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, 0); gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); gl.bindVertexArray(0);}所以我得到的问题是它应该绘制四个三角形来筛选以形成金字塔,但是我的输出看起来像这样。我已经旋转了图像以尝试查看深度,但它是一个平面对象。我试图通过将渲染方法更改为gl.drawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);仅绘制一个三角形来尝试单独绘制每个三角形,从而确定问题可能来自何处。我试图单独绘制所有四个面,并且都被绘制到屏幕上。
1 回答
浮云间
TA贡献1829条经验 获得超4个赞
我发现了这个问题。我最初是缩放三角形使得
model.scale(new Vector3f(0.2f, 0.2f, 0.0f));
结果 z 轴被乘以 0。愚蠢的错误,希望这对将来的人有所帮助
添加回答
举报
0/150
提交
取消