下午,在尝试使用OpenGL显示BMP图片时遇到一个问题:加载的BMP图片在三维下显示倒了。刚开始怀疑是纹理坐标赋反了。仔细检查纹理坐标和顶点坐标的对应,如下代码所示,没有发现错误。
那么就只能怀疑到BMP加载上了。我用一个TBitmap类从一个BMP文件中加载数据,如下所示,也非常简单,不该有问题。
难道是BMP的存储方式和glTexImage2D要求的数据格式不同。忙上网搜了一下,果然BMP在存储时和我们想象的不一样,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。因此上面那段代码只需把for...to改为for...downto即可。
关于BMP的详细格式说明可以参见:http://blog.csdn.net/sjzlxd/archive/2009/02/22/3923907.aspx