2009-11-19 5 views
0

J'ai donc un ensemble de quatre points dans l'espace 3D.Matrice pour représenter un triangle dans l'espace écran

P1 [0, 0, 0]
P2 [128, 0, 0]
P3 [0, 128, 0]
P4 [128, 128, 0]

Ce que je suis puis projection orthographiquement à l'écran en me donnant deux triangles filaires dans l'espace de l'écran. Je veux maintenant mapper une texture à ce "plan" composé des deux triangles. Donc, je prends ma texture carrée, et en utilisant les coordonnées u, v je peux mapper la texture dans ces deux triangles.

Le problème survient lorsque j'essaie d'ajouter un composant z aux verticies. Les triangles résultants dans l'espace d'écran sont maintenant légèrement déformés mais le mappage de texture est complètement désactivé.

Il me semble bien que, comme il est à seulement trois points, ils forment toujours un rectangle affines de quelque sorte et nous pouvons représenter ce rectangle comme une matrice sous la forme:

[ab 0] [cd 0 ] [tx ty 1]

Quelqu'un peut-il me donner quelques conseils, des idées sur la façon de convertir trois points 2D dans l'espace de l'écran dans une matrice dans le formulaire ci-dessus?

Tous les didacticiels, etc. que j'ai recherchés expliquent une théorie approximative du mappage de texture, puis permettent aux fonctions natives OpenGl/DirectX d'effectuer le mappage réel.

Je cherche plus d'une approche directe où donné trois points, je peux mapper une texture à ce triangle en utilisant une matrice affine. (Ne pas faire une approche de rendu scanline)

Merci!

Répondre

1

Je ne suis pas sûr de comprendre exactement ce que vous cherchez, mais voici un moyen de transformer les coordonnées (u, v) en coordonnées d'écran. Disons que vous avez projeté P1, P2, P3 pour les coordonnées de l'écran, et obtenu 3 points avec les coordonnées de l'écran (x1, y1), (x2, y2) et (x3, y3).

Maintenant, nous avons besoin d'une transformation de la forme

[a, b, c] [d, e, f] [0, 0, 1] * [u, v, 1] = [x , y, 1]

et nous le voulons transformer (0,0)-(x1, y1); (1,0)-(x2, y2) et(0,1)-(x3, y3). (C'est parce que vous voulez que votre triangle de texture soit mappé au triangle projeté).

donc nous écrivons toutes les équations:

0 a + 0 b + 1 c = x1 
0 d + 0 e + 1 f = y1 
1 a + 0 b + 1 c = x2 
1 d + 0 e + 1 c = y2 
0 a + 1 b + 1 c = x3 
0 d + 1 e + 1 f = y3 

et nous les réglons, et obtenez:

a = x2-x1 
b = x3-x1 
c = x1 
d = y2-y1 
e = y3-y1 
f = y1 
+0

Cool, merci. Donc, il semble que je devais faire deux choses de plus afin de le faire fonctionner. Le premier était de retourner la matrice que vous m'avez donnée (ce qui est trivial). [a d 0] [b e 0] [c f 1] et la seconde était de normaliser a et c par le delta initial X du polygone dans l'espace non transformé, et de normaliser b et d par le Y. delta initial – Jon

Questions connexes