Three.js 76
我开始使用正交相机代替透视 - 有一些麻烦。
我在场景中使用了stemkoski的着色器 - 用于点动画:他创建了一些球体,然后使用着色器进行透明度,我只是为它添加动画。
function animatePoints() {
var alphas;
var count;
var time;
let j = 0;
while ( animatedPoints[j] ) {
let threeGlow = animatedPoints[j];
let finishAnimation = threeGlow.meta.state.finishAnimation;
let itFinished = 0;
let pointGlowMat = threeGlow.material;
let pointGlowGeom = threeGlow.geometry;
// ########## make glow look at camera
pointGlowMat.uniforms.viewVector.value = new THREE.Vector3().subVectors( threeGlow.position, camera.position);
alphas = pointGlowGeom.attributes.alpha;
count = alphas.count;
time = 0.001* Date.now();
if ( finishAnimation ) {
....
} else {
....
}
alphas.needsUpdate = true;
j++;
}
}
主要目标 - 让发光看着相机。当相机是透视时我使用解决方案减去两个矢量 - 相机位置和发光位置,所以看起来像发光看着相机。
pointGlowMat.uniforms.viewVector.value = new THREE.Vector3().subVectors( camera.position, threeGlow.position );
但现在,当我使用正交相机时,此解决方案无法正常工作。 问题是现在发光应该看不到相机位置点,它应该看相机的平面。
我针对这种情况制作了一些照片计划:look it, it very useful
因此,对于每个新的发光(它的位置当然不同),我必须得到新的红色矢量,让每个发光都看到orto cam。
有什么想法吗?
答案 0 :(得分:0)
在图像中获取红色矢量需要做的是在向量上的项目向量sub
,表示摄像机正在查看的方向。
我认为这就是你所需要的:
pointGlowMat.uniforms.viewVector.value = new THREE.Vector3()
.subVectors( camera.position, threeGlow.position )
.projectOnVector( camera.getWorldDirection() );
答案 1 :(得分:0)
制作物品的一种方法"看看"使用这种模式的正交相机:
object.quaternion.copy( camera.quaternion );
对象的视图方向将垂直于相机的投影平面。
如果对象和相机都没有旋转的父级,则此方法是合适的。
three.js r.84