首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保存模型矩阵的标准位置是什么?

保存模型矩阵的标准位置是什么?
EN

Stack Overflow用户
提问于 2014-06-12 19:03:55
回答 2查看 862关注 0票数 1

我有一个"3D引擎“,它有一个单一的模型矩阵。我所有的3D对象都使用这个模型矩阵(用于转换)。对于每个对象,我在使用它之前都会设置模型标识。到目前为止,它似乎运行得很好,而且和预期的一样。

但现在我突然想知道我是否有设计缺陷。每个3D对象(基本对象)是否应该有自己的模型矩阵?这样做有什么价值(每个3D对象的模型矩阵)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-12 19:58:31

这就是模型矩阵的意义所在。它是从对象空间(其本地坐标系)到世界空间(共享坐标系)所绘制的每个对象的可选转换。您可以定义您的对象,使它们的位置已经在世界空间中,然后就不需要模型矩阵了(如果您使用身份模型矩阵,就像您正在做的那样)。

GL为此使用了一个矩阵堆栈(至少在历史上是这样的),从技术上讲,这就是它使用列主矩阵和后乘法的原因。这允许您在绘制对象之前/之后将本地坐标转换推送/弹出到堆栈的顶部中,同时将很少更改的其他转换(如world->eye (视图矩阵)或眼睛>剪辑(投影矩阵))保持不变。

票数 6
EN

Stack Overflow用户

发布于 2014-06-12 23:28:18

在单独的回答中详细说明,因为评论太短,但安东的回答是正确的。

例如,从两个不同的艺术家那里加载两个3d网格。1-1

第一个艺术家假设模型空间中的一个单位是1米,而另一个艺术家假设1英寸。

所以,你加载了一个由第一个艺术家做的汽车网,它可能有3个单位长;一个香蕉网,然后是8个单位长。

另外,第一位艺术家决定把车网的点的原点放在它的中间,而画香蕉网的艺术家把香蕉放在X轴上,水果的底部放在X=2000点上。

那么,,你如何在你的3d世界中展示这两个网格呢?,你会有一个香蕉,它的长度几乎是你的车的三倍吗?这完全没有意义。

你要怎么把它们放在一起?或者你要怎么把他们躺在飞机上?由于局部坐标系是完全随机的,所以不可能以连贯的方式翻译你的物体。

这就是模型->世界矩阵出现的地方。

它允许你指定一个每个模型的转换,把所有的模型带入一个“共享”的、唯一的、连贯的空间--世界空间。

例如,您可以翻译这两个模型,以便它们的起源位于“一个角落”,以及第一个顶点中的所有网格顶点。此外,如果您的世界空间使用“米”,您将需要缩放香蕉网0.0254,以使它的大小,以及米。另外,也许你想旋转香蕉,让它躺在Y轴上而不是X轴上。

在游戏结束时,对于您的世界中的每个“唯一模型”,您都会有其相关的模型矩阵,并在绘制它时使用它。

另外:对于模型的每个实例,您可以考虑应用额外的局部转换(在世界坐标中)。例如,你想把汽车模型翻译到世界上的某个地方。所以与其拥有

代码语言:javascript
运行
复制
(Model space) --> Model matrix ---> (World space) ---> World matrix ---> (Final world space)

你可以把这两个矩阵相乘,并且只有一个矩阵,它直接把模型空间中的点带到最终的世界空间。

这一点有点没有意义,因为在任何适当的资产管道中,你首先要做的就是把所有的模型都放在一个协调的坐标系中,只需做一个例子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24192047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档