Utilisation de Monotouch et d'OpenTK J'essaie d'obtenir les coordonnées de l'écran d'un point 3D. J'ai ma matrice de projection vue du monde, et OpenGL a du sens et projette parfaitement mon modèle 3D, mais comment utiliser la même matrice pour projeter un seul point de la 2D à la 3D?Projection d'un point 3D vers une coordonnée d'écran 2D OpenTK
Je pensais que je pourrais simplement utiliser:
Vector3.Transform(ref input3Dpos, ref matWorldViewProjection, out projected2Dpos);
Ensuite ont l'écran de coordonnées projetées dans projected2DPos. Mais le Vector4 résultant ne semble pas représenter la coordonnée d'écran projetée appropriée. Et je ne sais pas comment calculer à partir de là.
J'ai trouvé que je devais diviser par Vector4.w, mais je reçois toujours les mauvaises valeurs. En utilisant cette méthode maintenant:
private static bool GluProject(OpenTK.Vector3 objPos, OpenTK.Matrix4 matWorldViewProjection, int[] viewport, out OpenTK.Vector3 screenPos)
{
OpenTK.Vector4 _in;
_in.X = objPos.X;
_in.Y = objPos.Y;
_in.Z = objPos.Z;
_in.W = 1f;
Vector4 _out = OpenTK.Vector4.Transform(_in, matWorldViewProjection);
if (_out.W <= 0.0)
{
screenPos = OpenTK.Vector3.Zero;
return false;
}
_out.X /= _out.W;
_out.Y /= _out.W;
_out.Z /= _out.W;
/* Map x, y and z to range 0-1 */
_out.X = _out.X * 0.5f + 0.5f;
_out.Y = -_out.Y * 0.5f + 0.5f;
_out.Z = _out.Z * 0.5f + 0.5f;
/* Map x,y to viewport */
_out.X = _out.X * viewport[2] + viewport[0];
_out.Y = _out.Y * viewport[3] + viewport[1];
screenPos.X = _out.X;
screenPos.Y = _out.Y;
screenPos.Z = _out.Z;
return true;
}
je ne vois aucune erreur mais ...: S
Je je viens de réaliser fournissais dans les informations de la matrice du monde deux fois, une fois que le point d'entrée (objPos) et à nouveau dans le cadre du matrice donnée. Cela a causé des résultats étranges. Cela fonctionne après avoir entré seulement la vue combinée et la matrice de projection. :) – sinsro