|
《古月》新的3D渲染器将会提供固定管线与可编程管线两种版本,其中固定管线模式使用OpenGL兼容模式、可编程管线使用OpenGL核心模式。为了在最大程度将双版本的处理统一,我方使用了类似可编程管线中的手法:不再使用OpenGL/GLU所提供的矩阵管理与变换函数,固定管线仅在最后一刻设置GL_PROJECTION与GL_MODELVIEW矩阵并渲染。其中被接管的函数包括:gluPerspective、glOrtho/gluOrtho、glFrustum、gluLookAt、glPushMatrix、glPopMatrix等等。
见如下一段代码:
bool OpenGLCompatibilityRender:irectRender(const glm::mat4 &ltw,Renderable *obj)
{
if(!obj)return(false);
ClearMatrix(GL_PROJECTION);
glLoadMatrixf(glm::value_ptr(projection_matrix));
ClearMatrix(GL_MODELVIEW);
glLoadMatrixf(glm::value_ptr(modelview_matrix*ltw));
/*//可以不设置PROJECTION,只在MODELVIEW里设置用以下方式
//ClearMatrix(GL_PROJECTION);
//ClearMatrix(GL_MODELVIEW);
//glLoadMatrixf(p);
//glMultMatrixf(m*ltw);
*/
bool result=DirectRender(obj);
ClearMatrix(GL_PROJECTION);
ClearMatrix(GL_MODELVIEW);
return(result);
} |
|