我正在尝试将我的立方体的位置乘以统一的模型矩阵,但它使我的模型不可见:(
有我的顶点着色器:
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTex;
uniform mat4 model;
out vec2 aTexture;
void main() {
gl_Position = model * vec4(aPos, 1.0f);
aTexture = aTex;
}
和立方体渲染方法:
void Cube::render(const GLSLShader& shader) const {
shader.use();
if (_texture != nullptr) {
_texture->use();
}
glm::mat4 m = glm::translate(m, glm::vec3(0.0f, 0.0f, 0.0f));
shader.addMat4Uniform("model", m);
glBindVertexArray(_vao);
glDrawArrays(GL_TRIANGLES, 0, 36);
}
addmat4uniform方法:
void GLSLShader::addMat4Uniform(const std::string& name, glm::mat4 val) const {
glUniformMatrix4fv(glGetUniformLocation(_shader_program, name.c_str()), 1,
GL_FALSE, glm::value_ptr(val));
}
当我乘以空Mat4时,例如:
glm::mat4 m; //= glm::translate(m, glm::vec3(0.0f, 0.0f, 0.0f));
shader.addMat4Uniform("model", m);
一切都很好,但是当我删除glm ::翻译函数时,cube becames becames Invisible :(
在行中
glm::mat4 m = glm::translate(m, glm::vec3(0.0f, 0.0f, 0.0f));
当将其用作glm::translate
的参数时,变量m
不会发起。
首先初始化变量m
,然后使用:
glm::mat4 m(1.0f); // identity matrix
m = glm::translate(m, glm::vec3(0.0f, 0.0f, 0.0f));
另一方面,请注意,身份矩阵应通过单个参数1.0初始化:
glm::mat4 m(1.0f);
请参阅GLM API文档,该文档指的是OpenGL阴影语言规范4.20。
5.4.2向量和矩阵构造函数
如果对向量构造函数有一个标量参数,则用于将构造向量的所有组件初始化为标量的值。如果矩阵构造函数有一个标量参数,则用于初始化矩阵对角线上的所有组件,其余的组件初始化为0.0。