OpenGL,投影矩阵 - 盒子前面更小......?
OpenGL, Projection Matrix - Front of box is smaller...?
我正在学习 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;
}
这里可能发生的情况是您的三角形以错误的顺时针顺序绘制(顺时针与逆时针相反,反之亦然),因此您看到了方框的 "inside"。
有无数种方法可以解决这个问题。我的建议是修复用于绘制框的索引的顺时针顺序。
或者,快速修复可能是使用 glFrontFace 更改 "front face"。
我正在学习 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;
}
这里可能发生的情况是您的三角形以错误的顺时针顺序绘制(顺时针与逆时针相反,反之亦然),因此您看到了方框的 "inside"。
有无数种方法可以解决这个问题。我的建议是修复用于绘制框的索引的顺时针顺序。
或者,快速修复可能是使用 glFrontFace 更改 "front face"。