[英]How much data can one send from vertexshader to geometry/fragmentshader? (With blocks)
[英]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.