在 WebGL 中设置正交顶视图投影
Setting up an Orthographic Top View Projection in WebGL
我在这里研究了这个例子:
http://learningwebgl.com/lessons/lesson01/index.html
正在使用的矩阵库是:
http://glmatrix.net/
示例在剪辑 space 中,我理解这一点。我想使用此示例作为我的基础来设置正交投影。正交投影应该以 0,0,0 为中心,眼睛位置在 +Z 的某处并向下看 0,0,0。当我在缓冲区中输入 3d 面的坐标时,我希望能够以模型 space 单位输入这些坐标。我的地图展示的示例我有一个 10,000 立方体 x -5000 到 +5000 y -5000 到 +5000 和 z -5000 到 +5000 的区域,要投影到 canvas 上,即 500 x 500。所以我的 3d 面孔将在这 10,000 立方体中的某个位置具有坐标,而 500 x 500 canvas 将显示所有 10,000 立方体。
这与 CAD 程序用于开始草图的投影相同。有谁知道如何使用 glMatrix 库在 WebGL 中执行此操作?我是 WebGL 的新手,我真的可以使用一些关于这个主题的指导。
为了简单起见,您首先应该将相机变换矩阵与其投影矩阵分开。然后,您可以将它们相乘得到 "view-projection matrix",它将 world-space 坐标转换为 screen-space.
var cam = mat4.create();
var proj = mat4.create();
开始放置相机(凸轮矩阵)
mat4.translate( cam, cam, position )
mat4.rotate( ... )
mat4.lookAt( .. )
//...
设置正交投影(投影矩阵)。你可以看到正射投影就像一个与相机对齐的盒子,你可以用六个参数扩展每一边。框内的所有内容都会显示在屏幕上。
var ratio = screenWidth/screenHeight;
var halfWorldWidth = 5000.0;
// the near/far will depend on your camera position
mat4.ortho( proj,
-halfWorldWidth,
halfWorldWidth,
-halfWorldWidth / ratio,
halfWorldWidth /ratio,
-50,
50
)
终于得到视图投影
var view = mat4.create()
var viewProj = mat4.create()
mat4.invert( view, cam );
mat4.multiply( viewProj, lens, view );
我在这里研究了这个例子: http://learningwebgl.com/lessons/lesson01/index.html
正在使用的矩阵库是: http://glmatrix.net/
示例在剪辑 space 中,我理解这一点。我想使用此示例作为我的基础来设置正交投影。正交投影应该以 0,0,0 为中心,眼睛位置在 +Z 的某处并向下看 0,0,0。当我在缓冲区中输入 3d 面的坐标时,我希望能够以模型 space 单位输入这些坐标。我的地图展示的示例我有一个 10,000 立方体 x -5000 到 +5000 y -5000 到 +5000 和 z -5000 到 +5000 的区域,要投影到 canvas 上,即 500 x 500。所以我的 3d 面孔将在这 10,000 立方体中的某个位置具有坐标,而 500 x 500 canvas 将显示所有 10,000 立方体。
这与 CAD 程序用于开始草图的投影相同。有谁知道如何使用 glMatrix 库在 WebGL 中执行此操作?我是 WebGL 的新手,我真的可以使用一些关于这个主题的指导。
为了简单起见,您首先应该将相机变换矩阵与其投影矩阵分开。然后,您可以将它们相乘得到 "view-projection matrix",它将 world-space 坐标转换为 screen-space.
var cam = mat4.create();
var proj = mat4.create();
开始放置相机(凸轮矩阵)
mat4.translate( cam, cam, position )
mat4.rotate( ... )
mat4.lookAt( .. )
//...
设置正交投影(投影矩阵)。你可以看到正射投影就像一个与相机对齐的盒子,你可以用六个参数扩展每一边。框内的所有内容都会显示在屏幕上。
var ratio = screenWidth/screenHeight;
var halfWorldWidth = 5000.0;
// the near/far will depend on your camera position
mat4.ortho( proj,
-halfWorldWidth,
halfWorldWidth,
-halfWorldWidth / ratio,
halfWorldWidth /ratio,
-50,
50
)
终于得到视图投影
var view = mat4.create()
var viewProj = mat4.create()
mat4.invert( view, cam );
mat4.multiply( viewProj, lens, view );