简体   繁体   English

OpenGL GLM 矩阵/向量未正确初始化

[英]OpenGL GLM matrix/vector not initializing properly

I'm attempting to use GLM in an SDL/OpenGL project using MinGW-w64 as a compiler, and am unable to set a value for any matrix or vector I attempt to initialize (all the values in the structure are being set to 0.)我正在尝试在使用 MinGW-w64 作为编译器的 SDL/OpenGL 项目中使用 GLM,并且无法为我尝试初始化的任何矩阵或向量设置值(结构中的所有值都设置为 0。 )

I am not receiving any compiler errors or warnings and it seems like the memory is being allocated properly but the values just aren't being set.我没有收到任何编译器错误或警告,似乎 memory 已正确分配,但只是没有设置值。

#include "engine.hpp"
#include <GL/GLew.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
#include <GL/GL.h>
#include <GL/glu.h>
#include <GL/glext.h>
#include <stdio.h>

...

void Engine::run(){
  ...
  GLuint shaderProg = renderer::loadShaders("shaders/vertShader.glsl", "shaders/fragShader.glsl");

  if(shaderProg==0)
    return;

  glm::mat4 projMat = glm::perspective(glm::radians(45.0f), float(SCREEN_WIDTH)/float(SCREEN_HEIGHT), 0.1f, 100.0f);
  //glm::mat4 projMat = glm::ortho(-10.0f, 10.0f, -10.0f, 10.0f, 0.0f, 100.0f);

  glm::mat4 viewMat = glm::lookAt(glm::vec3(4,3,3),
                                  glm::vec3(0,0,0),
                                  glm::vec3(0,1,0));

  glm::mat4 modelMat = glm::mat4(1.0f);

  glm::mat4 mvp = projMat*viewMat*modelMat;

  glm::vec4 test(1, 1.0f, 1.0f, 1.0f);

  GLuint mvpID = glGetUniformLocation(shaderProg, "MVP");
  glUniformMatrix4fv(mvpID, 1, GL_FALSE, &mvp[0][0]);

  for(int i = 0; i < 4; i++)
  {
    for(int j = 0; j < 4; j++)
    {
      printf("%f ", &projMat[i][j]);
    }
    printf("\n");
  }
  ...
}

glUniform * sets a value of the uniform in the default uniform block of the currently installed program. glUniform *在当前安装程序的默认uniform块中设置uniform的值。 Hence the program has to be installed before by glUseProgram :因此该程序必须glUseProgram安装:

GLuint mvpID = glGetUniformLocation(shaderProg, "MVP");

glUseProgram(shaderProg);

glUniformMatrix4fv(mvpID, 1, GL_FALSE, &mvp[0][0]);

Since OpenGL version 4.1, glProgramUniform * is provided, which specify a value of a uniform variable for a specified program object:由于 OpenGL 版本 4.1,提供了glProgramUniform * ,它为指定程序 object 指定统一变量的值:

GLuint mvpID = glGetUniformLocation(shaderProg, "MVP");
glProgramUniformMatrix4fv(shaderProg, mvpID, 1, GL_FALSE, &mvp[0][0]);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM