現在、2DアプリケーションのゲームエンジンをC++で作成しています。しかし、現時点では、頂点シェーダでスプライトを回転させることに悩まされています。私はちょっとthis 説明に従った。私はGLMを使いたくないので、自分でいくつかのことを書く必要があります。 現時点では、これは私のテクスチャシェーダです。GLSL 2D Rotation Matrixが期待どおりに動作しない
バーテックスシェーダ
out vec2 fragPos;
out vec2 fragUV;
uniform vec2 pos;
uniform vec2 size;
uniform float rotation;
void main(){
//gl_Position is OpenGL defined
gl_Position.z = 0.0;
gl_Position.w = 1.0;
gl_Position.x = vertPos.x + pos.x*2 - 1;
gl_Position.y = vertPos.y + pos.y*2 - 1;
mat4 rotationMat = mat4(cos(rotation), sin(rotation) * -1, 0, 0,
sin(rotation), cos(rotation), 0, 0,
0, 0, 1, 0,
0, 0, 0, 1);
gl_Position *= rotationMat;
//vec2 size
if(size.x != 0 || size.y != 0){
if(gl_VertexID != 0){
switch(gl_VertexID){
case 1: gl_Position.x += size.x; break;
case 2: gl_Position.y += size.y; break;
case 3: gl_Position.y += size.y; break;
case 4: gl_Position.x += size.x; gl_Position.y += size.y; break;
case 5: gl_Position.x += size.x; break;
}
}
}
fragPos = vertPos;
fragUV = vec2(vertUV.x, 1.0 - vertUV.y);
}
どんなに値Iが通過、回転は変更されません。スプライトの位置のみ。 Hereはどのように見えますか?テクスチャはすごく盛り上がっているはずです。私もthisの質問にチェックしましたが、それはまったく助けませんでした。 私は自分のテクスチャが回転したくない理由を知っています。
有効なシェーダーを投稿していません。宣言されていない変数を使用します( 'rotateZ')。 [mcve]を提供してください。 –
おっと、恥ずかしいです。私はさまざまな方法を試してみました。使用されていないすべてのコードからコードを消去したとき、私は何かを混乱させました。私はそれが機能するようにそれを編集しました。 – Kiryu144