प्रस्तुत नहीं करता है मैं एक एफबीओ बनावट के साथ घन खींचने की कोशिश कर रहा हूं। बनावट को सही ढंग से प्रस्तुत किया जाता है (जिसे मैं 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);
क्या आप प्रोग्राम को शेडर/लिंक करते समय त्रुटि लॉग जांचते हैं? एकमात्र चीज जो मैं देख रहा हूं वह मुद्दा हो सकता है कि 'gl_' से शुरू होने वाले वेरिएबल आरक्षित हैं और आपके' gl_FragColor' चर के कारण ड्रैग शेडर एक त्रुटि लौटा सकता है। –
ओह हाँ, और ऐसा लगता है कि आप किसी भी वर्टेक्स विशेषताओं को बाध्यकारी नहीं कर रहे हैं, इसलिए आप वास्तव में कुछ भी नहीं खींच रहे हैं। –
ड्राइंग ठीक है, मैंने उस हिस्से को शामिल नहीं किया जहां मैंने अपना वीबीओ सेट किया है, इत्यादि। क्यूब को इसे प्रस्तुत करना चाहिए, लेकिन बिना टेक्सचरिंग के। जैसा कि मैंने सवाल में कहा है, gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0) का उपयोग करके सफलतापूर्वक एक लाल घन प्रस्तुत करता है। त्रुटि लॉग के लिए, यह खाली है। यदि आप चाहें तो मैं वीबीओ सेटअप जोड़ सकता हूं। – Merigrim