OpenGL GLM matrix/vector 未正确初始化
OpenGL GLM matrix/vector not initializing properly
我正在尝试在使用 MinGW-w64 作为编译器的 SDL/OpenGL 项目中使用 GLM,但无法为我尝试初始化的任何矩阵或向量设置值(结构被设置为 0。)
我没有收到任何编译器错误或警告,似乎内存已正确分配,但未设置值。
#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. Hence the program has to be installed before by glUseProgram
:
GLuint mvpID = glGetUniformLocation(shaderProg, "MVP");
glUseProgram(shaderProg);
glUniformMatrix4fv(mvpID, 1, GL_FALSE, &mvp[0][0]);
从OpenGL 4.1版本开始,提供glProgramUniform
*,为指定的程序对象指定统一变量的值:
GLuint mvpID = glGetUniformLocation(shaderProg, "MVP");
glProgramUniformMatrix4fv(shaderProg, mvpID, 1, GL_FALSE, &mvp[0][0]);
我正在尝试在使用 MinGW-w64 作为编译器的 SDL/OpenGL 项目中使用 GLM,但无法为我尝试初始化的任何矩阵或向量设置值(结构被设置为 0。)
我没有收到任何编译器错误或警告,似乎内存已正确分配,但未设置值。
#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. Hence the program has to be installed before by glUseProgram
:
GLuint mvpID = glGetUniformLocation(shaderProg, "MVP");
glUseProgram(shaderProg);
glUniformMatrix4fv(mvpID, 1, GL_FALSE, &mvp[0][0]);
从OpenGL 4.1版本开始,提供glProgramUniform
*,为指定的程序对象指定统一变量的值:
GLuint mvpID = glGetUniformLocation(shaderProg, "MVP");
glProgramUniformMatrix4fv(shaderProg, mvpID, 1, GL_FALSE, &mvp[0][0]);