WebGL问题:试图制作3d对象我究竟做错了什么?

问题描述

我尝试将顶点的z更改为不同的数字,但看起来与它具有0时相同。我是一个视觉学习者,因此任何示例或视觉解释都将不胜感激。

不变:

const vertices2 = [0,.4,-.6,.0,.6,0];
  let dmColor2 =[1,1,.5,.9,0]; 
  //creates object2
  dmVAO2 = gl.createVertexArray(); 
  gl.bindVertexArray(dmVAO2);
  dmVBO2 = gl.createBuffer();
  gl.bindBuffer(gl.ARRAY_BUFFER,dmVBO2);
  gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices2),gl.STATIC_DRAW);
  gl.vertexAttribPointer(0,3,gl.FLOAT,false,0);  
  gl.enabLevertexAttribArray(0);
  //creates color 2
  dmColorBuffer2 = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER,dmColorBuffer2);
    gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(dmColor2),gl.STATIC_DRAW);
    gl.vertexAttribPointer(1,0);
    gl.enabLevertexAttribArray(1);
  gl.bindVertexArray(dmVAO2);
    gl.vertexAttrib1f(3,1.0);
    indices = [0,2];
    gl.vertexAttrib3f(2,-1,-1);
    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,new Uint16Array(indices),gl.DYNAMIC_DRAW);
    gl.drawElements(gl.TRIANGLES,indices.length,gl.UNSIGNED_SHORT,0);

和 进行更改:

const vertices2 = [0,.8,.8];
  let dmColor2 =[1,0);

我做错了什么还是错过了什么,我真的不明白为什么它不起作用。看起来像是2d的蓝色三角形。

解决方法

您需要显示着色器。 WebGL本身不会绘制3D。它所做的就是在GPU上执行2个功能,一个是顶点着色器,以计算剪辑空间顶点,然后绘制2D点,直线和三角形。在绘制这些2D点,线和三角形时,它调用另一个2D片段着色器,以决定制作像素的颜色。除非您编写将3D转换为2D三角形的着色器,否则在点上添加Z坐标将不会提供3d。

在这里a whole set of articles上有几张图。确保阅读先决条件文章。这不是一个小话题。