Three.js: Seleção de área

Criado em 27 abr. 2012  ·  5Comentários  ·  Fonte: mrdoob/three.js

Olá, em primeiro lugar, sinto muito se não é aqui que devo fazer perguntas gerais.

Existe um exemplo de "seleção de área" vários objetos 3D? Isso é arrastar um quadro com o mouse e selecionar todos os objetos dentro dele?

Tenho brincado com o objeto THREE.Ray e seus métodos de interseção, mas sem fazer um loop e rastrear cada coordenada XY para encontrar todas as interseções, estou um pouco perdido.

Eu olhei em toda a web e no github e estouro de pilha, mas não encontrei ajuda.
Qualquer ajuda muito apreciada.

desde já, obrigado
Julz

Question

Comentários muito úteis

Adaptei o exemplo de colheita do three.js para a seleção de área usando um subfrustum construído com base em um retângulo da tela. Clique e arraste para selecionar. Não parece tão preciso quanto projetar todos os objetos 3D no espaço da tela 2D e, em seguida, cruzar com o retângulo da tela , mas funciona decentemente e acho que é mais rápido.

Perguntas relevantes no estouro da pilha:
THREE.js Como detectar a interseção de um quadrado 2d e um obj 3D
THREE.js Como escolher todos os objetos em uma área

Todos 5 comentários

Seria melhor para você rastrear seus objetos na cena, em seguida, percorrer todas as coordenadas XY. Nesse caso, você não poderá usar THREE.Ray e terá que implementar uma lógica personalizada para descobrir se um objeto está dentro do quadro. Acredito que essa abordagem irá acelerar drasticamente o seu código.

Hmmm, este é um problema interessante.

Acho que o retângulo na tela deve corresponder a algum subfrustum da câmera. Se você pudesse construir uma matriz para este tronco, você poderia tentar fazer a mesma verificação como fazemos para a seleção do tronco.

Sim, isso faz sentido.
Não gosto muito de coordenadas 3D ou matrizes complexas,
Se eu definir um THREE.Matrix4 passando em vértices retangulares (arrastar o mouse) e próximos pontos distantes para o método Matrix4.makeFrustum.
Eu poderia então criar um THREE.Frustum passando o Matrix4 para o método Frustum.setFromMatrix?
Em seguida, use o método Frustum.contains para detectar se um objeto está dentro dele.

Isso soa como se tivesse uma esperança no inferno de funcionar?

As coordenadas do mouse se relacionam com alguma coordenada mundial 3D? como em é a posição do mouse em relação às câmeras perto do plano ou algo assim?

Desculpe se estou apenas sendo um n00b, eu realmente preciso de uma resposta para isso.

Você precisa projetar as coordenadas do mouse para o mundo 3D. Dê uma olhada neste exemplo:
http://mrdoob.github.com/three.js/examples/webgl_interactive_cubes.html

Adaptei o exemplo de colheita do three.js para a seleção de área usando um subfrustum construído com base em um retângulo da tela. Clique e arraste para selecionar. Não parece tão preciso quanto projetar todos os objetos 3D no espaço da tela 2D e, em seguida, cruzar com o retângulo da tela , mas funciona decentemente e acho que é mais rápido.

Perguntas relevantes no estouro da pilha:
THREE.js Como detectar a interseção de um quadrado 2d e um obj 3D
THREE.js Como escolher todos os objetos em uma área

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

makc picture makc  ·  3Comentários

seep picture seep  ·  3Comentários

clawconduce picture clawconduce  ·  3Comentários

jack-jun picture jack-jun  ·  3Comentários

zsitro picture zsitro  ·  3Comentários