Anonymous
Тестирование глубины OpenGL приводит к вспышке, черному окну [закрыто]
Сообщение
Anonymous » 30 июл 2025, 16:40
Я застрял, работая с тестированием глубины. < /p>
Моя рабочая теория заключается в том, что буфер глубины не очищается, так как выполнение моего кода, у меня есть вспышка моих треугольников, а затем ничего. Class = "Lang-C PrettyPrint-Override">
Код: Выделить всё
#version 330 core
layout(location = 0) in vec3 position;
void main(){
gl_Position = vec4(position, 1.0);
}
< /code>
< /li>
фрагментный шейдер: < /p>
#version 330 core
layout(location = 0) out vec4 color;
void main(){
color = vec4(gl_FragCoord.z, 1.0, 1.0, 1.0);
}
< /code>
< /li>
< /ul>
И вот мой код: < /p>
#include
#include
#include "../include/Shader.h"
#include "../include/ShaderProgram.h"
#include
#include
int main(void)
{
GLFWwindow* window;
if (!glfwInit())
return -1;
glfwWindowHint(GLFW_DEPTH_BITS, 24);
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
glViewport(0,0,640,480);
glfwMakeContextCurrent(window);
glewInit();
Shader shaders[] ={
Shader("shaders/simpleVertex.vert", GL_VERTEX_SHADER),
Shader("shaders/simpleFragment.frag", GL_FRAGMENT_SHADER)
}; // Loads and compiles the shaders
ShaderProgram program(shaders, 2); // links and validate the shaders
float data[] = {
-0.5, -0.5, 0,
0, 0, 0,
-0.5, 0.5, 0,
-0.25, -0.5, 0.25,
0.25, 0, 0.25,
-0.25, 0.5, 0.25,
0, -0.5, 0.5,
0.5, 0, 0.5,
0, 0.5, 0.5,
};
GLuint indexes[] = {
0, 1, 2,
3, 4, 5,
6, 7, 8
};
GLuint buffers[2];
glGenBuffers(2, buffers);
glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * 9, indexes, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GLfloat), (void*) (0)); // vertices
program.use(); // this calls glUseProgram
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_GREATER); // with GL_LESS
glClearDepth(0.0); // and 1.0, nothing shows up at all
while (!glfwWindowShouldClose(window))
{
glDepthMask(GL_TRUE);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawElements(GL_TRIANGLES, 9, GL_UNSIGNED_INT, nullptr);
glfwSwapBuffers(window);
std::this_thread::sleep_for(std::chrono::milliseconds(1000/60));
glfwPollEvents();
}
glfwTerminate();
return 0;
}
Когда я отключаю gl_depth_test , он отображается «правильно».
Что я делаю не так?
Подробнее здесь:
https://stackoverflow.com/questions/797 ... ack-window
1753882801
Anonymous
Я застрял, работая с тестированием глубины. < /p> Моя рабочая теория заключается в том, что буфер глубины не очищается, так как выполнение моего кода, у меня есть вспышка моих треугольников, а затем ничего. Class = "Lang-C PrettyPrint-Override">[code]#version 330 core layout(location = 0) in vec3 position; void main(){ gl_Position = vec4(position, 1.0); } < /code> < /li> фрагментный шейдер: < /p> #version 330 core layout(location = 0) out vec4 color; void main(){ color = vec4(gl_FragCoord.z, 1.0, 1.0, 1.0); } < /code> < /li> < /ul> И вот мой код: < /p> #include #include #include "../include/Shader.h" #include "../include/ShaderProgram.h" #include #include int main(void) { GLFWwindow* window; if (!glfwInit()) return -1; glfwWindowHint(GLFW_DEPTH_BITS, 24); window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); glViewport(0,0,640,480); glfwMakeContextCurrent(window); glewInit(); Shader shaders[] ={ Shader("shaders/simpleVertex.vert", GL_VERTEX_SHADER), Shader("shaders/simpleFragment.frag", GL_FRAGMENT_SHADER) }; // Loads and compiles the shaders ShaderProgram program(shaders, 2); // links and validate the shaders float data[] = { -0.5, -0.5, 0, 0, 0, 0, -0.5, 0.5, 0, -0.25, -0.5, 0.25, 0.25, 0, 0.25, -0.25, 0.5, 0.25, 0, -0.5, 0.5, 0.5, 0, 0.5, 0, 0.5, 0.5, }; GLuint indexes[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; GLuint buffers[2]; glGenBuffers(2, buffers); glBindBuffer(GL_ARRAY_BUFFER, buffers[0]); glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * 9, indexes, GL_STATIC_DRAW); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GLfloat), (void*) (0)); // vertices program.use(); // this calls glUseProgram glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDepthFunc(GL_GREATER); // with GL_LESS glClearDepth(0.0); // and 1.0, nothing shows up at all while (!glfwWindowShouldClose(window)) { glDepthMask(GL_TRUE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDrawElements(GL_TRIANGLES, 9, GL_UNSIGNED_INT, nullptr); glfwSwapBuffers(window); std::this_thread::sleep_for(std::chrono::milliseconds(1000/60)); glfwPollEvents(); } glfwTerminate(); return 0; } [/code] Когда я отключаю gl_depth_test , он отображается «правильно». Что я делаю не так? Подробнее здесь: [url]https://stackoverflow.com/questions/79719383/opengl-depth-testing-results-in-flash-the-black-window[/url]