J'écris un rendu de logiciel qui fonctionne actuellement bien, mais j'essaie d'obtenir la correction de la perspective des coordonnées de la texture et qui ne semble pas être correcte. J'utilise toutes les mêmes matrices de matrice que OpenGL pour mon rendu. Pour raster un triangle, je fais ce qui suit:
Transformez les sommets à l'aide des matrices de modèle et de projection, puis transformez en coordonnées de clip. P> li>
Pour chaque pixel dans chaque triangle, calculez les coordonnées barycentriques pour interpoler les propriétés (couleur, coordonnées de texture, normales, etc.) p> l>
Pour corriger la perspective, j'utilise la perspective d'interpolation correcte: (W est la coordonnée de la profondeur du sommet, C est la coordonnée de la texture du sommet, B est le poids barycentrique d'un sommet) p> li> ol>
1/w = b0*(1/w0) + b1*(1/w1) + b2*(1/w2) c/w = b0*(c0/w0) + b1*(c1/w1) + b2*(c2/w2) c = (c/w)/(1/w)
4 Réponses :
Ouais, cela ressemble à votre dent traditionnel de la perspective cassée. Votre algorithme semble bien cependant, alors je ne suis vraiment pas sûr de ce qui pourrait être faux. Je vérifierais que vous utilisez réellement la valeur nouvellement calculée plus tard lorsque vous le rendez? Cela ressemble vraiment à vous êtes allé dans la difficulté de calculer la valeur de perspective - correct, puis utilisée la valeur de base non corrigée pour le rendu. P>
Je viens de regarder les chiffres, la différence entre les coords TEX corrigés et non corrigés est de l'ordre de 1.0e-4 (coordonnées TEX dans la plage [0,0,1.0]). Peut-être qu'il y a un problème de mise à l'échelle? Ai-je raison d'utiliser la coordonnée de la profondeur de la pince pour la mise à l'échelle?
Vous devez informer OpenGL que vous avez besoin de correction de perspective sur les pixels avec ce que vous observez est la distorsion typique de la cartographie de texture linéaire. Sur le matériel qui n'est pas capable de correction de perspective par pixel (comme par exemple la PS1), la solution standard est simplement subdivisant dans des polygones plus petits pour rendre le défaut moins perceptible. P> p>
Ceci est un rendu de logiciel, pas OpenGL (pense qu'un MOD a ajouté cette balise) ... mais j'utilise les maths OpenGL pour toutes les transformations.
Désolé ... J'ai vu le tag OpenGL et si supposé que vous utilisiez OpenGL (qui devrait basculer sur le rendu logiciel si le matériel n'est pas en mesure de fournir une fonctionnalité). Quoi qu'il en soit, ce que vous observez est le problème dit "Projection de perspective linéaire" et se produit lorsque vous calculez des valeurs UV correctes pour les sommets, mais le polyfilleur les interpolez linéairement lorsque vous rendant un polygone.
La seule transformation correcte des coordonnées UV en un plan 3D est une transformation homographique. P>
http://en.wikipedia.org/wiki/homography P>
Vous devez l'avoir à un moment donné de vos calculs. P>
Pour le trouver vous-même, vous pouvez écrire la projection de tout pixel de la texture (identique à celle du sommet) et les inviter à obtenir des coordonnées de texture à partir de coordonnées d'écran. Il viendra sous la forme d'une transformation homographique. p>
J'ai récemment fissuré le code sur cette question. Vous pouvez utiliser une homographie si vous envisagez de modifier la texture en mémoire avant de l'attribuer à la surface. Cela est coûteux et ajoute une dépendance supplémentaire à votre programme. Il y a un joli piratage qui va résoudre le problème pour vous. P>
OpenGL applique automatiquement la correction de la perspective à la texture que vous rendu. Tout ce que vous avez à faire est de multiplier vos coordonnées de texture (UV - 0.0F-1.0F) par le composant Z (profondeur de l'espace mondiale d'un vecteur de position XYZ) de chaque coin de l'avion et il «jette» la correction de la perspective de OpenGL . p>
J'ai demandé et j'ai résolu ce problème récemment. Donnez à ce lien un coup: p>
Texture Cartographie d'un trapèze avec une texture carrée OpenGL p>
Le papier que j'ai lu qui corrigé ce problème est appelé, " Naviguer les environnements statiques à l'aide de la simplification de l'espace d'image et de la morphing "- page 9 ANNEXE A. P>
J'espère que cela vous aidera! P>
CT P>
Les captures d'écran pourraient être utiles.
Je ne peux pas ajouter une capture d'écran avant d'avoir une note de 10 :(