Three.js 我如何用3J创建轴测斜/骑士/橱柜?
我在中找到了有关如何创建(轴测)等轴测摄影机的示例,但如何创建轴测斜角?可以使用一个工作区渲染具有斜角的场景,在该工作区中,摄影机是正交摄影机,并且在渲染之前,网格的几何体通过剪切矩阵倾斜Three.js 我如何用3J创建轴测斜/骑士/橱柜?,three.js,axonometric,Three.js,Axonometric,我在中找到了有关如何创建(轴测)等轴测摄影机的示例,但如何创建轴测斜角?可以使用一个工作区渲染具有斜角的场景,在该工作区中,摄影机是正交摄影机,并且在渲染之前,网格的几何体通过剪切矩阵倾斜 // 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.si
// 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.applyMatrix( matrix ); // this is the work-around
这是一本书
three.js r.72基于@WestLangley的代码,这里介绍了如何在不修改几何体的情况下进行倾斜投影,而只修改相机的矩阵
//剪切矩阵
//参考: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;//或者数学
var Syx=0,
Szx=-0.5*Math.cos(α),
Sxy=0,
Szy=-0.5*Math.sin(α),
Sxz=0,
Syz=0;
var矩阵=新的三个.Matrix4();
矩阵集(1,Syx,Szx,0,
Sxy,1,Szy,0,
Sxz,Syz,1,0,
0, 0, 0, 1 );
//将剪切矩阵应用于摄影机
摄像机.投影矩阵.乘法(矩阵);
camera.projectionMatrixInverse.getInverse(camera.projectionMatrix);
调用camera.updateProjectMatrix()
后,您将对这些projectionMatrix
进行修改。我查看了camera.updateProjectMatrix的代码以了解如何执行此操作,包括学习它存储的逆矩阵
这样做的一个小缺点是它会稍微移动视图,但您可以只移动摄影机位置或平截头体边界来说明这一点。(也许有更好的办法。)
three.js r.120您是否愿意接受一种变通方法,即在渲染之前使用剪切矩阵扭曲网格的几何体,如中所示?是的,这是一种很好的变通方法,谢谢。我发布了一个记录该方法的答案。不幸的是,
THREE.BoxGeometry
的scale.z
选项,例如,box.scale.z=5
没有任何效果,因此您无法再更改BoxGeometry的深度。在应用剪切矩阵之前,您可以这样做:mesh.geometry.scale(1,1,2)代码>等效地,将剪切矩阵第三列的元素乘以2。是的,在applyMatrix之前,我也可以使用常规构造函数参数,因为它将以任何方式新创建,但这正是我想要避免的。我只使用scale.z.
在创建框后更改框的深度
,因为在BoxGeometry中,构造函数的深度之后无法更改。我想当它的深度发生变化时,我必须不断地破坏和重建它。