首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >坐标空间与变换矩阵

坐标空间与变换矩阵
EN

Game Development用户
提问于 2012-12-04 20:26:30
回答 1查看 368关注 0票数 2

我试图从对象空间获取一个对象,并使用这些中间矩阵将其映射到投影空间中:

第一个矩阵(I)是从目标空间转换为惯性空间的矩阵,但由于我的对象在目标空间内没有以任何方式旋转或转换,所以这个矩阵是4x4恒等矩阵。

第二矩阵(W)是将惯性空间转化为世界空间的矩阵,在所有坐标上都是因子a= 14.1的尺度变换矩阵,因为惯性空间原点与世界空间原点重合。

代码语言:javascript
运行
复制
    /a 0 0 0\
W = |0 a 0 0|
    |0 0 a 0|
    \0 0 0 1/

第三个矩阵(C)是从世界空间转化为相机空间的矩阵。这个矩阵是一个平移矩阵,它的平移值为(0,0,10),因为我希望相机位于物体的后面,所以物体必须定位到z轴上的10个单元。

代码语言:javascript
运行
复制
    /1 0 0  0\
C = |0 1 0  0|
    |0 0 1 10|
    \0 0 0  1/

最后,第四个矩阵是投影矩阵(P)。考虑到眼睛位于世界空间的原点,投影平面由z= 1定义,投影矩阵为:

代码语言:javascript
运行
复制
    /1 0 0   0\
P = |0 1 0   0|
    |0 0 1   0|
    \0 0 1/d 0/

其中d是眼睛到投影平面的距离,所以d= 1。

我把它们相乘如下:(P)x)x)x,其中V是列矢量形式的顶点坐标:

代码语言:javascript
运行
复制
    /x\
V = |y|
    |z|
    \1/

得到结果后,将x和y坐标除以w,得到实际屏幕坐标。

显然,我在这里做错了什么或者完全遗漏了一些东西,因为它没有正确的渲染。下面是斯坦福龙的底端的图片:

此外,我应该补充说,这是一个软件渲染器,所以这里没有DirectX或OpenGL的东西。

EN

回答 1

Game Development用户

回答已采纳

发布于 2012-12-04 23:42:58

好的,我已经修好了。按照内森·里德的建议,我用了一个更简单的造型。结果发现眼睛离投影平面太近了。我已经设置了1,000个单位,现在它似乎是正确的渲染。

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

https://gamedev.stackexchange.com/questions/44960

复制
相关文章

相似问题

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