2012-04-21 7 views
7

प्रस्तुत नहीं करता है मैं एक एफबीओ बनावट के साथ घन खींचने की कोशिश कर रहा हूं। बनावट को सही ढंग से प्रस्तुत किया जाता है (जिसे मैं gDebugger में देख सकता हूं), लेकिन यह घन पर प्रस्तुत नहीं करता है। मैंने सोचा कि यह एफबीओ बनावट के साथ एक समस्या हो सकती है इसलिए मैंने एक सामान्य बनावट को लोड किया और इसे भी आजमाया, लेकिन मुझे एक ही समस्या है, सिर्फ एक काला घन।बनावट लोड और बाध्य है, लेकिन टुकड़ा शेडर इसे

gDebugger में प्रोग्राम के माध्यम से कदम, मैं देख सकता हूं कि बनावट दोनों सही ढंग से लोड और बाध्य है, लेकिन कुछ भी खींचा नहीं गया है। टेक्साकोर्ड के साथ कोई समस्या नहीं प्रतीत होती है। ध्यान दें कि मैंने टुकड़े टुकड़े में एक ठोस रंग को आउटपुट करने का भी प्रयास किया है जो सही तरीके से काम करता है।

यह मेरी शीर्ष शेडर है:

#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); 
} 

और यह वह जगह है जहाँ मैं घन आकर्षित:

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); 

मैं होना चाहिए अंधे, क्योंकि मुझे कोई त्रुटि नहीं दिखती है।

(इसके अलावा, कृपया ध्यान दें कि मैं SFML और Glew उपयोग कर रहा हूँ संदर्भ निर्माण और विस्तार के लिए।)

संपादित करें:

मैं अगर यह उपयोगी होगा पता नहीं है, लेकिन यह कैसे है मैं घन 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' चर के कारण ड्रैग शेडर एक त्रुटि लौटा सकता है। –

+0

ओह हाँ, और ऐसा लगता है कि आप किसी भी वर्टेक्स विशेषताओं को बाध्यकारी नहीं कर रहे हैं, इसलिए आप वास्तव में कुछ भी नहीं खींच रहे हैं। –

+0

ड्राइंग ठीक है, मैंने उस हिस्से को शामिल नहीं किया जहां मैंने अपना वीबीओ सेट किया है, इत्यादि। क्यूब को इसे प्रस्तुत करना चाहिए, लेकिन बिना टेक्सचरिंग के। जैसा कि मैंने सवाल में कहा है, gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0) का उपयोग करके सफलतापूर्वक एक लाल घन प्रस्तुत करता है। त्रुटि लॉग के लिए, यह खाली है। यदि आप चाहें तो मैं वीबीओ सेटअप जोड़ सकता हूं। – Merigrim

उत्तर

7

=== संपादित === की स्थापना

ऐसा लगता है कि आप textu भूल रहे हैं की तरह खनन फ़िल्टर के लिए फिर से सेटअप करें, जो एक समस्या है यदि आप एक मिस्डैड बनावट का उपयोग नहीं कर रहे हैं। यहां देखें: http://www.opengl.org/wiki/Common_Mistakes#Creating_a_complete_texture

+1

हां, मैं इसे अपने प्रारंभिक कोड में करता हूं। मैंने घन खींचने से ठीक पहले इसे जोड़ने की भी कोशिश की लेकिन मुझे दुर्भाग्य से एक ही परिणाम मिल गया। – Merigrim

+0

@Merigrim क्या आप सभी प्रारंभिक कोड डाल सकते हैं? जो कुछ आप वर्तमान में प्राप्त कर चुके हैं उसमें कुछ भी नहीं है जो मेरे ज्ञान के सर्वोत्तम होने के लिए एक समस्या का कारण बन जाएगा। – Tim

+0

ठीक है, बस एक मिनट। – Merigrim

संबंधित मुद्दे