簡體   English   中英

如何將矩陣數組傳遞給VertexShader?

[英]How can I pass an array of matrices to a VertexShader?

我正在嘗試學習如何使用OpenGL,但是在嘗試將矩陣數組傳遞給VertexShader時遇到了問題。 我認為問題出在VertexShader中,因為似乎將modelvalue中的值正確傳遞給了模型的組件,但是由於某種原因,最后只繪制了我創建的三個立方體之一。 這是主要代碼。

glm::mat4 model[3];
    GLint ModelLocation = glGetUniformLocation(MyShader.program, "model");
    vector<GLfloat> modelvalue;
    const int n = int(sizeof(model[0]) / sizeof(GLfloat));

    for (int i = 0; i < 3; i++) {
        model[i] = glm::translate(model[i], cubePositions[i]);

        for (int j = 0; j < n; j++) {
            modelvalue.push_back(glm::value_ptr(model[i])[j]);
        }

    }
    glUniformMatrix4fv(ModelLocation, 3, GL_FALSE, &modelvalue[0]);

VertexShader:

   #version 400 core
  layout (location = 0) in vec3 Position;
  layout (location = 1) in vec2 texCoord;
  out vec2 TexCoord;
  out vec4 position0;
  out vec4 position1;
  out vec4 position2;
  uniform mat4 model[3];
  uniform mat4 view;
  uniform mat4 projection;
  void main()
 {   
position0 = projection * view * model[0] * vec4(Position,1.0f);
position1 = projection * view * model[1] * vec4(Position,1.0f);
position2 = projection * view * model[2] * vec4(Position,1.0f);
TexCoord = vec2(texCoord.x,1-texCoord.y);
 }

和FragmentShader:

   #version 400 core

   layout (location = 0) in vec3 Position;
   layout (location = 1) in vec2 texCoord;


  out vec2 TexCoord;
  out vec4 position0;
  out vec4 position1;
  out vec4 position2;
  uniform mat4 model[3];
  uniform mat4 view;
  uniform mat4 projection;
  void main()
  {   
position0 = projection * view * model[0] * vec4(Position,1.0f);
position1 = projection * view * model[1] * vec4(Position,1.0f);
position2 = projection * view * model[2] * vec4(Position,1.0f);
TexCoord = vec2(texCoord.x,1-texCoord.y);
  }

統一塊可能會讓您感興趣。 它們本質上是包含統一值數組的緩沖對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM