我一直在尝试在 webgl 上渲染一些非常基本的东西,我已经将渲染简化为我能想到的最基本的东西,以便找到问题所在,但我什至无法为一些理由。我真正想要渲染的场景更复杂,但正如我所说,我已经将其简化以试图找到问题,但仍然没有运气。我希望有人可以看看并找到我缺少的任何东西,我认为这是某个时候的设置步骤。
我正在运行的 gl 命令(由 webgl 检查器报告,没有错误)是:
- 清除颜色(0,0,0,1)
- 清除深度(1)
- 清除(COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT)
- 使用程序([程序 2])
- bindBuffer(ARRAY_BUFFER, [缓冲区 5])
- vertexAttribPointer(0, 2, FLOAT, false, 0, 0)
- drawArrays(三角形, 0, 6)
在那里使用的缓冲区(缓冲区 5)设置如下:
bufferData(ARRAY_BUFFER, [-1,-1,1,-1,-1,1,-1,1,1,-1,1,1], STATIC_DRAW)
而节目(Program 2)数据为:
- LINK_STATUS 真
- VALIDATE_STATUS 假
- DELETE_STATUS 假
- ACTIVE_UNIFORMS 0
- ACTIVE_ATTRIBUTES 1
顶点着色器:
#ifdef GL_ES
precision highp float;
#endif
attribute vec2 aPosition;
void main(void) {
gl_Position = vec4(aPosition, 0, 1);
}
片段着色器:
#ifdef GL_ES
precision highp float;
#endif
void main(void) {
gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
我认为可能相关的其他状态:
- CULL_FACE 假
- CULL_FACE_MODE BACK
- FRONT_FACE 逆时针
- 混合假
- DEPTH_TEST 错误
- 视口 0, 0 640 x 480
- SCISSOR_TEST 假
- SCISSOR_BOX 0, 0 640 x 480
- COLOR_WRITEMASK 真,真,真,真
- DEPTH_WRITEMASK 真
- STENCIL_WRITEMASK 0xffffffff
- FRAMEBUFFER_BINDING 空
我希望从该设置/命令中看到的是一个红色四边形占据了整个剪辑空间,但我看到的只是清除的屏幕,因为 drawArrays 似乎没有做任何事情。谁能发现我错过了什么?任何有关如何调试的提示也将非常受欢迎!