私はLWJGLを使って "タイル"を描画しています。あるいは、スクリーン上にテクスチャ化された2Dの四角形を描画しています。ただし、テクスチャ座標は常に(0、0)であるため、テクスチャ付きの四角形は最初のピクセルカラーを使用して塗りつぶします。フラグメントシェーダのテクスチャ座標が常に(0、0)ですか?
これは私の頂点シェーダです:
#version 330 core
in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;
out vec4 pass_Color;
out vec2 pass_TextureCoord;
void main(void) {
gl_Position = in_Position;
pass_Color = in_Color;
pass_TextureCoord = in_TextureCoord;
}
そして、これは私のフラグメントシェーダです:
#version 330 core
uniform sampler2D texture_diffuse;
in vec4 pass_Color;
in vec2 pass_TextureCoord;
out vec4 out_Color;
void main(void) {
out_Color = pass_Color;
// Override out_Color with our texture pixel
out_Color = texture(texture_diffuse, pass_TextureCoord);
}
そして、これは基本的に私は四角形を描画するために使用しているコードです:
ARBShaderObjects.glUseProgramObjectARB(shaderProgram);
glBindTexture(GL_TEXTURE_2D, sprite.getId());
glBegin(GL11.GL_QUADS);
glVertex2d(screenMinX, screenMinY);
glTexCoord2d(0.0, 0.0);
glVertex2d(screenMaxX, screenMinY);
glTexCoord2d(1.0, 0.0);
glVertex2d(screenMaxX, screenMaxY);
glTexCoord2d(1.0, 1.0);
glVertex2d(screenMinX, screenMaxY);
glTexCoord2d(0.0, 1.0);
glEnd();
// release the shader
ARBShaderObjects.glUseProgramObjectARB(0);
上記のコードが最初にどのように機能するかわからないため、修正できません。 in_Position
、in_Color
またはin_TextureCoord
が最初の2つだけであることをシェーダに伝えていませんが、うまく動作するようです。最終的にフラグメントシェーダに渡されるin_TextureCoord
ですが、これは(0、0)という一定の値を持つようです - フラグメントシェーダの出力カラーをXの値に等しいチャンネルに設定することでテクスチャ座標の座標。それは四角い全体にわたって単色のままであり、テクスチャ座標に変化がないことを示している。
上記のコードで生成された四角形はテクスチャである必要がありますが、その代わりに、与えられたテクスチャの最初のピクセルである無地の色が塗られています。テクスチャ座標をそれに応じて変更するには、コードをどのように変更できますか?もし私がこの全てがどのようにぴったり合っているのか誤解しているようであれば、私を修正してください。
Thisは私が上記を達成するために使ったチュートリアルです。
p.s.私は、Javaスニペットがdeprecatedイミディエイトモードを使用していることを認識していますが、glDrawArraysの使用方法や他の一般的に提案されている方法を理解することはできません。これを変える手助けをしてもらえますか?
"これは本質的に私が四角形を描画するために使用するコードです:テクスチャ座標を決して設定しないでください。どうしてそれらが0、0以外のものになると思いますか? – tkausl
@tkausl個々のピクセルごとにテクスチャ座標を設定するにはどうすればよいですか? OpenGLはピクセルを内部的に扱うように見えるので、私は混乱します。 – curz46