关于使用OpenGL的一点心得

    一晃大学就要过完了,也获得了保研资格,便在实验室跟着导师学习,由于实验室需要人做3D方面的内容,就接触到了OpenGL,在使用过程中经历的由画简单的立方体,到读取自己的模型,一路改进学习,也解决了一些问题,读了一些相关的代码,为了以后使用不再犯同样的错,这里做个记录方便以后查阅,也权当学习笔记了。

    首先使用OpenGL需要gl,glu,glaux(这里没说全,具体需要网上查询)等函数库,对于有些gl函数还可能需要glew等函数库。可以将这些头文件放在预编译文件中以方便使用。其次需要对gl绘图进行初始化,这里用的是vs2010建立的mfc工程。既然要画图首先要获得上下文设备环境DC(wnd=GetDlgItem(IDC_RENDER); g_hDC=::GetDC(wnd->m_hWnd);),获得DC后要进行像素格式的设定( if (!bSetupPixelFormat(g_hDC)) MessageBox(NULL,"设定像素格式失败"); )之后再得到RC(g_hRC = glCreateContext(g_hDC);wglMakeCurrent(g_hDC, g_hRC);)然后再设定绘图区域(glViewport()),设定投影方式(glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, .5f ,150.0f);)然后就可以开始画图了(略去设置背景颜色等)。

   画图之前要读3D模型,这里我读的是obj格式的,由于不同的图,内部数据结构不同,导致有些程序可以读这张图却不能读另一张,这里要注意打开obj图,看好内部数据格式在写读图的代码。读完画的过程中注意理解自转与公转的区别,自转是先glTranslatef(0.0f,0.0f,-3000.0f);再glRotatef(g_RotateX,0.0,1.0,0.0);公转这正好相反,其次自转的轴是由obj图的内部坐标决定的,如果不是理想的,应在导出图之前,用作图工具如SolidWorks编辑好原点的位置。还要注意的是绘图坐标系与世界坐标系的理解,世界坐标系是不会变得,原点在窗口中心,水平为x,铅垂为y,垂直屏幕为z,而绘图坐标系一开始与世界坐标系重合,但glTranslatef,glRotatef,glScaled等都可以理解为对画图坐标系的改变,这种改变是通过矩阵运算来实现的,由于矩阵运算的特点,离画图部分越近的,越先被实现,这也是自转与公转产生的原因。

    画完图如果要实现图内部分的分别运动,则要将图分为不同的部分分别画进去进行操作。   

你可能感兴趣的:(OpenGL)