关于glfrustum与hemicube的真实长度的关系
在做radiosity的过程中,碰到一个一直比较纠结的问题是关于glfrustum的nearplane是否应该恰好应该为hemicube的真实的最短边,现在想通说不用。
具体过程:通过设置glulookat和glfrustum为hemicube的side和top设置视图,然后通过glReadBuffer读取存储在frame buffer中的图像,然后存储进入数组colorbuf中,根据colorbuf中存储的值来判断是哪个面gather能量,因为每个gather的面都用唯一的颜色标识。
=>我们通过读取frame buffer中存储的图像,将其切割成winWithHeight份(即正方形的宽或者高),然后读取每一份,识别gather面片。
=>只要hemicube的side或者top的view能够刚好投影,即glfrustum设置在透视图中,不用一定要刚好在hemicube那里,因为一个场景还是划分为winWithHeight份,所以不影响结果。以side view为例,left,right,bottom,top,nearplane,farplane应为 -edgeWidth/2,edgeWidth/2, 0, edgeWidth/2, edgeWidth/2,farplane只要一个大一点的值就行,也就是说在这个glfrustum的左右上下以及nearplane值的比例为hemicube的比例即可,不用一定要恰好在shortest edge上。只要保证glulookat的方向正确,即方向必须垂直于最短边或者平行,在side view的时候;当top view的时候,方向为patch的法线。
这里值得注意的是一个场景还是划分为winWithHeight份,不能划分为太少份,因为如果每一份太大的话,可能包含两个或者多个gather的面,这样结果就不准确了。