РЕШЕНИЕПроблема с матрицей проецирования на Shader GLSL OpenGL
Проблема была в моем г интервале Я рассматривал отрицательные значения на г как (-0.1f < < г 100f), вместо этого я использовал положительный интервал для ближней/дальней плоскости ex: (0.0f < z < 100.0f), я организовал другие вещи с устаревшей пустотой в OpenGL, и я устроил свое плохое положение на моем glm :: lookAt.
Примечание: не смешивайте старый способ рендеринга с новым способом визуализации (это хорошая практика, но может быть проблемой), кстати: вы должны понимать свою позицию в пространстве.
Спасибо всем, ребята :)
Я начинающий графический программист, и я пытался сделать очень простой треугольник с использованием основных вершин/фрагментов шейдеров. Но у меня одна ошибка с моей матрицей проекции, и я не могу ее найти. Кроме того, Im пытается сделать изменение формы, и я хочу, чтобы переконвертировать обратный вызов хорошо работает с треугольником, нарисованным шейдером. Когда я пишу эти продукты в моем рендеринге, это происходит:
MVP = ProjectionMatrix * ModelViewMatrix;
Результат ->I dont Like
И если я только назначить MVP в видовую матрицу Я получил это:
Результат ->I dont Like too because the origin should be in the upper left corner and is in the center of the window
Это мой Reshape Пустоты
void OpenGL_Initialization(int w, int h){
ProjectionMatrix = glm :: ortho(0.0f,(GLfloat)w,(GLfloat)h,0.0f,0.1f, 100.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glLoadMatrixf(glm :: value_ptr(ProjectionMatrix));
glMatrixMode(GL_MODELVIEW);
}
void Reshape(int w, int h){
width = w;
height = h;
glViewport(0,0,w,h);
OpenGL_Initialization(w,h);
}
И это мой обратный вызов визуализации:
void Render(){
glClearColor(0.75,0.75,0.75,1.0);
glClear(GL_COLOR_BUFFER_BIT);
glGetFloatv(GL_MODELVIEW_MATRIX,glm :: value_ptr(ModelViewMatrix));
MVP = ProjectionMatrix * ModelViewMatrix;
glUniformMatrix4fv(glGetUniformLocation(ProgramHandler,"MVP"),1,GL_FALSE,glm :: value_ptr(MVP));
glBindVertexArray(vaoHandle);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
glutSwapBuffers();
}
Также это моя вершина и пиксельный шейдер
#version 400
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexColor;
uniform mat4 MVP;
out vec3 Color;
void main(){
Color = VertexColor;
gl_Position = MVP*vec4(VertexPosition,1.0);
}
#version 400
in vec3 Color;
out vec4 FragColor;
void main(){
FragColor = vec4(Color,1.0);
}
РВО А.Н. d инициализации ВАО:
void InitVBO(GLuint programHandler){
glBindAttribLocation(programHandler,0,"VertexPosition");
glBindAttribLocation(programHandler,1,"VertexColor");
GLfloat positionData[] = {-0.5f,0.5f,0.0f,0.0f,-.5f,0.0f,0,0,0};
GLfloat colorData[] = {1.0f,0.0f,0.0f,0.0f,1.0f,0.0f,0.0f,0.0f,1.0f};
GLuint vboHandles[2];
glGenBuffers(2,vboHandles);
glBindBuffer(GL_ARRAY_BUFFER,vboHandles[0]);
glBufferData(GL_ARRAY_BUFFER,9*sizeof(GLfloat),positionData,GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,vboHandles[1]);
glBufferData(GL_ARRAY_BUFFER,9*sizeof(GLfloat),colorData,GL_STATIC_DRAW);
glGenVertexArrays(1, &vaoHandle);
glBindVertexArray(vaoHandle);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, vboHandles[0]);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0,(GLubyte *)NULL);
glBindBuffer(GL_ARRAY_BUFFER, vboHandles[1]);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0,(GLubyte *)NULL);
}
Пожалуйста, не вызывайте свои функции, возвращающие пустоты «пустоты». – thokra
Кроме того, при ближней плоскости в точке (z == 0,1f) вы ничего не увидите. Вы пробовали немного переместить камеру «назад», то есть некоторое расстояние вдоль положительной оси z? (Подсказка: glm :: lookAt) – thokra
Привет, thokra, да, я пробовал и ничего не происходит – czapata91