Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在OpenGL中更改视图透视图时出错_C_Opengl_Glm Math - Fatal编程技术网

C 在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;

我试图在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;

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);<代码>构造一个身份矩阵

如果您使用的是then
mat4 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++。