2010-08-04 13 views
0

J'essaye de transformer des vertices avec un programme de shader, mais je ne peux pas comprendre les résultats. J'ai préparé une projection, une vue (trans) et un modèle (trans) matrices:Comment procédez-vous à la multiplication de la matrice de shaders OpenGL ES 2.0?

D'abord j'ai une fonction de vertex shader de: position viewproj *. Dans un programme Objective-C, je commence par une multiplication d'identité par une matrice de traduction et de projection, puis je l'applique à viewproj. Je peux voir la géométrie répondant à une traduction globale, en perspective.

Je voudrais uniformiser les matrices séparément et tout fonctionner dans le shader. Je uniformise un proj, vue (trans), modèle (trans), et essaye dans le shader: proj voir position du modèle . Mais les sems ne sont pas bien transformés (hors représentation?) Alors j'essaye de simuler simplement ma première transformation. Je proj uniforme, et vue en shaders i essayer avec (vue proj) position afin de faire la même opération, mais la vue is'nt proj fait en C.

J'utilise des matrices décrites dans les colonnes 0-4 sont la première colonne. Et avec la structure définie dans http://www.songho.ca/opengl/gl_transform.html#modelview

Maintenant, je ne sais pas ce que je manque, je souhaite avoir une réponse simple. Si quelqu'un a une idée, merci.

pd: Puis-je déboguer ces shaders? (XCode + simulateur iphoneos)

Répondre

2

Si quelqu'un a une idée, merci.

La multiplication de matrices dans shaders OpenGL va comme ceci:

gl_Position = projectionMat*modelViewMat*vec4(inPos, 1.0); 

InPos est la position de sommet vec3.

Si vous voulez plus de matrices (style DirectX), vous devrez utiliser

gl_Position = projectionMat*viewMat*worldMat*vec4(inPos, 1.0); 

matrices devraient idéalement être extraites de OpenGL, et la projection ne devrait pas être transformer l'identité. Utilisez gluOrtho2D si vous avez besoin de graphiques 2D.

De même, vous pourriez accidentellement transposer ou oublier de transposer des matrices tout en les chargeant en uniforme. Quoi qu'il en soit, si vous avez des problèmes avec les shaders, écrivez d'abord une application qui rendra les choses sans shader, puis écrivez shader et chargez les matrices de transformation depuis OpenGL, puis convertissez-les (si vous en avez besoin) en routines de calcul matricielles personnalisées.

Selon la version OpenGL, vous pouvez avoir la fonction GLSL ftransform() disponible qui simplifiera encore les choses.

0

je commence avec l'identité multiplicated par une matrice de traduction et de projection, puis en uniforme à viewproj

Il est identitaire> Translation-> viewproj-> projection, comme vous avez dit :

proj vue modèle * position

Vous êtes difficile à lire. Pourriez-vous poster du code à la place s'il vous plaît?