的东西,但我现在真正得到的是
我尝试更改绕组顺序,但无效。正常化或不进行正常化似乎没有任何区别(但这是由于着色器中的正态分子归一化)。 从我在互联网上看到的内容,数学似乎很好。 我也非常有信心处理所有顶点,因为我以相同的方式生成的切线,结果很好。对我来说,这意味着
normals[indices[i]] += normal[0]
定期产生0,但我不明白为什么。如果是问题,该怎么办。任何建议都将不胜感激。 FYI:使用WebGPU完成渲染,着色器代码在任何一个正常情况下都没有不同。模型是由Khronos Blender GLTF 2.0 Exporter生成的 为了澄清一下,搅拌机出口商生成的GLTF文件已经包括正常产品,实际上它们可能是艺术家调整的正常质量,其质量比您试图使用此代码进行计算的质量更好。 有原因您不使用所提供的正态吗? 除此之外,此代码确实存在缺陷。 您每个顶点使用3个不同的索引,每个三角形的索引跳跃9个指数,因此需要修复。 您只需要每个顶点使用1个索引,每个三角形3。 该代码最终可能看起来如下:
for (let i = 0; i < indices.length; i += 3) {
const vert0 = vec3.create(
vertices[indices[i] * 3],
vertices[indices[i] * 3 + 1],
vertices[indices[i] * 3 + 2]
)
const vert1 = vec3.create(
vertices[indices[i + 1] * 3],
vertices[indices[i + 1] * 3 + 1],
vertices[indices[i + 1] * 3 + 1]
)
const vert2 = vec3.create(
vertices[indices[i + 2] * 3],
vertices[indices[i + 2] * 3 + 1],
vertices[indices[i + 2] * 3 + 1]
)