gpt4 book ai didi

c# - 使用 World 矩阵阵列的 XNA 模型实例化

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:50 25 4
gpt4 key购买 nike

我正试图在我的游戏中即兴创作某种硬件实例。我希望只用一个 Draw Call 绘制多棵树。

到目前为止,我已经建立了一个包含模型、纹理和矩阵数组的类。每个矩阵对应于游戏世界中一棵树的位置。

我已决定在我的类和我的着色器中使用 50 个对象副本作为硬编码限制。

我确信生成的矩阵是正确的。对多个绘制调用使用基本效果并在它们之间切换世界矩阵确实会在正确位置产生正确数量的树。

我已经尝试了一种在黑暗中拍摄的方法:

float4x4 View;
float4x4 Projection;
float4x4 World[50];

...

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
VertexShaderOutput output[50];

for (int i=0; i<50; i++)
{
float4 worldPosition = mul(input.Position, World[i]);
float4 viewPosition = mul(worldPosition, View);
output[i].Position = mul(viewPosition, Projection);
output[i].texCoord = input.texCoord;

return output[i];
}

}

令我惊讶的是,这实际上编译了,更令我惊讶的是,它并没有融化我的 GPU。

不足为奇的是,这只绘制了一棵树,即第一棵树,因为只要它碰到“return”关键字,循环就会结束,正如任何理智的人所期望的那样。

我已经尝试使用 google-fu 技巧来搜索此类问题,但大部分结果都涉及 C++ 代码(我使用的是 C# + XNA),他们解决问题的方法基本上是收集所有需要的模型顶点并转发所有这些,作为一个用一个世界矩阵位置绘制的巨大模型。

是否有一种可靠的方法可以在着色器上使用世界矩阵数组绘制一个模型,或者我必须收集所有顶点数据并以这种方式对其进行批处理吗?

最佳答案

XNA 有一整部分专门用于硬件实例化。您将需要能够编写自己的着色器,这并不难学。您基本上为着色器提供了一组矩阵和一个几何网格,着色器将为每个世界矩阵创建一次网格。此方法还允许您将多个替代世界矩阵传递给每个实例,例如替代纹理坐标。

关于c# - 使用 World 矩阵阵列的 XNA 模型实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com