2016-09-22 7 views
0

OpenGL ES 2.0でBMP画像をプロットするには、 (x1、y1は左下座標、x2、y2は画面上のオブジェクトの右上座標、tempimageデータは格納されているbmp画像情報へのポインタです)回転オブジェクト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); 

オブジェクトをアングルで回転したいとします。これはどのように達成できますか?

答えて

0

メッシュをレンダリングする前に、使用しているシェーダに回転/トランスフォームマトリックスを送信する必要があります。頂点シェーダ内で、座標を行列で掛けます。

このサイトは(それはC++とGLMを使用しています)マトリックスとレンダリングについての基本を理解するために良いです:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/

+0

私は、OpenGLに新しいです。理解によれば、使用されるMVP行列は3D回転(私が間違っていれば修正してください)です。これは今のところかなり複雑です。オブジェクトの2D回転だけの方法はありますか? 現在、私たちはPNG/JPEG/BMP画像とカスタムボックスを2D平面でプロットしています。これは私たちが回転させたいものです。これらのオブジェクトの頂点座標を計算しています(ボックスの4つの座標、BMP/JPEG/PNGの2つの座標)。座標を計算しようとしましたが、新しい方向でプロットしようとしましたが、シェーダーの適用が正しく行われていません。 これを手伝ってもらえますか? –

+0

回転の場合は、行列が移動する方法です。 MVPシステムは2Dであっても使用する必要があります。ただし、翻訳を狭くしてxとyにスケールすることはできますが、回転についてはz回転行列を実装するだけです。 – SporreKing

+0

覚えておくべき重要なことは、レンダリングしているメッシュに回転を適用すると、その回転がローカル原点を中心に回転することです。このため、シェーダで変換を適用する必要があり、外部から頂点座標を変更できないのはなぜですか。さもなければ、原点はメッシュから離れて移動し、原点を周回しているように見えます。多くの人がこれを忘れてしまい、間違った結果が出る原因になる可能性があります。 – SporreKing