微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vulkan Uniform 中的数组问题

如何解决Vulkan Uniform 中的数组问题

首先,当我通过一个 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);

我明白

enter image description here

什么时候

outColor = vec4(ubo.lightPos[1],1.0);

我明白

enter image description here

当我改变时结果不会改变

alignas(32) glm::vec3 lightPos[2] 

alignas(16) glm::vec3 lightPos[2]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。