WebGL 透视投影
WebGL Perspective Projection
我有一个立方体场景,其顶点定义如下
const positions = [
-10.0, 10.0,
10.0, 10.0,
-10.0, -10.0,
10.0, -10.0
];
我正在尝试从视场透视矩阵(未显示)到定义如下的指定矩形透视投影矩阵
const n = 0.1;
const f = 100.0;
const l = -50;
const r = 50;
const t = 50;
const b = -50;
Float32Array([
(2*n/r-l), 0.0, 0.0, 0.0,
0.0, (2*n/t-b), 0.0, 0.0,
(r+l/r-l), (t+b/t-b), -(f+n/f-n), -1.0,
0.0, 0.0, -(2*f*n/f-n), 0.0
]);
我还有一个模型矩阵,它在 z 索引中移动方框 -6
个单位,使其位于近距和远距裁剪平面的边界内。
我是否可以假设在转换任何东西之前,我用来指定框和透视矩阵的坐标都在相同的 space/frame 参考中?因此盒子应该在视图的死点?
盒子使用视野矩阵渲染,而不是上面定义的矩阵。
公式不准确。试试这个(我只添加了括号):
Float32Array([
(2*n)/(r-l), 0.0, 0.0, 0.0,
0.0, (2*n)/(t-b), 0.0, 0.0,
(r+l)/(r-l), (t+b)/(t-b), -(f+n)/(f-n), -1.0,
0.0, 0.0, -(2*f*n)/(f-n), 0.0
]);
我有一个立方体场景,其顶点定义如下
const positions = [
-10.0, 10.0,
10.0, 10.0,
-10.0, -10.0,
10.0, -10.0
];
我正在尝试从视场透视矩阵(未显示)到定义如下的指定矩形透视投影矩阵
const n = 0.1;
const f = 100.0;
const l = -50;
const r = 50;
const t = 50;
const b = -50;
Float32Array([
(2*n/r-l), 0.0, 0.0, 0.0,
0.0, (2*n/t-b), 0.0, 0.0,
(r+l/r-l), (t+b/t-b), -(f+n/f-n), -1.0,
0.0, 0.0, -(2*f*n/f-n), 0.0
]);
我还有一个模型矩阵,它在 z 索引中移动方框 -6
个单位,使其位于近距和远距裁剪平面的边界内。
我是否可以假设在转换任何东西之前,我用来指定框和透视矩阵的坐标都在相同的 space/frame 参考中?因此盒子应该在视图的死点?
盒子使用视野矩阵渲染,而不是上面定义的矩阵。
公式不准确。试试这个(我只添加了括号):
Float32Array([
(2*n)/(r-l), 0.0, 0.0, 0.0,
0.0, (2*n)/(t-b), 0.0, 0.0,
(r+l)/(r-l), (t+b)/(t-b), -(f+n)/(f-n), -1.0,
0.0, 0.0, -(2*f*n)/(f-n), 0.0
]);