opengl中的glViewport,glOrtho,glFrustum 理解

本文介绍OpenGL中视口函数glViewport的作用及其参数设置,解释如何通过此函数调整渲染图像与显示窗口间的映射关系,并提供了一个示例来展示如何使渲染内容正确适配不同尺寸的屏幕。

         在刚使用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 + x
yw = ( 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);

}
              

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值