Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 三坐标摄像机_Three.js - Fatal编程技术网

Three.js 三坐标摄像机

Three.js 三坐标摄像机,three.js,Three.js,我想设置平面顶点的动画以填充屏幕。(顶点由于这是我想要的效果,我希望在短时间内设置每个顶点的动画,然后填充屏幕) 作为概念证明,我有一个顶点,可以使用下面的函数设置为随机点的动画- tileClick() { var geo = this.SELECTED.geometry; var mat = this.SELECTED.material as THREE.MeshBasicMaterial; TweenMax.TweenLite.to(geo.vertices[0], 0.3, {x: -5

我想设置平面顶点的动画以填充屏幕。(顶点由于这是我想要的效果,我希望在短时间内设置每个顶点的动画,然后填充屏幕)

作为概念证明,我有一个顶点,可以使用下面的函数设置为随机点的动画-

tileClick() {
var geo = this.SELECTED.geometry;
var mat = this.SELECTED.material as THREE.MeshBasicMaterial;
TweenMax.TweenLite.to(geo.vertices[0], 0.3, {x: -5, y:5, onUpdate: () =>{
    mat.needsUpdate = true;
    geo.colorsNeedUpdate = true;
    geo.elementsNeedUpdate = true;

  }, ease: TweenMax.Elastic.easeOut.config(1, 0.5)});
}
但是,现在我需要计算出相机当前视图的点。伪代码:
camera.view.getBoundingClientRect()


WIP的Plnkr-

我相信您需要的是。使用此方法,可以在屏幕坐标中将向量设置为
x,y,z
,并在世界坐标中返回
x,y,z

var vector = new THREE.Vector3();
var zNearPlane = -1;
var zFarPlane = 1;

// Top left corner
vector.set( -1, 1, zNearPlane ).unproject( camera );

// Top right corner
vector.set( 1, 1, zNearPlane ).unproject( camera );

// Bottom left corner
vector.set( -1, -1, zNearPlane ).unproject( camera );

// Bottom right corner
vector.set( 1, -1, zNearPlane ).unproject( camera );
请注意,所有输入都在
[-1,1]
范围内:

  • x:-1=屏幕左侧
  • x:1=屏幕右侧
  • y:1=顶部
  • y:-1=底部
  • z:1=远平面
  • z:-1=近平面

非常感谢您的回复@Marquizzo!这几乎是对的,但是如果你在点击一个平铺之前移动相机,它实际上不起作用(使用顶部的白色条滚动)啊,那是因为当你用
let pos=(tileWidth+spacer)*this.tiles.length构建它时,平铺也在x轴上平移了
这样不仅可以更改顶点的局部位置,还可以将其添加到平移的顶部。这就是为什么你看到他们向右移动。如果您告诉一个顶点转到
10
,但该平铺已被
5
转换,它将在
15
处结束。你只需要减去它的x平移值。。。或者,为了简单起见,您可以只制作
tile.scale()
动画!这只是另一个建议。”tile.scale.set(2,2,2)”将使平铺的大小增加一倍,而无需重新计算角点位置。我被.scale()解决方案搞糊涂了,你是说不制作顶点动画?然后它就不会继续跟随/fll摄像机视图了?我已经更新了plnkr,我已经对x平移值进行了二次扫描,这确实开始起作用了,尽管瓷砖太靠近摄像机时会“变形”,我试着做了类似这样的事情-
this.SELECTED.position.z=this.SELECTED.position.z=-0.01但这并没有真正起作用。。。。