游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: tgtt

请问D3D中的矩阵变换跟OPENGL中的有何区别?

[复制链接]

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2004-10-29 22:44:00 | 显示全部楼层

Re:请问D3D中的矩阵变换跟OPENGL中的有何区别?

我一直猜想D3D是应该与ogl正好相反,但是ogl才和图形学一致,因为ogl采用图形学标准坐标表达方法
和坐标系无关,是因为d3d的坐标表达方法是[x,y,z,1](单行,和书上不同),它将右乘D3D变换距阵
实际上它并没有乘上一个图形学变换距阵(和书上的变换距阵不同).而是乘上了图形学变换距阵的转置距阵
而opengl则和教科书一样,用标准图形学变换距阵右乘[x ; y ; z ; 1],(" ; " 表示换行)
所以两者距阵变换的顺序是反的
用2d绕基准点旋转来举例,图形学变换应为tran[tx,ty]*rot[angel]*tran[-tx,-ty]*[点的坐标]xt,yt为基准点坐标
你可以试一下,ogl的顺序为
        glTranslatef(1.0f,1.0f,0.0f);       
        glRotatef(45,0,0,1);
        glTranslatef(-1.0f,-1.0f,0.0f);
                drawSomthing();
与图形学一致

8

主题

65

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2004-10-30 10:54:00 | 显示全部楼层

Re:请问D3D中的矩阵变换跟OPENGL中的有何区别?

如果物体是以自己的局部坐标系表示,那么就可以省掉第3步,只要写
glTranslatef(1.0f,1.0f,0.0f);
glRotatef(45,0,0,1);
drawSomthing();

是吗?还是省第一步啊?

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2004-10-30 20:02:00 | 显示全部楼层

Re:请问D3D中的矩阵变换跟OPENGL中的有何区别?

省掉前面的步骤
局部坐标是一种思维方式,和全局坐标思想相反

8

主题

65

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2004-10-31 14:13:00 | 显示全部楼层

Re:请问D3D中的矩阵变换跟OPENGL中的有何区别?

这样就是我迷惑的地方啊。自转在ogl里面的写法是
先glTranslatef(1.0f,1.0f,0.0f)
再glRotatef(45,0,0,1)
和你说的不一样啊。


190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2004-10-31 22:09:00 | 显示全部楼层

Re:请问D3D中的矩阵变换跟OPENGL中的有何区别?

我说的是绕基准点转,你可以写到opengl试下,不要忘记loadidentity
你上面说的
从局部看,物体做了旋转,然后平移到(1,1)

从全局看变换距阵T右乘变换局阵R右乘物体顶点坐标

所以说思考顺序相反

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 02:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表