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

本文共 1527 字,大约阅读时间需要 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/

你可能感兴趣的文章
MySQL 高可用性之keepalived+mysql双主
查看>>
mysql 默认事务隔离级别下锁分析
查看>>
Mysql--逻辑架构
查看>>
MySql-2019-4-21-复习
查看>>
mysql-5.7.18安装
查看>>
MySQL-Buffer的应用
查看>>
mysql-cluster 安装篇(1)---简介
查看>>
mysql-connector-java各种版本下载地址
查看>>
mysql-EXPLAIN
查看>>
mysql-group_concat
查看>>
MySQL-redo日志
查看>>
MySQL-【1】配置
查看>>
MySQL-【4】基本操作
查看>>
Mysql-丢失更新
查看>>
Mysql-事务阻塞
查看>>
Mysql-存储引擎
查看>>
mysql-开启慢查询&所有操作记录日志
查看>>
MySQL-数据目录
查看>>
MySQL-数据页的结构
查看>>
MySQL-架构篇
查看>>