博客
关于我
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/

你可能感兴趣的文章
Objective-C实现n body simulationn体模拟算法(附完整源码)
查看>>
Objective-C实现naive string search字符串搜索算法(附完整源码)
查看>>
Objective-C实现natural sort自然排序算法(附完整源码)
查看>>
Objective-C实现nested brackets嵌套括号算法(附完整源码)
查看>>
Objective-C实现nevilles method多项式插值算法(附完整源码)
查看>>
Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
查看>>
Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现not gate非门算法(附完整源码)
查看>>
Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
查看>>
Objective-C实现n皇后问题算法(附完整源码)
查看>>
Objective-C实现OCR文字识别(附完整源码)
查看>>
Objective-C实现odd even sort奇偶排序算法(附完整源码)
查看>>
Objective-C实现page rank算法(附完整源码)
查看>>
Objective-C实现PageRank算法(附完整源码)
查看>>
Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
查看>>
Objective-C实现perfect cube完全立方数算法(附完整源码)
查看>>
Objective-C实现PNG图片格式转换BMP图片格式(附完整源码)
查看>>
Objective-C实现pollard rho大数分解算法(附完整源码)
查看>>