Three.js: 点材料尺寸衰减似乎没有考虑 FOV

创建于 2017-09-07  ·  3评论  ·  资料来源: mrdoob/three.js

我正在使用 PerspectiveCamera 和一个模型,包括使用 PointsMaterial 的一些点。 我正在使用 OrbitControls.js 的定制版本来允许查看大型复杂模型。 其中一项更改是缩放功能会更改相机的 FOV,而不是将其移近。 相机移动以显示模型的特定部分。 我注意到 PointsMaterial 衰减在相机靠近模型时会改变大小,但在 FOV 改变时不会。

我假设尺寸算法使用到相机的距离而不是 FOV? 我以前从未发布过这个 repo,所以如果我错过了什么,请原谅。 我尝试使用 IE 进行测试,但目前无法加载页面。 同样,不确定它是哪个版本的 Three,但在去年。

创建 PointsMaterial 的代码:

var texFlame = new THREE.TextureLoader().load("textures/flame.png");
mtlFlame = new THREE.PointsMaterial ({size: 2, sizeAttenuation: true, color: 0xffffff, transparent: true,  blending: THREE.AdditiveBlending, depthWrite: false, map: texFlame});

改变 FOV 的代码同样乏味:

this.camera.fov = fov;
this.camera.updateProjectionMatrix ();
三.js版本
  • [ ] 开发
  • [ ] r87
  • [X] ...
浏览器
  • [ ] 他们都是
  • [x] 铬
  • [x] 火狐
  • [ ] IE浏览器
操作系统
  • [ ] 他们都是
  • [x] 窗户
  • [ ] 苹果系统
  • [ ] Linux
  • [ ] 安卓
  • [ ] iOS
硬件要求(显卡、VR 设备……)

不知道这是否是特定于硬件的,但似乎不太可能。 我在 Windows 10 中使用 GeForce GTX950。

Question

所有3条评论

PointsMaterial.size有像素单位——不是世界单位。 您必须自己调整大小。

此相关帖子可能提供信息: https :

请注意, gl_PointSize可能是有限的,因此您要求的尺寸可能不是您得到的尺寸。

@WestLangley。 那么当我改变 FOV 时,我需要改变 PointsMaterial 的 size 属性吗?

我确实在问之前找到了那个帖子,但我不太明白它为什么会这样。 我知道尺寸以像素为单位,但衰减已经使它与设备像素无关,并且该过程肯定必须与透视有关,而透视在某种意义上必须与 FOV 相关?

然而,这只是解释我自己缺乏了解。 我对您提供的解决方案非常满意。 谢谢。

我希望PointsMaterial.size仍以像素为单位,因此作为参考,我将在此处发布此解决方法。

基于此 stackoverflow answer ,您可以使用以下模式缩放您的点,这应该适用于camera.fov合理值。

var defaultSize = 10;
points.material.size = defaultSize / Math.tan( ( Math.PI / 180 ) * camera.fov / 2 );
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

scrubs picture scrubs  ·  3评论

zsitro picture zsitro  ·  3评论

jack-jun picture jack-jun  ·  3评论

Horray picture Horray  ·  3评论

fuzihaofzh picture fuzihaofzh  ·  3评论