Three.js: Pontos A atenuação do tamanho do material não parece considerar o FOV

Criado em 7 set. 2017  ·  3Comentários  ·  Fonte: mrdoob/three.js

Estou usando PerspectiveCamera e um modelo incluindo alguns pontos usando um PointsMaterial. Estou usando uma versão personalizada do OrbitControls.js para permitir a visualização de um modelo grande e complexo. Uma das mudanças é que a função de zoom altera o FOV da câmera em vez de movê-lo para mais perto. A câmera se move para mostrar uma parte específica dos modelos. Percebi que a atenuação do PointsMaterial muda de tamanho quando a câmera se aproxima do modelo, mas não quando o FOV é alterado.

Presumo que o algoritmo de tamanho use a distância até a câmera, mas não o FOV. Eu nunca postei neste repositório antes, então me desculpe se eu perder algo. Tentei testar com o IE, mas não consigo carregar a página no momento. Da mesma forma, não tenho certeza de qual versão do Three é, mas no ano passado.

Código que cria o 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});

O código que altera o FOV é igualmente desinteressante:

this.camera.fov = fov;
this.camera.updateProjectionMatrix ();
Versão Three.js
  • [] Dev
  • [] r87
  • [x] ...
Navegador
  • [ ] Todos eles
  • [x] Chrome
  • [x] Firefox
  • [] Internet Explorer
SO
  • [ ] Todos eles
  • [x] Windows
  • [ ] Mac OS
  • [] Linux
  • [] Android
  • [] iOS
Requisitos de hardware (placa gráfica, dispositivo VR, ...)

Não sei se isso é específico do hardware, mas parece improvável. Estou usando a GeForce GTX950 no Windows 10.

Question

Todos 3 comentários

PointsMaterial.size tem unidades de pixels - não unidades mundiais. Você mesmo terá que ajustar o tamanho.

Esta postagem relacionada pode ser informativa: https://github.com/mrdoob/three.js/issues/10385#issuecomment -267789138.

Esteja ciente de que gl_PointSize pode ser limitado, portanto, o tamanho que você solicitar pode não ser o tamanho que você obtém.

@WestLangley. Portanto, preciso alterar a propriedade de tamanho do PointsMaterial quando alterar o FOV?

Eu encontrei essa postagem antes de perguntar, mas não entendi bem por que funciona assim. Eu entendo que o tamanho está em pixels, mas a atenuação já faz com que não se relacione com os pixels dos dispositivos e esse processo certamente deve estar relacionado à perspectiva que deve estar relacionada ao FOV em algum sentido?

No entanto, isso apenas explica minha própria falta de compreensão. Estou perfeitamente feliz com a solução que você deu. Obrigado.

Espero que PointsMaterial.size permaneça em unidades de pixels, portanto, para referência, postarei esta solução alternativa aqui.

Com base nesta resposta stackoverflow , você pode escalar seus pontos usando o seguinte padrão, que deve funcionar para valores razoáveis ​​de camera.fov .

var defaultSize = 10;
points.material.size = defaultSize / Math.tan( ( Math.PI / 180 ) * camera.fov / 2 );
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

RicoLiu picture RicoLiu  ·  100Comentários

WaltzBinaire picture WaltzBinaire  ·  67Comentários

qornflex picture qornflex  ·  113Comentários

kumavis picture kumavis  ·  153Comentários

kdilayer picture kdilayer  ·  62Comentários