Matrix OpenglES 2.0矩阵作为顶点属性

Matrix OpenglES 2.0矩阵作为顶点属性,matrix,opengl-es-2.0,Matrix,Opengl Es 2.0,我试着用顶点来发送矩阵,而不是用均匀矩阵,这样程序就快了一点。问题是我的对象没有出现,我不明白为什么。对于顶点和颜色,我总是这样做,而且总是有效的 代码如下: GLuint _mbo[4]; _camera->getMatricies(projection, view, model); glm::vec4 column0 = glm::column(view, 0); glm::vec4 column1 = glm::column(view, 1); glm::vec4 column2 =

我试着用顶点来发送矩阵,而不是用均匀矩阵,这样程序就快了一点。问题是我的对象没有出现,我不明白为什么。对于顶点和颜色,我总是这样做,而且总是有效的

代码如下:

GLuint _mbo[4];
_camera->getMatricies(projection, view, model);
glm::vec4 column0 = glm::column(view, 0);
glm::vec4 column1 = glm::column(view, 1);
glm::vec4 column2 = glm::column(view, 2);
glm::vec4 column3 = glm::column(view, 3);

std::cerr << glm::to_string(column0) << std::endl;
glGenBuffers(1, &_mbo[0]);
glBindBuffer(GL_ARRAY_BUFFER, _mbo[0]);
glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(GLfloat), &column0[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

std::cerr << glm::to_string(column1) << std::endl;
glGenBuffers(1, &_mbo[1]);
glBindBuffer(GL_ARRAY_BUFFER, _mbo[1]);
glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(GLfloat), &column1[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

std::cerr << glm::to_string(column2) << std::endl;
glGenBuffers(1, &_mbo[2]);
glBindBuffer(GL_ARRAY_BUFFER, _mbo[2]);
glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(GLfloat), &column2[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

std::cerr << glm::to_string(column3) << std::endl;
glGenBuffers(1, &_mbo[3]);
glBindBuffer(GL_ARRAY_BUFFER, _mbo[3]);
glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(GLfloat), &column3[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

.....

glBindBuffer(GL_ARRAY_BUFFER, _mbo[0]);
glEnableVertexAttribArray(matId);
glVertexAttribPointer(matId, 4, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, _mbo[1]);
glEnableVertexAttribArray(matId + 1);
glVertexAttribPointer(matId + 1, 4, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, _mbo[2]);
glEnableVertexAttribArray(matId + 2);
glVertexAttribPointer(matId + 2, 4, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, _mbo[3]);
glEnableVertexAttribArray(matId + 3);    
glVertexAttribPointer(matId + 3, 4, GL_FLOAT, GL_FALSE, 0, 0);

我无法确定问题是否发生在着色器中。。。这让我非常沮丧。

@rabbi76在这个网站上,它说一个属性mat4会生成4个顶点属性(每个都是vec4)。但是我测试了vec4的4个顶点,没有显示任何东西…不,现在我有一个三角形,这个矩阵是摄像机的视图矩阵。哦,好的。。。这不会很有趣。。。请回答最后一个问题,这意味着当我们使用glUniform时,这个函数只在每个顶点上设置矩阵数据,对吗?对不起,这是最后一个问题,我不再打扰你了。我读到通过属性传递变换矩阵可以加速渲染,但是如果我们必须将数据设置到每个顶点,它如何加速渲染呢?@rabbi76我在这篇文章中读到了这一点:还有其他一些文章website@Rabbid76从这个站点,它说一个属性mat4生成4个顶点属性(每个vec4)。但是我测试了vec4的4个顶点,没有显示任何东西…不,现在我有一个三角形,这个矩阵是摄像机的视图矩阵。哦,好的。。。这不会很有趣。。。请回答最后一个问题,这意味着当我们使用glUniform时,这个函数只在每个顶点上设置矩阵数据,对吗?对不起,这是最后一个问题,我不再打扰你了。我读到通过属性传递变换矩阵可以加速渲染,但是如果我们必须将数据设置到每个顶点,它如何加速渲染呢?@rabbi76我在这篇文章和其他一些网站上读到了它
#version 100

attribute vec3 position;
attribute vec3 color;
attribute vec2 texcoord;

attribute mat4 view;
varying vec3 vColor;
varying vec2 vTex;

uniform mat4 projection;
//uniform mat4 view;
uniform mat4 model;

varying vec2 v_uv;

void main(){
  // mat4 test;
  // test[0] = vec4(1.0, 0.0, 0.0, 0.0);
  // test[1] = vec4(0.0, 1.0, 0.0, 0.0);
  // test[2] = vec4(0.0, 0.0, 1.0, 0.0);
  // test[3] = vec4(0.0, 0.0, 0.0, 1.0);

  gl_Position = projection * view * model * vec4(position, 1.0);
  vColor = color;
  vTex = texcoord;
}