零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 转场
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 函数
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES GPUImage 使用
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES GLSL 编程
一.glViewport 函数简介
glViewport 是 OpenGL ES 中的一个函数,用于设置绘制区域的大小和位置。glViewport 函数的原型如下:
/*******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES glViewport 函数
//@Time:2023/03/11 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/*******************************************************************************************/
/*
*描述:设置绘制区域的大小和位置
*参数:
* [in] x:左下角位置坐标
* [in] y:左下角位置坐标
* [in] width:绘制区域的宽度
* [in] height:绘制区域的高度
*
*返回值:无
*/
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
其中,参数x、y表示绘制区域的左下角位置坐标,width、height表示绘制区域的宽度和高度。该函数没有返回值。
二.glViewport 函数代码演示
下面是一个简单的使用示例,演示如何使用 glViewport 设置绘制区域:
/*******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES glViewport 函数
//@Time:2023/03/11 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/*******************************************************************************************/
#include <GLES2/gl2.h>
...
// 设置绘制区域为屏幕左上角的四分之一
glViewport(0, 0, SCREEN_W / 2, SCREEN_H / 2);
// 绘制代码
...
上面的代码中,我们使用 glViewport 函数设置绘制区域为屏幕左上角的四分之一。然后进行绘制操作。
三.glViewport 函数注意事项
- 1.glViewport 函数应该在每次改变窗口大小或绘制区域大小时调用。
- 2.绘制区域的坐标系是以左下角为原点,向右为x轴正方向,向上为y轴正方向。
- 3.width、heigh t参数应该设置为正值,否则可能会出现意想不到的错误。
四.glViewport 函数完整案例代码
下面是一个完整的 OpenGL ES 2.0 程序,其中包括了glViewport 函数的使用。
/*******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES glViewport 函数
//@Time:2023/03/11 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/*******************************************************************************************/
#include <GLES2/gl2.h>
#include <EGL/egl.h>
#include <cstdio>
#define SCREEN_W 640
#define SCREEN_H 480
int main()
{
// 初始化EGL
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
EGLint major, minor;
eglInitialize(display, &major, &minor);
// 配置EGL属性
EGLint config_attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NONE
};
// 选择EGL配置
EGLint num_configs;
EGLConfig config;
eglChooseConfig(display, config_attribs, &config, 1, &num_configs);
// 创建EGL上下文
EGLint context_attribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
EGLContext context = eglCreateContext(display, config, EGL_NO_CONTEXT, context_attribs);
// 创建EGL窗口
EGLSurface surface;
EGLint surface_attribs[] = {
EGL_NONE
};
NativeWindowType window = 0; // 这里使用0作为窗口句柄,需要根据实际情况调整
surface = eglCreateWindowSurface(display, config, window, surface_attribs);
// 设置当前上下文和绘制表面
eglMakeCurrent(display, surface, surface, context);
// 设置视口
glViewport(0, 0, SCREEN_W / 2, SCREEN_H / 2);
// 绘制三角形
const GLfloat vertices[] = {
0.0f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
};
GLuint vertex_buffer;
glGenBuffers(1, &vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);
// 交换缓冲区,显示画面
eglSwapBuffers(display, surface);
// 清理资源
glDeleteBuffers(1, &vertex_buffer);
eglDestroySurface(display, surface);
eglDestroyContext(display, context);
eglTerminate(display);
return 0;
}
上述代码中,我们在绘制前使用 glViewport 函数设置绘制区域为屏幕左上角的四分之一。然后进行绘制操作,并最终使用 eglSwapBuffers 交换缓冲区,显示画面。
五.glViewport 函数使用案例
1.IOS 演示效果
IOS OpenGL ES 波浪特效:源码下载
2.Windows OpenGL ES 演示效果
Windows OpenGL ES 波浪特效:源码下载
3.Windows OpenGL 演示效果
Windows OpenGL 波浪特效:源码下载
ChatGPT 3.5 国内中文镜像站免费使用啦
暂无评论内容