Je travaille sur un moteur JavaScript/Canvas FPS comme 3D et désespérément besoin d'un vecteur normal (ou Recherch à vecteur si vous voulez) pour clipping plane près et de loin. J'ai les angles de rotation de l'axe x et y et suis capable de le faire facilement avec un seul d'entre eux à la fois, mais je n'arrive pas à comprendre comment les obtenir tous les deux ...3D normal/chercher au vecteur d'angles d'Euler
L'idée est de utiliser ce vecteur pour calculer un point devant la caméra, les plans de clipping proche et lointain doivent aussi être définissables par des constantes donc le vecteur doit être normalisé, j'espérais qu'avec seulement les angles il serait possible d'obtenir cette longueur de vecteur à 1 sans normalisation, mais ce n'est pas le problème.
Je n'ont pas de rouleau (rotation autour de l'axe z) donc il est beaucoup plus facile.
Mon mathématiques ressemble à ceci:
zNear = 200; // near plane at an arbitrary 200 "points" away from camera position
// normal calculated with only y rotation angle (vertical axis)
normal = {
x: Math.sin(rotation.y),
y: 0,
z: Math.cos(rotation.y)};
puis accrochez un point dans l'espace 3D en testant le vecteur du plan à elle au moyen d'un produit scalaire.
nearPlane = {
x: position.x+normal.x*zNear,
y: position.y+normal.y*zNear,
z: position.z+normal.z*zNear};
// test a point at x, y, z against the near clipping plane
if(
(nearPlane.x-x)*normal.x+
(nearPlane.y-y)*normal.y+
(nearPlane.z-z)*normal.z < 0
)
{
return;
}
// then project the 3D point to screen
Lorsqu'un point est derrière le joueur ses coordonnées de projection sont inversées (x = -x, y = -y) donc rien n'a de sens plus, c'est pourquoi je suis en train de les supprimer.
Je veux que la flèche verte là-bas, mais en 3D.
Si vous me donnez 3 points A, B, C faisant deux vecteurs (AB et BC), je peux vous obtenir une normale en utilisant le produit croisé ... Est-ce que l'aide? – dustmachine
@dustmachine: non, j'ai besoin du vecteur look-at des angles de rotation d'Euler x et y, je n'ai pas d'autres données. – Solenoid