2016-09-22 1 views
0

Nous utilisons le code suivant pour tracer une image BMP dans OpenGL ES 2.0: (x1, y1 est les coordonnées en bas à gauche, et x2, y2 sont les coordonnées en haut à droite des objets sur l'écran, tempimage data est le pointeur vers les informations d'image bmp stockées)Rotation objet OpenGL ES 2.0

struct 
{ 
    GLuint uiId; 
    GLuint uiLowerLeftLoc; 
    GLuint uiScaleMatrixLoc; 
    GLuint auiLoc[eNumUniforms]; 
} 
m_ShaderProgram; 

glUniform2f(m_ShaderProgram.uiLowerLeftLoc, x1, y1); 
float afMatrix[4] = { x2 - x1, 0, 0, y2 - y1 }; 
glUniformMatrix2fv(m_ShaderProgram.uiScaleMatrixLoc, 1, GL_FALSE, afMatrix); 
glBindTexture(GL_TEXTURE_2D, m_uiTexForeground); 
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, tempimagedata); 
glBindBuffer(GL_ARRAY_BUFFER, m_uiVbo); 
glEnableVertexAttribArray(VERTEX_ARRAY); 
glVertexAttribPointer(VERTEX_ARRAY, 2, GL_FLOAT, GL_FALSE, 0, 0); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
glDisableVertexAttribArray(VERTEX_ARRAY); 

Je souhaite faire pivoter l'objet en termes d'angles. Comment cela peut-il être réalisé?

Répondre

0

Vous devez envoyer une matrice de rotation/transfom au shader que vous utilisez avant de rendre votre maillage. Au sein de votre vertex shader, multipliez les coordonnées par la matrice.

Ce site est bon pour comprendre les bases de rendu avec des matrices (il utilise C++ et GLM): http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/

+0

Je suis nouveau à l'OpenGL. Selon la compréhension, la matrice MVP utilisée est pour la rotation 3D (s'il vous plaît corrigez-moi si je me trompe), ce qui est assez complexe à partir de maintenant. Y a-t-il une méthode pour la rotation 2D des objets? Actuellement, nous dessinons des images PNG/JPEG/BMP ainsi que des boîtes personnalisées dans un plan 2D. C'est ce que nous voulons faire pivoter. nous calculons les coordonnées de vertex pour ces objets, (4 coordonnées de set pour box, 2 set pour BMP/JPEG/PNG). Nous avons essayé de calculer les coordonnées et essayé de tracer avec une nouvelle orientation, mais l'application du shader ne se fait pas correctement. Pouvez-vous m'aider? –

+0

Pour la rotation, une matrice est la voie à suivre. Le système MVP devrait toujours être utilisé même pour 2D. Bien que, vous pouvez rétrécir la traduction et l'échelle à x et y, et pour la rotation, il suffit d'implémenter la matrice z-rotation. – SporreKing

+0

La chose importante à retenir est que lorsque la rotation est appliquée sur un maillage que vous êtes en train de rendre, il tourne autour de son origine locale. C'est pourquoi la translation doit être appliquée dans le shader, et pourquoi vous ne pouvez pas modifier les coordonnées de vertex à l'extérieur. Dans le cas contraire, l'origine serait décalée du maillage et circulerait apparemment autour de l'origine. Beaucoup de gens oublient cela, et cela pourrait être une raison pour le résultat incorrect. – SporreKing