在刚使用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);
}

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

被折叠的 条评论
为什么被折叠?



