Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在webgl中使用alpha绘制两个纹理_Javascript_Html_Opengl Es_Webgl - Fatal编程技术网

Javascript 如何在webgl中使用alpha绘制两个纹理

Javascript 如何在webgl中使用alpha绘制两个纹理,javascript,html,opengl-es,webgl,Javascript,Html,Opengl Es,Webgl,我想画一个纹理,再画一个上面有透明背景的纹理。因此,透明部分显示第一个纹理 我调用gl.clear一次,然后在渲染时为每个纹理调用gl.draurements。但输出是,透明部分的透明纹理为黑色,即清晰的颜色。就好像第一个纹理从未绘制过,但第二个纹理仅使用透明背景绘制。如何解决这个问题 gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); gl.enable(gl.BLEND); gl.enable(gl.DEPTH_TEST);

我想画一个纹理,再画一个上面有透明背景的纹理。因此,透明部分显示第一个纹理

我调用gl.clear一次,然后在渲染时为每个纹理调用gl.draurements。但输出是,透明部分的透明纹理为黑色,即清晰的颜色。就好像第一个纹理从未绘制过,但第二个纹理仅使用透明背景绘制。如何解决这个问题

  gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
  gl.enable(gl.BLEND);
  gl.enable(gl.DEPTH_TEST);


gl.clear()

for each texture:

  gl.drawElements();
另一个渲染问题是,对于纹理A和B,我分别为纹理A和纹理B调用gl.drawerelements,但A在输出时位于B之上

所以问题是gl.enableDEPTH_测试

我把它取下来了,现在可以用了。我想知道为什么

所以问题是gl.enableDEPTH_测试; 我把它取下来了,现在可以用了。我想知道为什么

我由此得出的结论是,在距离摄影机相同的距离处绘制两个纹理对象。glDepthFunc的默认值是GL_LESS,因此只有当片段的窗口空间z值低于深度缓冲区中的值时,它才能通过深度测试。绘制第一个带纹理的四边形时,深度缓冲区将设置为这些值,您需要将第二个对象移近以使其通过深度测试,或者将glDepthFunc设置为GL_LEQUEAL,意思是小于或等于。但是,由于在您的场景中根本不需要深度测试,因此禁用它将是最有效的方法