WebGL,以及 mat4.perspective 函数无法工作

4

我遇到了一个问题,想要展示一个简单的三角形对象和简单的正方形对象的代码。当我运行这段代码时,两个对象都没有出现。可能问题出在mat4.perspective函数以及参数上。以下是出错的代码:

    function drawScene() {
        gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
        var rads=45*(Math.PI/180);
        mat4.perspective(pMatrix, rads, gl.viewportWidth/gl.viewportHeight, 0.1, 100.0);
        alert("this works");
        mat4.identity(mvMatrix);
        mat4.translate(mvMatrix, mvMatrix [-1.5, 0.0, -7.0]);
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
        gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
        setMatrixUniforms();
        gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer.numItems);


        mat4.translate(mvMatrix, mvMatrix [3.0, 0.0, 0.0]);
        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
        gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
        setMatrixUniforms();
        gl.drawArrays(gl.TRIANGLE_STRIP, 0, squareVertexPositionBuffer.numItems);
    }

我添加的JS警告在mat4.perspective行之前有效,但在此之后无效,因此我知道问题在于这一行。您有什么建议,可以帮助我找出问题并解决它吗?


你在开发工具中是否收到任何错误信息? - LJᛃ
是的,它说mat4未定义。之前有一行代码:var mvMatrix = mat4.create(); 还有一次在mat4.perspective这一行。 - user2988960
也许 mat4未定义,你是否在JavaScript之前引入了gl-matrix - LJᛃ
是的,在<head>部分的顶部是<script type="text/javascript" src="glMatrix-0.9.5.min.js"></script>。 - user2988960
1个回答

1
我有一个运行良好的设置,我将你的代码放入其中...这一行可疑。
mat4.perspective(pMatrix, rads, gl.viewportWidth/gl.viewportHeight, 0.1, 100.0);

这是我的建议,你可以试一试

mat4.perspective(FoV , gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);

where

var FoV = 20.0;

该控件用于控制视野范围

这是我编写的一个WebGL项目,它实现了键盘和鼠标交互以进行缩放/平移/滑动...随意使用 注意-这是我第一次使用javascript / WebGL,因此请谨慎使用,但它确实非常好用!

https://github.com/scottstensland/webgl-3d-animation

1
自glMatrix 2.0版本以来,第一个参数始终是输出参数,使得mat4.perspective函数的调用正确。 - LJᛃ
那这是不是意味着我应该升级到更新的glMatrix版本?可能是因为在0.9.5中未定义create和perspective函数。如果我需要升级,我应该使用哪个版本,我在哪里可以找到它? - user2988960
我的设置使用的是0.9.5版本,其中包括create和perspective,并且运行良好。你能把整个代码库放在jsfiddle上,以便我们进行测试吗? - Scott Stensland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接