Я сейчас узнаю, как работает OpenGL. Я застрял, работая с тестированием глубины.
Моя рабочая теория заключается в том, что глубинный буфер не очищается, как выполнение моего кода, у меня есть вспышка моих треугольников, а затем ничего.#version 330 core
layout(location = 0) in vec3 position;
void main(){
gl_Position = vec4(position, 1.0);
}
< /code>
фрагментный шейдер: < /p>
#version 330 core
layout(location = 0) out vec4 color;
void main(){
color = vec4(gl_FragCoord.z, 1.0, 1.0, 1.0);
}
< /code>
И вот мой код: < /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, он отображается «правильно».
конечная цель - не работать в 2D, но я сделал самый маленький пример, у которого есть эта проблема на моем компьютере.
Что я делаю не так?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ack-window
Результаты тестирования глубины OpenGl ⇐ C++
Программы на C++. Форум разработчиков
1753843182
Anonymous
Я сейчас узнаю, как работает OpenGL. Я застрял, работая с тестированием глубины.
Моя рабочая теория заключается в том, что глубинный буфер не очищается, как выполнение моего кода, у меня есть вспышка моих треугольников, а затем ничего.#version 330 core
layout(location = 0) in vec3 position;
void main(){
gl_Position = vec4(position, 1.0);
}
< /code>
фрагментный шейдер: < /p>
#version 330 core
layout(location = 0) out vec4 color;
void main(){
color = vec4(gl_FragCoord.z, 1.0, 1.0, 1.0);
}
< /code>
И вот мой код: < /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, он отображается «правильно».
конечная цель - не работать в 2D, но я сделал самый маленький пример, у которого есть эта проблема на моем компьютере.
Что я делаю не так?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79719383/opengl-depth-testing-results-in-flash-the-black-window[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия