问题描述
首先,当我通过一个 lightPos 时一切正常
struct UniformBufferObject {
alignas(16) glm::mat4 model;
alignas(16) glm::mat4 view;
alignas(16) glm::mat4 proj;
alignas(16) glm::vec3 lightColor;
alignas(16) glm::vec3 viewPos;
alignas(16) glm::vec3 lightPos;
};
但是当我将 lightPos 更改为数组时
struct UniformBufferObject {
alignas(16) glm::mat4 model;
alignas(16) glm::mat4 view;
alignas(16) glm::mat4 proj;
alignas(16) glm::vec3 lightColor;
alignas(16) glm::vec3 viewPos;
alignas(32) glm::vec3 lightPos[2];
};
我想我遇到了一些对齐问题。 我将相同的值传递给 lightPos0 和 lightPos1,但是我在片段着色器中得到的值很奇怪
glm::vec3 defaultLightPos1 = {0.0f,0.0f,1.0f};
UniformBufferObject ubo{};
ubo.lightPos[0] = defaultLightPos1;
ubo.lightPos[1] = defaultLightPos1;
//frag shader
layout(binding = 0) uniform UniformBufferObject {
mat4 model;
mat4 view;
mat4 proj;
vec3 lightColor;
vec3 viewPos;
vec3 lightPos[2];
} ubo;
void main() {
outColor = vec4(ubo.lightPos[0/1],1.0);
}
什么时候
outColor = vec4(ubo.lightPos[0],1.0);
我明白
什么时候
outColor = vec4(ubo.lightPos[1],1.0);
我明白
当我改变时结果不会改变
alignas(32) glm::vec3 lightPos[2]
到
alignas(16) glm::vec3 lightPos[2]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)