【发布时间】:2019-01-31 10:55:05
【问题描述】:
大家好,我一直在学习 WebGL,并试图用它制作俄罗斯方块游戏。
我有几个问题想问:
- 对于这个游戏,我想首先绘制网格作为背景。但是我注意到,在我画线之后,如果我在之后使用
gl.clear(gl.COLOR_BUFFER_BIT );,它会清除我之前画的所有线。我知道gl.clear(gl.COLOR_BUFFER_BIT );是关于清除颜色缓冲区(您可能会问我为什么要这样做。请耐心等待。)。然后我尝试使用gl.uniform4f( uColor, 0, 0, 0, 1);再次将颜色发送到片段着色器,但没有帮助。
sn-p是这样的
window.onload = function(){
getGLContext();
initShaders();
drawLines( 0, 0, 400,400 );
gl.clear(gl.COLOR_BUFFER_BIT );
gl.uniform4f( uColor, 0, 0, 0, 1);
}
-
对于游戏,我需要网格作为背景,我需要
requestAnimationFrame用于游戏循环,并将在循环内渲染 Tetrominos。因此,在画完线之后,我用这个draw()来画其他的 Tetrominos。但是它删除了我之前画的线。当我在draw()中注释掉gl.clear(gl.COLOR_BUFFER_BIT );时,它会删除该行以及背景颜色。function draw() { gl.clear(gl.COLOR_BUFFER_BIT ); gl.drawArrays(gl.TRIANGLES, 0, index*6); requestAnimationFrame(draw); }
这里是演示:https://codepen.io/zhenghaohe/pen/LqxpjB
希望您能回答这两个问题。谢谢!
【问题讨论】:
-
为什么画完就清零了?您通常在绘制每一帧之前清除,而不是在绘制完之后。
-
如果你看一下代码你就会知道我想先设置网格所以我画了一条线然后我有这个循环
requestAnimationFrame来绘制每个 Tetrominos。requestAnimationFrame包含gl.clear(gl.COLOR_BUFFER_BIT )否则我看不到每幅画的背景颜色。这就是为什么我说画完线后我打电话给`gl.clear(gl.COLOR_BUFFER_BIT )。