我在THREE.js等距相机中找到了关于如何创建(轴测)等距相机的例子,但是如何创建轴测斜线呢?
发布于 2014-09-26 12:52:12
你可以用一个斜的内阁视角渲染一个场景,在这个场景中,相机是一个正交的,并且在渲染之前,你的网格的几何是用剪切矩阵倾斜的。
// create shear matrix
var alpha = Math.PI / 6; // or Math.PI / 4
var Syx = 0,
Szx = - 0.5 * Math.cos( alpha ),
Sxy = 0,
Szy = - 0.5 * Math.sin( alpha ),
Sxz = 0,
Syz = 0;
var matrix = new THREE.Matrix4();
matrix.set( 1, Syx, Szx, 0,
Sxy, 1, Szy, 0,
Sxz, Syz, 1, 0,
0, 0, 0, 1 );
// apply shear matrix to geometry
mesh.geometry.applyMatrix4( matrix ); // this is the work-around
编辑:您也可以使用Matrix4.makeShear()
方法填充剪切矩阵。
three.js r.144
发布于 2020-09-10 02:48:11
基于@WestLangley的代码,这里是如何进行斜投影,而不修改几何,只是相机的矩阵。
// shear matrix
// ref: http://www.flipcode.com/documents/matrfaq.html#Q43
// | 1 Syx Szx 0 |
// | |
// | Sxy 1 Szy 0 |
// M = | |
// | Sxz Syz 1 0 |
// | |
// | 0 0 0 1 |
// | |
var alpha = Math.PI / 6; // or Math.PI / 4
var Syx = 0,
Szx = - 0.5 * Math.cos( alpha ),
Sxy = 0,
Szy = - 0.5 * Math.sin( alpha ),
Sxz = 0,
Syz = 0;
var matrix = new THREE.Matrix4();
matrix.set( 1, Syx, Szx, 0,
Sxy, 1, Szy, 0,
Sxz, Syz, 1, 0,
0, 0, 0, 1 );
// apply shear matrix to camera
camera.projectionMatrix.multiply(matrix);
camera.projectionMatrixInverse.getInverse( camera.projectionMatrix );
您将在调用projectionMatrix
之后进行这些camera.updateProjectionMatrix()
修改。我查看了camera.updateProjectionMatrix
的代码,找出了如何做到这一点,包括学习它存储的逆矩阵。
一个轻微的缺点是它移动了一些视图,但你可以移动相机的位置或圆顶的边界来解释这一点。(也许还有更好的方法。)
小提琴
three.js r.120
https://stackoverflow.com/questions/26021618
复制相似问题