Direct3d 9 和opengl 纹理映射的差异

之前做了一个程序,基于opengl的,通过一张网格图片来对齐投影机的光路,输出一堆的顶点数据(基于屏幕坐标的)。但是,当我把这些顶点数据加载到Direct3D 9 的游戏程序时,发现同一张图片下,光路竟然没有对齐在相同的物理点上,感觉整张图往右下移位了一点点。好几天的分析,才想起来,之前在看Dx文档时记得好像有讲到这个问题。翻看,

Directly Mapping Texels to Pixels (Direct3D 9)

这一章节。果然如此。在DX上用那些顶点数据之前,需要把顶点的x,y都减去0.5的值(当然,顶点坐标是基于屏幕坐标的!)

这样图片就能完全对上了。

在网上查资料的时候,看到有位朋友说,https://blog.csdn.net/sallybear/article/details/3531127

9.取图不精。在3D绘图里,都要把一张图片上的某部分贴到一个片面上。但是问题来了,在D3D里的图片(纹理)坐标是用float来计的,浮点都是有精度的,当精度不够用时就会出现误差。

其实并不是float精度不够,opengl也是float的。是Direct3D 9的Texel映射原理跟opengl不同造成的。

posted @ 2020-12-26 17:55  slowtech-QQ914100608  阅读(404)  评论(1编辑  收藏  举报