【问题标题】:OpenGL, Projection Matrix - Front of box is smaller...?OpenGL,投影矩阵 - 盒子的前面更小......?
【发布时间】:2016-02-29 21:52:16
【问题描述】:

我正在学习 WebGL,我正在尝试了解如何构建透视矩阵。我想我几乎拥有它......我只是遇到了一个小问题,那就是当我将顶点乘以投影矩阵时,我希望正在查看的盒子的前面会变大,但它反而会变得更大更小,背部变大。我附上了一个屏幕截图: (绿色的一面是正面)

我的透视矩阵是这样的..

    var aspectRatio = 600 / 600;
    var fieldOfView = 30;
    var near = 1;
    var far = 2;

    myPerspectiveMatrix = [
        1 / Math.tan(fieldOfView / 2), 0, 0, 0,
        0, 1 / Math.tan(fieldOfView / 2), 0, 0,
        0, 0, (near + far) / (near - far), (2 * (near * far)) / (near - far),
        0, 0, -1, 0
    ];

    app.uniformMatrix4fv(uPerspectiveMatrix, false, new Float32Array(myPerspectiveMatrix));

我的顶点着色器是..

attribute vec3 aPosition;
attribute vec4 aColor;

uniform mat4 uModelMatrix;
uniform mat4 uPerspectiveMatrix;

varying lowp vec4 vColor;

void main()
{
    gl_Position = uPerspectiveMatrix * vec4(aPosition, 5.0);
    //gl_Position = uPerspectiveMatrix * uModelMatrix * vec4(aPosition, 2.0);
    vColor = aColor;
}

【问题讨论】:

标签: matrix webgl


【解决方案1】:

这里可能发生的情况是您的三角形以错误的顺时针顺序绘制(顺时针而不是逆时针,反之亦然),因此您看到的是盒子的“内部”。

有无数种方法可以解决这个问题。我的建议是固定用于绘制框的索引的顺时针顺序。

或者,快速解决方法可能是使用 glFrontFace 更改“正面”。

【讨论】:

  • 我尝试了 CCW 和 CW,它们给出了相同的结果。 :(
  • 完全关闭剔除怎么样?你确定你画的是这个盒子的“正面”吗?你可能只是少了一张脸。
  • 谢谢,就是这样:)
猜你喜欢
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
相关资源
最近更新 更多