2012-04-21 21 views
7

FBOテクスチャでキューブを描画しようとしています。テクスチャは正しく描画されますが(gDebuggerで見ることができます)、キューブ上にレンダリングされません。私はこれがFBOテクスチャの問題かもしれないと思ったので、普通のテクスチャをロードして試しましたが、同じ問題が発生しました。ただ黒いキューブです。テクスチャはロードされバインドされていますが、フラグメントシェーダはレンダリングしません。

gDebuggerでプログラムを実行すると、テクスチャが正しくロードされていることがわかりますが、何も描画されません。また、texcoordsに問題はないようです。私はまた正しく動作するフラグメントシェーダで単色を出力しようとしました。

これは私の頂点シェーダである:私はでなければなりません

ShaderManager::Get("world")->Use(); 
glBindVertexArray(cube_vao); 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, tex); 
glDrawArrays(GL_TRIANGLES, 0, 36); 
glBindTexture(GL_TEXTURE_2D, 0); 
glBindVertexArray(0); 

#version 420 

uniform mat4 projection; 
uniform mat4 view; 
uniform mat4 model; 

layout(location = 0) in vec3 vertex; 
layout(location = 1) in vec2 texcoord; 

out vec2 f_texcoord; 

void main() { 
    gl_Position = projection * view * model * vec4(vertex, 1.0); 
    f_texcoord = texcoord; 
} 

そして、これが私のフラグメントシェーダです:

#version 420 

uniform sampler2D tex; 

in vec2 f_texcoord; 

out vec4 gl_FragColor; 

void main() { 
    gl_FragColor = texture2D(tex, f_texcoord); 
} 

そして、私はキューブを描く場所です私は間違いがないので、盲目です。

(また、私はコンテキストの作成と拡張のためSFMLとGLEWを使用していますので、ご注意ください。)

EDIT:

これは参考になる場合、私は知りませんが、これはどのようにあります私はキューブVBO、ユニフォーム等:

glClearColor(1.0, 0.0, 0.0, 1.0); 

glEnable(GL_DEPTH_TEST); 

glGenTextures(1, &tex); 
glBindTexture(GL_TEXTURE_2D, tex); 
sf::Image img; 
img.LoadFromFile("test.png"); 
img.FlipVertically(); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.GetWidth(), img.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img.GetPixelsPtr()); 
glBindTexture(GL_TEXTURE_2D, 0); 

ShaderTime = 0.0; 
camz = -4.0f; 
rotation_y = 0.0f; 

Shader* shader = ShaderManager::Load("shader", "fx.vert", "fx.frag"); 
Shader* world = ShaderManager::Load("world", "world.vert", "world.frag"); 
shader->Use(); 
glUniform1f(glGetUniformLocation(shader->GetId(), "time"), ShaderTime); 
world->Use(); 
glm::mat4 proj = glm::perspective(60.0f, (float)WINDOW_WIDTH/(float)WINDOW_HEIGHT, 0.1f, 1000.0f); 
glm::mat4 view = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, camz)); 
glm::mat4 model; 
glUniformMatrix4fv(glGetUniformLocation(world->GetId(), "projection"), 1, GL_FALSE, glm::value_ptr(proj)); 
glUniformMatrix4fv(glGetUniformLocation(world->GetId(), "view"), 1, GL_FALSE, glm::value_ptr(view)); 
glUniformMatrix4fv(glGetUniformLocation(world->GetId(), "model"), 1, GL_FALSE, glm::value_ptr(model)); 
glUniform1i(glGetUniformLocation(world->GetId(), "tex"), 0); 

glGenVertexArrays(1, &cube_vao); 
glBindVertexArray(cube_vao); 
glGenBuffers(1, &cube_vbo); 
glBindBuffer(GL_ARRAY_BUFFER, cube_vbo); 

GLfloat* data = new GLfloat[5 * 36] { 
    // Front 
    -1.0f, -1.0f, 1.0f, 0.0f, 0.0f,  -1.0f, 1.0f, 1.0f, 0.0f, 1.0f,  1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f,  1.0f, -1.0f, 1.0f, 1.0f, 0.0f,  -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 

    // Back 
    -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f, 0.0f, 1.0f,  1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 
    1.0f, 1.0f, -1.0f, 1.0f, 1.0f,  1.0f, -1.0f, -1.0f, 1.0f, 0.0f,  -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 

    // Top 
    -1.0f, 1.0f, 1.0f, 0.0f, 1.0f,  -1.0f, 1.0f, -1.0f, 0.0f, 1.0f,  1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 
    1.0f, 1.0f, -1.0f, 1.0f, 1.0f,  1.0f, 1.0f, 1.0f, 1.0f, 1.0f,  -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 

    // Bottom 
    -1.0f, -1.0f, 1.0f, 0.0f, 1.0f,  -1.0f, -1.0f, -1.0f, 0.0f, 1.0f,  1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 
    1.0f, -1.0f, -1.0f, 1.0f, 1.0f,  1.0f, -1.0f, 1.0f, 1.0f, 1.0f,  -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 

    // Left 
    -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f, 0.0f, 1.0f,  -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 
    -1.0f, 1.0f, 1.0f, 0.0f, 1.0f,  -1.0f, -1.0f, 1.0f, 0.0f, 0.0f,  -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 

    // Right 
    1.0f, -1.0f, -1.0f, 0.0f, 0.0f,  1.0f, 1.0f, -1.0f, 0.0f, 1.0f,  1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 
    1.0f, 1.0f, 1.0f, 0.0f, 1.0f,  1.0f, -1.0f, 1.0f, 0.0f, 0.0f,  1.0f, -1.0f, -1.0f, 0.0f, 0.0f 
}; 

glBufferData(GL_ARRAY_BUFFER, (5 * 36) * sizeof(GLfloat), data, GL_STATIC_DRAW); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLvoid*)(0)); 
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLvoid*)(sizeof(GLfloat) * 3)); 

glEnableVertexAttribArray(0); 
glEnableVertexAttribArray(1); 

glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindVertexArray(0); 
+0

シェーダのコンパイル時にエラーログをチェックしますか、プログラムをリンクしますか?私が目にしているのは、gl_で始まる変数が予約されていて、gl_FragColor変数のためにfragシェーダがエラーを返す可能性があるということだけです。 –

+0

ああ、あなたはどんな頂点属性にも拘束されていないので、実際には何も描画していないように見えます。 –

+0

図面はうまくいきますが、VBO:sなどを設定した部分は含まれていませんでした。キューブはレンダリングされますが、テクスチャは使用されません。私が質問で述べたように、gl_FragColor = vec4(1.0、0.0、0.0、1.0)を使用すると、赤いキューブが正しくレンダリングされます。エラー・ログは空です。必要に応じてVBOセットアップを追加できます。 – Merigrim

答えて

7

===編集===を設定し、あなたがtextuが欠けているように見えます

minipingフィルタの設定を変更する必要があります。ミップマップテクスチャを使用していない場合は問題です。ここをクリックしてください:http://www.opengl.org/wiki/Common_Mistakes#Creating_a_complete_texture

+1

はい、私は初期化コードでそれを行います。私はキューブを描く直前にも追加しようとしましたが、同じ結果が残っています。 – Merigrim

+0

@Merigrimあなたはすべての初期化コードを置くことができますか?私が知っている限り、問題を引き起こすあなたが現在そこに起きていることには何もありません。 – Tim

+0

さて、ちょっと待ってください。 – Merigrim

関連する問題