C 在OpenGL中更改视图透视图时出错
我试图在OpenGL中改变我的正方形的透视图,但是当我把一些向量与我的位置向量相乘时,图像消失了,我不知道我是否改变了透视图使其从屏幕上消失,或者这是一个渲染问题,我认为这是更可能的 顶点着色器:C 在OpenGL中更改视图透视图时出错,c,opengl,glm-math,C,Opengl,Glm Math,我试图在OpenGL中改变我的正方形的透视图,但是当我把一些向量与我的位置向量相乘时,图像消失了,我不知道我是否改变了透视图使其从屏幕上消失,或者这是一个渲染问题,我认为这是更可能的 顶点着色器: #version 330 core layout (location = 0) in vec3 position; layout (location = 1) in vec3 aColor; layout (location = 2) in vec2 aTex; out vec3 color;
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 aColor;
layout (location = 2) in vec2 aTex;
out vec3 color;
out vec2 texCoord;
//uniform float scale;
uniform mat4 model;
uniform mat4 view;
uniform mat4 proj;
void main()
{
gl_Position = proj * view * model * vec4(position, 1.0);
color = aColor;
texCoord = aTex;
}
片段着色器:
#version 330 core
out vec4 FragColor;
in vec3 color;
in vec2 texCoord;
uniform sampler2D tex0;
void main()
{
FragColor = texture(tex0, texCoord);
}
计划的一部分及其实施:
while (true)
{
if (SDL_PollEvent(&windowEvent))
{
if (SDL_QUIT == windowEvent.type)
{
break;
}
}
//Cor do background
glClearColor(0.05f, 0.57f, 0.38f, 1.0f);
//Limpa o buffer e o atribui uma nova cor
glClear(GL_COLOR_BUFFER_BIT);
//Ativa o Programa Shader designado
shaderProgram.Activate(shaderProgram);
mat4 model = {1.f};
mat4 view = {1.f};
mat4 proj = {1.f};
glm_translate(view, (vec3){0.f, -0.5f, -2.f});
glm_perspective(glm_rad(45.f), (float)(SCREEN_WIDTH / SCREEN_HEIGHT), 0.1f, 100.f, proj);
int modelLoc = glGetUniformLocation(shaderProgram.id, "model");
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, (float *)model);
int viewLoc = glGetUniformLocation(shaderProgram.id, "view");
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, (float *)view);
int projLoc = glGetUniformLocation(shaderProgram.id, "proj");
glUniformMatrix4fv(projLoc, 1, GL_FALSE, (float *)proj);
//Atribui um valor uniforme podendo aumentar ou reduzir o objeto renderizado
glUniform1f(uniID, 0.5);
//Liga a textura para aparecer na renderização
imagem.Bind(imagem);
//Vincula o VAO ao OpenGL para ser usado
vao1.Bind(vao1);
//Desenha o elemento
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glEnd();
//update the window
SDL_GL_SwapWindow(window);
}
如果你使用的是C++和,则<代码> GLM::Mat4模型(1.0f);<代码>构造一个身份矩阵
如果您使用的是thenmat4 model={1.f}代码>不初始化标识矩阵mat4
是一个结构,但不是一个具有构造函数的类
您必须使用:
mat4模型={1.f}代码>
mat4视图={1.f}代码>
mat4项目={1.f}代码>
mat4模型、视图、项目;
glm_mat4_标识(模型);
glm_mat4_标识(视图);
glm_材料4_标识(项目);
oi Eduardo,我猜是“glm_翻译”。。。。你正在翻译Z中的-2。。。那太远了…我在遵循一个教程,那个家伙使用了这些值。我还试图减小z值,但仍然没有得到图像。我认为问题与顶点着色器或传递参数有关,但我真的不知道还有更多奇怪的事情。。。格伦德()在这里也不是必需的。。。尝试(项目*视图*模型)*vec4(位置,1.0)代码>[带圆括号]我删除了glEnd()并试图修改顶点着色器,将圆括号放在屏幕上仍然是唯一没有图像的,明天我将尝试更改使用矩阵的库,以查看是否实际更改了某些内容,我使用纯C来遵循教程作为一种自我挑战,我听说它比C++更快,我在问题上使用了错误的标签,我会修复它。你的回答对我帮助很大,它是对的。非常感谢,自从昨天以来,我花了太多的时间在这个问题上,我几乎放弃了,把一切都移植到C++。