|
各位高手,我想做一个飞行器的红外辐射特性仿真,其中需要计算太阳对飞行器的热辐射,我考虑可以用到OpenGL的光照来加速计算。
我的思路如下:
(1)首先设置一个方向性光源,模拟太阳光,同时此光源只有红光强度为1的漫散射光成分,其它光成分为(0.0,0.0,0.0);
(2)然后将飞行器划分为若干面元,对于每个面元利用材质设置中的发射光的GB分量对面元进行编号,R分量设 为0:例如面元1表示为glMaterialfv(GL_FRONT,GL_EMISSION,(0.0,0.0,0.01)),面元2为(0.0,0.0,0.02)等等。同时材质的环境光和镜面光设为(0.0,0.0,0.0),材质的散射光设为(1.0,0.0,0.0)。同时根据每个面元的三个顶点设置好面元的法线;
(3)光照模型设置中将整个场景的环境光设为(0.0,0.0,0.0);着色模式设为GL_FLAT;
(4)绘制场景。
根据《OpenGL编程指南》中“光照的数学知识”一节可知,在上述设置下,光照应该只对R分量产生影响,对GB分量没有影响。也就是说可以根据颜色缓冲区中像素的GB分量判断出哪个面元遭到了太阳辐射,同时R分量就是该面元法线与太阳光夹角的余弦值。
可问题就出在从颜色缓冲区读出的GB分量并不是原先的编号值,无法建立起与面元的对应关系。不知道问题是出在光照本身;还是出在OpenGL自身对颜色的编码处理机制,是否经过了什么映射机制?OpenGL中整数表示的颜色与单精度浮点数表示的颜色之间到底是怎么对应的?有没有确切的映射关系?
[em24] |
|