私は数時間前からこれに対して頭を叩いていましたが、それは単純なものだと確信していますが、結果を得ることはできません。 OpenGL呼び出しをカプセル化するための小さなライブラリを構築したため、このコードを少し編集しなければなりませんでしたが、以下は状態の正確な説明です。OpenGL、Shader Model 3.3テクスチャリング:黒いテクスチャ?
私は、次の頂点シェーダを使用しています:
#version 330
in vec4 position;
in vec2 uv;
out vec2 varying_uv;
void main(void)
{
gl_Position = position;
varying_uv = uv;
}
そして、次のフラグメントシェーダ:
#version 330
in vec2 varying_uv;
uniform sampler2D base_texture;
out vec4 fragment_colour;
void main(void)
{
fragment_colour = texture2D(base_texture, varying_uv);
}
両シェーダは問題なくコンパイルおよびプログラムのリンク。
私の初期化セクションで、私はそうのような単一のテクスチャをロード:
// Check for errors.
kt::kits::open_gl::Core<QString>::throw_on_error();
// Load an image.
QImage image("G:/test_image.png");
image = image.convertToFormat(QImage::Format_RGB888);
if(!image.isNull())
{
// Load up a single texture.
glGenTextures(1, &Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, image.width(), image.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, image.constBits());
glBindTexture(GL_TEXTURE_2D, 0);
}
// Check for errors.
kt::kits::open_gl::Core<QString>::throw_on_error();
あなたは、私はテクスチャをロードするためにはQtを使用していることを確認します。 :: throw_on_error()への呼び出しは、OpenGLで(Error()を呼び出すことによって)エラーをチェックし、例外が発生した場合に例外をスローします。このコードでOpenGLエラーは発生せず、Qtを使用してロードされたイメージは有効です。
// Clear previous.
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT);
// Use our program.
glUseProgram(GLProgram);
// Bind the vertex array.
glBindVertexArray(GLVertexArray);
/* ------------------ Setting active texture here ------------------- */
// Tell the shader which textures are which.
kt::kits::open_gl::gl_int tAddr = glGetUniformLocation(GLProgram, "base_texture");
glUniform1i(tAddr, 0);
// Activate the texture Texture(0) as texture 0.
glActiveTexture(GL_TEXTURE0 + 0);
glBindTexture(GL_TEXTURE_2D, Texture);
/* ------------------------------------------------------------------ */
// Draw vertex array as triangles.
glDrawArrays(GL_TRIANGLES, 0, 4);
glBindVertexArray(0);
glUseProgram(0);
// Detect errors.
kt::kits::open_gl::Core<QString>::throw_on_error();
同様、全くOpenGLのエラーが発生しない、および三角形がscreeen通りに描かれている。
図面は、以下のように行われます。しかし、それは次のようになります。それは私に起こった
問題は私のテクスチャ座標に関連させることができます。だから、私は、「グリーン」成分と「赤色」成分、及びtとSを用いて次の画像をレンダリング:
テクスチャ座標が正しく表示され、まだ私はまだの黒い三角形を受けてい運命。私は間違って何をしていますか?
私はこれが適切ではないと思います。それらが設定されていない場合は、デフォルト値が使用されます –
あなたは、人の中には神です! @VJovic私はまったく同じことを考えました:)。 –
これは私にとっても問題を解決しました。 'GL_TEXTURE_MIN_FILTER'は特に適切なデフォルト値を持たないようです。 – Henk