博客
关于我
OpenGL显示列表
阅读量:222 次
发布时间:2019-02-28

本文共 1501 字,大约阅读时间需要 5 分钟。

OpenGL显示列表

显示列表概述

OpenGL显示列表是一种通过预先存储并缓存OpenGL函数调用命令的方式绘制图形的技术。与立即模式相比,显示列表能够显著提升绘图性能,尤其是在复杂场景下。

显示列表的优势

显示列表的核心优势在于其高效的命令缓存机制:

  • 性能优化:显示列表能够将相邻的矩阵变换合并为单个矩阵运算,从而加快执行速度。
  • 网络性能:显示列表驻留在服务器端,减轻了通过网络传输绘图命令的负担。

适合显示列表的场景包括:

  • 矩阵运算:如旋转、缩放和投影矩阵的复杂计算。
  • 光栅数据处理:优化光栅数据格式以适应硬件。
  • 材质和光照模型:减少每次材质计算的开销。
  • 纹理处理:统一纹理格式,避免在执行时进行格式转换。
  • 多边形填充模式:预先定义图案,提升填充效率。

创建和执行显示列表

创建显示列表

OpenGL 提供 glNewList()glEndList() 函数来创建显示列表:

  • void glNewList(GLuint list, GLenum mode);:开始创建一个新显示列表,mode 参数可选 GL_COMPILE(仅存储)或 GL_COMPILE_AND_EXECUTE(存储并立即执行)。
  • void glEndList();:标记显示列表的结束。

注意:某些函数如 glDeleteLists()glFeedbackBuffer() 等不能直接存入显示列表。

执行显示列表

调用显示列表的函数:

  • void glCallList(GLuint list);:执行已创建的显示列表。

例子:以下代码创建并执行一个包含三角形绘制的显示列表,并在主循环中重复调用。

void myinit() {    glNewList(listName, GL_COMPILE);    glColor3f(1.0, 0.0, 0.0);    glBegin(GL_TRIANGLES);    glVertex2f(0.0, 0.0);    glVertex2f(1.0, 0.0);    glVertex2f(0.0, 1.0);    glEnd();    glTranslatef(1.5, 0.0, 0.0);    glEndList();    glShadeModel(GL_FLAT);}

管理显示列表

索引管理

  • GLuint glGenList(GLsizei range);:分配 range 个新的显示列表索引。
  • GLboolean glIsList(GLuint list);:检查显示列表索引是否已被占用。
  • void glDeleteLists(GLuint list, GLsizei range);:删除指定范围内的显示列表。

显示列表的嵌套

显示列表支持多级嵌套,允许在一个显示列表中调用另一个显示列表。这种机制特别适合复杂的物体构建:

glNewList(1, GL_COMPILE);glVertex3fv(v1);glEndList();glNewList(2, GL_COMPILE);glVertex3fv(v2);glEndList();glNewList(3, GL_COMPILE);glVertex3fv(v3);glEndList();glNewList(4, GL_COMPILE);glBegin(GL_POLYGON);glCallList(1);glCallList(2);glCallList(3);glEnd();glEndList();

通过这种方式,顶点数据可以被单独管理,而整个三角形可以通过调用显示列表4来绘制。

转载地址:http://srwp.baihongyu.com/

你可能感兴趣的文章
Nginx代理模式下 log-format 获取客户端真实IP
查看>>
Nginx代理解决跨域问题(导致图片只能预览不能下载)
查看>>
Nginx代理访问提示ERR_CONTENT_LENGTH_MISMATCH
查看>>
Nginx代理配置详解
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
Nginx使用proxy_cache指令设置反向代理缓存静态资源
查看>>
Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例
查看>>
nginx反向代理
查看>>
Nginx反向代理
查看>>
nginx反向代理、文件批量改名及统计ip访问量等精髓总结
查看>>
Nginx反向代理与正向代理配置
查看>>
Nginx反向代理及负载均衡实现过程部署
查看>>
Nginx反向代理和负载均衡部署指南
查看>>
Nginx反向代理是什么意思?如何配置Nginx反向代理?
查看>>
nginx反向代理解决跨域问题,使本地调试更方便
查看>>
nginx反向代理转发、正则、重写、负摘均衡配置案例
查看>>
Nginx反向代理配置
查看>>
Nginx启动SSL功能,并进行功能优化,你看这个就足够了
查看>>
nginx启动脚本
查看>>