《高效学习OpenGL》 之 显示列表实例 glCallList(),glGenLists(),glNewList(),glEndList()
来源:互联网 发布:招聘网络兼职的广告语 编辑:程序博客网 时间:2024/05/22 00:37
#include <GL/glut.h>#include <stdio.h>#include <math.h>#include <stdlib.h>#define PI_ 3.14159265358979323846GLuint theTorus;/* Draw a torus */static void torus(int numc, int numt)//显示列表只能包含OpenGL函数{ int i, j, k; double s, t, x, y, z, twopi; twopi = 2 * PI_; for (i = 0; i < numc; i++) { glBegin(GL_QUAD_STRIP); for (j = 0; j <= numt; j++) { for (k = 1; k >= 0; k--) { s = (i + k) % numc + 0.5; t = j % numt; x = (1+.1*cos(s*twopi/numc))*cos(t*twopi/numt); y = (1+.1*cos(s*twopi/numc))*sin(t*twopi/numt); z = .1 * sin(s * twopi / numc); glVertex3f(x, y, z); } } glEnd(); }}/* Create display list with Torus and initialize state */static void init(void)//创建了一个绘制圆环面的显示列表{ theTorus = glGenLists (1);//glGenLists()唯一的标识一个显示列表 glNewList(theTorus, GL_COMPILE);//用于对显示列表进行定界。第一个参数是一个整形索引值,由glGenLists()指定 torus(8, 25); glEndList(); glShadeModel(GL_FLAT); glClearColor(0.0, 0.0, 0.0, 0.0);}/* Clear window and draw torus */void display(void){ glClear(GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glCallList(theTorus);//执行显示列表所存储的函数 glFlush();}/* Handle window resize */void reshape(int w, int h){ glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30, (GLfloat) w/(GLfloat) h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);}/* Rotate about x-axis when "x" typed; rotate about y-axis when "y" typed; "i" returns torus to original view */void keyboard(unsigned char key, int x, int y){ switch (key) { case 'x': case 'X': glRotatef(30.,1.0,0.0,0.0); glutPostRedisplay();//使glutMainLoop()函数调用display()函数 break; case 'y': case 'Y': glRotatef(30.,0.0,1.0,0.0); glutPostRedisplay(); break; case 'i': case 'I': glLoadIdentity();//恢复初始模型矩阵 gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); glutPostRedisplay(); break; case 27: exit(0); break; }}int main(int argc, char **argv){ glutInitWindowSize(200, 200); glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutCreateWindow(argv[0]); init(); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutDisplayFunc(display); glutMainLoop(); return 0;}
0 0
- 《高效学习OpenGL》 之 显示列表实例 glCallList(),glGenLists(),glNewList(),glEndList()
- 高效学习OpenGL之显示列表实例glCallList(),glGenLists(),glNewList(),glEndList()
- glNewList,glEndList 用于创建和替换一个显示列表函数原型
- 《高效学习OpenGL》 之 无法再显示列表中存储的函数
- 《高效学习OpenGL》 之 管理显示列表索引 glIsList(),glDeleteLists(),glGetIntegerv()
- 《高效学习OpenGL》 之 执行多个显示列表 glListBase(), glCallLists()
- 高效学习OpenGL之执行多个显示列表glListBase(),glCallLists()
- OpenGL 学习 显示列表
- OpenGL之显示列表
- OpenGL学习笔记:显示列表
- OpenGL学习笔记 显示列表
- OpenGL学习十二:显示列表
- 《高效学习OpenGL》 之 过滤
- OpenGL入门学习之八——使用显示列表
- 《高效学习OpenGL》之 openGL工作流程
- 《高效学习OpenGL》之 openGL绘图流程
- 《高效学习OpenGL》之 openGL句法
- 《高效学习OpenGL》之 openGL状态变量
- 日记 nand驱动移植简介
- 寂寞是爱永远的主题
- 4年之后我们又相见了
- 为一个不爱的人难过太不值了
- 将Android和iOS设备屏幕映射到电脑屏幕工具
- 《高效学习OpenGL》 之 显示列表实例 glCallList(),glGenLists(),glNewList(),glEndList()
- Mac之Git/GitHub使用(1)——Set up Git
- 数字图像处理—采样和量化
- ECoMark Platform搭建
- 树的直径,树的重心,树的分冶
- The current branch is not configured for pull No value for key branch.master.merge found in configur
- poj 2677 Tour(双调欧几里德旅行商问题,dp)
- EASY_PAT_ADVANCED LEVEL 1008_简单的面向对象 队列的使用
- UVa11127 - Triple-Free Binary Strings