OpenGL ES 在 iOS 平台纹理贴图倒置的问题研究
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
(一大疑惑,为什么android上关于OpenGL ES 开发的资料很多,确涉及该主题关键字的搜索结果了了无几呢?!不会是关键字不对吧......)
初步分析,
一是有可能是没倒,可能我搞错了三维中的正立方向;
二是确实倒了,可能由于 QuarzCore 库在 iOS 的UIKit空间中绘制本身存在的倒置问题导致;
QuarzCore 库在 iOS 的UIKit空间中绘制本身存在的倒置问题,其解决有两种方案:
1、将图片先在临时绘制上下文中翻转绘制,然后再用 QuarzCore 按正常来绘制,这样把一个倒着的图象倒着画,一定会是正着的了,所谓的正倒是指内容;
2、在用 QuarzCore 绘制之前,先把当前上下文倒过来,再绘制,在倒着的画板上,倒着画,画出来的一定是正的,这样正着看就没问题了,但是否需要把上下文再正过来,需要进一步测试;
以上问题,究其根结,是因为在屏幕绘图空间中,就相当于一张画板,UIKit 和 QuarzCore 所选取的 y 轴的原点和方向不同导致的,前者坐标原点在左上角,y 轴正方向从上向下;而 QuarzCore 坐标原点选在左下角,y 轴正方向从下向上;
虽然分析的挺明白,实际试了近一天,各种情况和方法都试了,还是无法在 OpenGL 中正着把图片贴上去。
继续分析,
一是有可能某个细节部位导致,这时真的需要休息一下,否则就是白耽误工夫,人家讲,一个人藏的东西,十个人都找不到,更何况自已藏忘了的呢?@!:)
二是,还有一个关键问题,如果是将渲染缓冲区中图像呈现到视图中时出现的问题,那么几何体应该也是倒着的,但几何体是正着的,说明不是这个问题,而是OpenGL ES往几何体面上贴图时出现的问题。
偿试将纹理贴图倒过来再用,没有达到预期效果。
由于是OpenGL ES内部往上贴图的时侯,贴反了,这个暂时还不知如何去处理,也许通过纹理坐标的变换能解决,但如何变换还不知道。
那么先用Photoshop把图片倒过来,这样一来,OpenGL ES内部往上贴图倒着贴倒立的图片,显示出来就是正的了。
后又想到,纹理坐标最大为1,那么想掉过来的话,那就把 y 坐标用1减,取补,是否可以变换过来呢?
实际测试好像是不行,不过我是直接在着色器中对其进行处理的,看来并不能达到预期目的,还得想想,怎么能实施这一测试方案。