opengl中的glViewport,glOrtho,glFrustum 理解

来源:互联网 发布:离线电子地图标注软件 编辑:程序博客网 时间:2024/05/16 09:41

         在刚使用opengl时,会遇到对opengles中的一些视角等理解,需要用到glViewport,glOrtho,glFrustum 等函数,下面针对这些函数做一些说明


viewport建立视口,是视窗函数,描述opengl渲染出的图像如何映射到windows或其他平台提供的窗口上(surface,Android下)。

              函数原型void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)

              x,y 指定视口的左下角的坐标,width,height,视口的宽和高。

              映射关系:

xw = ( xnd + 1 ) width/2 + xyw = ( ynd + 1 ) height/2 + y             

                其中Xw,Yw是映射到窗口上的坐标,Xnd,Ynd是Opengl中的渲染结果坐标。相对opengl的坐标系(右手坐标系);

               举例说明:如在opengl中渲染一个矩形。

             

                    如果使用默认的 glviewport(0,0,320,240),    假定采用的windows窗口 width=320,height=240,其结果就是渲染了一幅填充整个屏幕的矩形,

                  

                   整个图形都变形了,


                  1、计算 x的调整比例x= (VWidth - VHeight) / 2

                  2、调整长宽比例,将width替换成Height,保持比例。

                  如果height>width,则调整height

   

void makeCenterAspectiong(ESContext *esContext){int x = 0;int y = 0;int ViewWidth = esContext->width;int ViewHeight = esContext->height;if (ViewWidth > ViewHeight){x= (int)((ViewWidth - ViewHeight) / 2);ViewWidth = ViewHeight;}else{y= (int)((ViewHeight - ViewWidth) / 2);ViewHeight = ViewWidth;}glViewport(x, y, ViewWidth, ViewHeight);}
              

 

0 0
原创粉丝点击