J'ai un problème avec mon projet 3D. C'est assez compliqué de décrire le but, alors j'essaie de l'abstraire au minimum. J'ai un flux vidéo en direct du programme d'unité que j'apporte en plein écran (1920 x 1200). Un utilisateur clique sur l'écran pour envoyer les coordonnées à l'application de l'unité.Comment régler la direction de Raycast à 90 degrés au lieu de passer par la caméra
coords envoi:
// relative coord
float x = mouse_x/1920.0f;
float y = mouse_y/1200.0f;
Le récepteur est l'application de l'unité, qui essaye de faire une 3D coordonnée et trouve un mur ou un obstacle pour placer une marque.
1. Attempt
// 1268 x 720 receiver viewport size
Ray ray = Camera.main.ScreenPointToRay(new Vector3(Position.x * 1268.0f, Position.y * 720.0f, 0));
2. Attempt
// * 1268 not necessary
Vector3 far = Camera.main.ViewportToWorldPoint(new Vector3(fix.Position.x, fix.Position.y, 1));
Vector3 near = Camera.main.ViewportToWorldPoint(new Vector3(fix.Position.x, fix.Position.y, 0));
Vector3 dir = far - near;
dir.Normalize();
Ray ray = new Ray(near, dir);
RaycastHit hitInfo;
if(Physics.Raycast(ray, out hitInfo))
{
// place mark
}
Les deux résultats des tentatives de la même manière. Si la coordonnée est autour du centre, elle se trouve également au centre du récepteur. Mais plus il va au bord, il sera beaucoup plus loin de la position qu'il devrait être. La photo montre ce que je pense arrive. Le cercle rouge est le comportement actuel et le vert est ce que j'attendais. Je préférerais avoir un rayon de 90 degrés de l'écran au mur plutôt qu'à travers la caméra. Je ne sais vraiment pas quoi faire. Merci beaucoup pour votre aide à l'avance.
La fenêtre est pas une entité * de l'espace physique *, de sorte que vous avez diagramme est source de confusion. Vous devez spécifier une distance * plan de projection *, qui est la distance perpendiculaire de la position de la caméra au plan à partir de. que vous voulez que les rayons commencent – meowgoesthedog