在不渲染的情况下对模型应用转换

本文关键字:模型 应用 转换 情况下 | 更新日期: 2023-09-27 18:11:01

我正在为图形类构建光线追踪器,我们需要做的部分设置是在投射光线之前将模型缩放到世界空间。我已经建立了矩阵所需要的世界。然而,我第一次尝试转换的结果是在模型的边界框中改变,但在VertexBuffer中没有一个顶点。

这是我的第一次尝试:

foreach (ModelBone b in model.Bones)
{
   // apply the model transforms and the worldMatrix transforms to the bone
   b.Transform = model.Root.Transform * worldMatrix;
}

我也试过设置在模型网格中发现的效果值,就像每个模型绘制教程显示的那样,但这是无济于事的。

是否有其他方法我应该尝试转换模型?

在不渲染的情况下对模型应用转换

b。Transform = root * world;没有考虑骨头本身的任何数据

可能需要:b. transform = root * b * world;

顶点缓冲区中的数据应该在游戏/应用的整个生命周期中保持不变。所发生的是,原始的(未改变的)顶点数据在顶点着色器中每帧都被你通过效果发送的任何不同的世界矩阵重新转换。

通常是这样的:

//class scope fields
Matrix[] modelTransforms;
Matrix worldMatrix;
//in the loadContent method just after loading the model
modelTransforms - new Matrix[model.Bones.Count];
model.CopyAbsoluteTransformsTo(modelTransforms);//this line does what your foreach does but will work on multitiered hierarchy systems
//in the Update methos
worldMatrix = Matrix.CreateScale(scale);
boundingBox.Min *= scale;
boundingBox.Max *= scale
//raycast against the boundingBox here
//in the draw call
eff.World = modelTransforms[mesh.ParentBone.Index] * worldMatrix;