请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 1762|回复: 2

为什么Klayge中DX和OGL投影变换和别的引擎不一样? [复制链接]

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2011-11-15
积分
1304
发表于 2017-5-15 17:43:32 |显示全部楼层
  1. Camera.cpp文件81行
  2. Camera::ProjParams函数中
  3. 对OGL投影矩阵做了如下处理
  4. proj_mat *= MathLib::scaling(1.0f, 1.0f, 2.0f) * MathLib::translation(0.0f, 0.0f, -1.0f);
  5. 但是在KFL的数学函数中
  6. Math.cpp文件962行
  7. perspective_fov_lh函数里,好像用的是相同的处理
  8. 要是没查错,DX和OGL并不是一样的,也并不是*2-1就行的吧?为什么Klayget这么处理就可以了?
  9. 请教下原理。
复制代码

Rank: 16Rank: 16Rank: 16Rank: 16

注册时间
2010-7-23
积分
2911
发表于 2017-5-15 21:27:21 |显示全部楼层
D3D的NDC空间是扁box, z在[0,1]之间, OGL是cube,z在[-1,1]之间。

这个转换是对的,直接修改proj_mat的某行某列也可以达到效果,结果都一样吧

另外印象在坛子里看到vulkan也用[0,1]了,因为方便,读写depthbuffer[0,1],再到NDC都不需要额外转了。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2011-11-15
积分
1304
发表于 2017-5-15 22:02:57 |显示全部楼层
好的,算了一下的确是,看起来好像不一样,矩阵代进去就对了,但是这么写看起来好工整,看起来就好像和别人写的不一样似的,学习了。

使用道具 举报

最近看过此主题的会员

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

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-9-20 20:47 , Processed in 0.093647 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部