Three.js: Puntos La atenuación del tamaño del material no parece considerar el campo de visión

Creado en 7 sept. 2017  ·  3Comentarios  ·  Fuente: mrdoob/three.js

Estoy usando PerspectiveCamera y un modelo que incluye algunos puntos usando un PointsMaterial. Estoy usando una versión personalizada de OrbitControls.js para permitir la visualización de un modelo grande y complejo. Uno de los cambios es que la función de zoom cambia el campo de visión de la cámara en lugar de acercarla. La cámara se mueve para mostrar una parte específica de los modelos. He notado que la atenuación de PointsMaterial cambia de tamaño cuando la cámara se acerca al modelo, pero no cuando se cambia el FOV.

Supongo que el algoritmo de tamaño usa la distancia a la cámara pero no el campo de visión. Nunca antes había publicado en este repositorio, así que discúlpeme si me pierdo algo. Intenté probar con IE pero no puedo cargar la página en este momento. Del mismo modo, no estoy seguro de qué versión de Three es, pero dentro del último año.

Código que crea el 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});

El código que cambia el campo de visión es igualmente poco interesante:

this.camera.fov = fov;
this.camera.updateProjectionMatrix ();
Versión Three.js
  • [] Desarrollo
  • [] r87
  • [X] ...
Navegador
  • [ ] Todos ellos
  • [x] Chrome
  • [x] Firefox
  • [ ] Explorador de Internet
SO
  • [ ] Todos ellos
  • [x] Windows
  • [ ] Mac OS
  • [] Linux
  • [] Android
  • [] iOS
Requisitos de hardware (tarjeta gráfica, dispositivo VR, ...)

No sé si esto es específico del hardware, pero parece poco probable. Estoy usando GeForce GTX950 en Windows 10.

Question

Todos 3 comentarios

PointsMaterial.size tiene unidades de píxeles, no unidades mundiales. Tendrá que ajustar el tamaño usted mismo.

Esta publicación relacionada puede ser informativa: https://github.com/mrdoob/three.js/issues/10385#issuecomment -267789138.

Tenga en cuenta que gl_PointSize puede ser limitado, por lo que el tamaño que solicita puede no ser el tamaño que obtiene.

@WestLangley. ¿Entonces necesito cambiar la propiedad de tamaño de PointsMaterial cuando cambio el FOV?

Encontré esa publicación antes de preguntar, pero no entiendo por qué funciona de esa manera. Entiendo que el tamaño está en píxeles, pero la atenuación ya hace que no se relacione con los píxeles de los dispositivos y ese proceso seguramente debe relacionarse con la perspectiva que debe relacionarse con el FOV en algún sentido.

Sin embargo, eso solo explica mi propia falta de comprensión. Estoy perfectamente satisfecho con la solución que me das. Gracias.

Espero que PointsMaterial.size permanezcan en unidades de píxeles, por lo que, como referencia, publicaré esta solución aquí.

Según esta respuesta de stackoverflow , puede escalar sus puntos utilizando el siguiente patrón, que debería funcionar para valores razonables de camera.fov .

var defaultSize = 10;
points.material.size = defaultSize / Math.tan( ( Math.PI / 180 ) * camera.fov / 2 );
¿Fue útil esta página
0 / 5 - 0 calificaciones