将gl_posion乘以模型矩阵使立方体看不见



我正在尝试将我的立方体的位置乘以统一的模型矩阵,但它使我的模型不可见:(

有我的顶点着色器:

#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。

最新更新