C# XNA 4.0:如何获取模型的切线和副法线?

问题描述 投票:0回答:1

我有这个代码片段,我曾经尝试获取这些代码:

VertexBuffer vtxBuffer = new VertexBuffer(graphics.GraphicsDevice, typeof(VertexPositionNormalTextureTangentBinormal), meshPart.VertexBuffer.VertexCount, BufferUsage.WriteOnly);
VertexPositionNormalTextureTangentBinormal[] data = new VertexPositionNormalTextureTangentBinormal[meshPart.VertexBuffer.VertexCount];
meshPart.VertexBuffer.GetData<VertexPositionNormalTextureTangentBinormal>(data);

但是,我最终遇到了错误:

“该数组的大小不适合所请求的数据量。”

因此,我尝试调试问题并在某一时刻做到了这一点:

VertexBuffer vtxBuffer = new VertexBuffer(graphics.GraphicsDevice, typeof(VertexPositionNormalTexture), meshPart.VertexBuffer.VertexCount, BufferUsage.WriteOnly);
VertexPositionNormalTexture[] data = new VertexPositionNormalTexture[meshPart.VertexBuffer.VertexCount];
meshPart.VertexBuffer.GetData<VertexPositionNormalTexture>(data);

我将

VertexPositionNormalTextureTangentBinormal
替换为
VertexPositionNormalTexture
中提琴!我没有得到同样的错误!但我确实得到了:

'当前顶点声明不包括当前顶点着色器所需的所有元素。 Tangent0 丢失。'


我不确定这是模型问题还是.FBX管道问题还是......代码问题?

  • 如果这是一个模型问题,我不确定如何让 Blender 导出切线和副法线,这是某种适当的扩展?
  • 如果这是管道问题,我想看看是否有管道代码可以解决这个问题。
  • 如果这是代码问题,我想要......某种解决方案。

无论如何,我想知道是否至少是上述问题之一,谢谢!


我重新导出了启用切线空间的 FBX 模型,甚至再次使用了不同的 Blender 扩展(更好的 FBX 导出器),但它仍然无法获取 struct

VertexPositionNormalTextureTangentBinormal
的对象的信息作为错误最终还是这样:

“该数组的大小不适合所请求的数据量。”

它很可能是模型或管道问题...尽管对于管道我有点困惑,因为

VertexElementUsage.Tangent
VertexElementUsage.Binormal
存在,尽管完全有可能这些只是为了...其他管道.

c# xna xna-4.0
1个回答
0
投票

检查型号,转到

Content Processor
,然后将
Generate Tangent Frames
设置为
True

我简直不敢相信自己...该死...

© www.soinside.com 2019 - 2024. All rights reserved.