Javascript 在WebGL中绘制三维形状的第一步

Javascript 在WebGL中绘制三维形状的第一步,javascript,3d,webgl,Javascript,3d,Webgl,我从几周前开始学习WebGL,我在绘制一些3D形状时遇到了问题。我猜我正确地计算了顶点和索引,以及每个三角形的颜色,但它不起作用。有人能告诉我我做错了什么吗? 我想制作金字塔,它看起来像: 代码如下: var gl=null, canvas=null, glProgram=null, fragmentShader=null, vertexShader=null; var CoordinatorRay=[], triangleVerticeColors=[], verticesArray=[]

我从几周前开始学习WebGL,我在绘制一些3D形状时遇到了问题。我猜我正确地计算了顶点和索引,以及每个三角形的颜色,但它不起作用。有人能告诉我我做错了什么吗? 我想制作金字塔,它看起来像:

代码如下:

var gl=null,
canvas=null,
glProgram=null,
fragmentShader=null,
vertexShader=null;
var CoordinatorRay=[],
triangleVerticeColors=[],
verticesArray=[],
垂直索引阵列=[];
var vertexPositionAttribute=null,
TriangleVerticeBuffer=null,
vertexColorAttribute=null,
trianglesColorBuffer=null,
TriangalLeverticesIndexBuffer=null;
var P=mat4.create(),
V=mat4.create();
M=mat4.create();
函数initWebGL(){
canvas=document.getElementById(“我的画布”);
试一试{
gl=canvas.getContext(“webgl”)||
getContext(“实验性webgl”);
}捕获(e){
}
如果(德国劳埃德船级社){
setupWebGL();
initShaders();
设置缓冲区();
getMatrixUniforms();
setMatrixUniforms();
动画循环();
//drawScene();
}否则{
警告(“错误:您的浏览器似乎不支持”+“WebGL”);
}
}
函数animationLoop(){
var R=mat4.create();
var角=0;
var i=0;
var循环=函数(){
角度=性能.now()/1000/6*2*Math.PI;
i++;
旋转(M,R,角度[0,1,0]);
gl.uniformMatrix4fv(glProgram.mvMatrixUniform,false,M);
gl.clearColor(0.1,0.5,0.1,1.0);
总图清除(总图深度缓冲区位、总图颜色缓冲区位);
drawScene();
请求动画帧(循环);
};
请求动画帧(循环);
}
函数setupWebGL(){
总帐启用(总帐深度测试);
gl.clearColor(0.1,0.5,0.1,1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
控制台日志(P);
控制台日志(V);
控制台日志(M);
看(V,[3,-1,-5],[0,0,0],[0,1,0]);
mat4.透视图(P,glMatrix.toRadian(45),canvas.width/canvas.height,0.11000.0);
}
函数initShaders(){
var fs_source=document.getElementById('shader-fs').innerHTML,
vs_source=document.getElementById('shader-vs').innerHTML;
vertexShader=makeShader(vs_源,gl.VERTEX_着色器);
fragmentShader=makeShader(fs_源,gl.fragmentShader);
glProgram=gl.createProgram();
gl.attachShader(glProgram,vertexShader);
gl.attachShader(glProgram,fragmentShader);
gl.linkProgram(glProgram);
if(!gl.getProgramParameter(glProgram,gl.LINK_状态)){
警报(“无法初始化着色器程序”);
}
gl.useProgram(glProgram);
}
函数makeShader(src,类型){
var shader=gl.createShader(类型);
gl.shaderSource(着色器,src);
gl.compileShader(着色器);
if(!gl.getShaderParameter(着色器,gl.COMPILE_状态)){
警报(“编译着色器时出错:+gl.getShaderInfoLog(着色器));
}
返回着色器;
}
函数setupBuffers(){
//n边多边形
var n=6;
var半径=1;
变量角度=(Math.PI*2)/n;
var xCoordinate=0;
var yCoordinate=0;
对于(变量i=0;i  verticesIndexArray = [
    0, 1, 2,
    3, 4, 5,
    6, 7, 8,
    9, 10, 11,
    12, 13, 14,
    15, 16, 17,
  ];