2009-05-25 3 views
4

Pourquoi la mise à l'échelle (uniformément) de l'objet vers le bas entraîne-t-elle un objet plus léger dans OpenGL ES 1.x?Pourquoi la mise à l'échelle de l'objet entraîne-t-elle un objet plus léger dans OpenGL ES?

Il serait plus logique d'être plus sombre parce que les normales ne sont pas réduites, ce qui rend l'objet plus sombre? Mais pour une raison quelconque, l'objet devient plus léger. Lorsque je redimensionne, l'objet devient plus sombre. À mon avis, cela devrait être l'inverse.

S'il vous plaît ne pas suggérer d'utiliser GL_NORMALIZE etc. Je suis juste curieux de savoir pourquoi l'implémentation OpenGL fonctionne comme ça.

+0

Je posterais quelques captures d'écran avant/après. –

Répondre

7

Question simple, réponse complexe. Ceci est l'extrait pertinent du Redbook:

Normales Transforming

vecteurs normaux ne se transforment pas en même manière que les sommets, ou la position vecteurs. Mathématiquement, il vaut mieux penser à des vecteurs normaux que des vecteurs , mais en tant que plans perpendiculaires à ces vecteurs. Ensuite, les règles de transformation pour les vecteurs normaux sont décrites par les règles de transformation pour les plans perpendiculaires . Un plan homogène est noté par le vecteur ligne (a, b, c, d), où au moins l'un de a, b, c ou d est non nul. Si q est un nombre réel non nul de , alors (a, b, c, d) et (qa, qb, qc, qd) représentent le même plan. Un point (x, y, z, w) T est sur le plan (a, b, c, d) si ax + par + cz + dw = 0. (Si w = 1, ceci est la description standard d'un plan euclidien.) Pour (a, b, c, d) pour représenter un plan euclidien , au moins un de a, b, ou c doit être non nul. Si elles sont toutes nulles, alors (0, 0, 0, d) représente le «plan à infini», qui contient tous les «points à l'infini» .

Si p est un plan homogène et v est un sommet homogène , l'instruction « v est sur le plan p » est écrit mathématiquement pv = 0, où pv est multiplication matricielle normale. Si M est une transformation de sommet inversible (à savoir, une matrice 4 × 4 qui a une inverse M-1), puis pv = 0 est équivalente à pM-1mV = 0, alors Mv se trouve sur la pM plane -1. Ainsi, 1-est pM l'image du plan sous le sommet transformation M.

Si vous aimez penser vecteurs normaux comme vecteurs au lieu comme les plans perpendiculaire, soit v et n être des vecteurs tels que v est perpendiculaire à n. Ensuite, nTv = 0.Ainsi, pour une transformation non singulière arbitraire M, nTM-1Mv = 0, ce qui signifie que nTM-1 est la transposée du vecteur normal transformé. Ainsi, le vecteur normal transformé est (M-1) T n. Dans d'autres mots , les vecteurs normaux sont transformés par la transposition inverse de la transformation qui transforme les points. Ouf!

En résumé, les positions et les normales ne se transforment pas de la même manière. Comme expliqué dans le texte précédent, la matrice de transformation normale est (M-1) T. La mise à l'échelle de M à sM se traduirait par (M-1) T/s: plus le facteur d'échelle est petit, plus la normale transformée est grande ... Nous y voilà!

0

Il semblerait que les normales ne soient pas mises à l'échelle avec l'objet. Cela signifierait que les normales pour un objet en taille réelle augmenteraient considérablement la couverture d'un objet à une taille plus petite. Cela conduirait à ce que les angles entre les sources lumineuses et les normales soient exactement les mêmes mais sur une surface beaucoup plus petite.

+0

Hmm hmm .. ça aurait du sens, mais je ne comprends pas les maths derrière hit. Les normales de surface ne sont-elles pas simplement multipliées avec la matrice de modelview inverse qui a été affectée par la mise à l'échelle. –

+0

Ce que je ne sais pas, ma compréhension des normales vient de l'animation 3D, pas tellement de l'OpenGL. J'ai basé ma réponse sur une lecture rapide que j'ai faite où les normales sont souvent pré-calculées et doivent être dites de suivre leurs poly faces respectives/verts/etc. Si les normales ne suivent pas (ou n'évoluent pas, dans votre cas) avec la géométrie, vous obtiendrez des taches sombres et claires. – Soviut

Questions connexes