如何从GLTF位置生成顶点正态属性缓冲区? 我正在尝试使用跨产品方法(在JavaScript,从GLTF位置缓冲区中)实现顶点位置的顶点正常生成,但是大多数由此产生的正态被证明为(0,...

问题描述 投票:0回答:0
我期望得到的是类似于thisImage

的东西,但我现在真正得到的是

我尝试更改绕组顺序,但无效。正常化或不进行正常化似乎没有任何区别(但这是由于着色器中的正态分子归一化)。
从我在互联网上看到的内容,数学似乎很好。
我也非常有信心处理所有顶点,因为我以相同的方式生成的切线,结果很好。对我来说,这意味着
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] )

尝试一下,然后查看其余代码是否有效。  但是,不要忘记,如果您在GLTF文件本身中找到正常的人,它们可能比您在这里生成的文件更好,尤其是如果艺术家或搅拌器用户花了一些时间使它们变得漂亮。
    

javascript graphics gltf normals webgpu
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.