OpenGL: 一个简单的例子

来源:互联网 发布:有人转让我的淘宝店铺 编辑:程序博客网 时间:2024/06/02 23:18

使用GLUT工具包,显示列表绘制一个三角形,根据OpenGL版本判定使用基本的glBegin,glEnd方法,还是glVertexPointer,glDrawArrays方法。

#include <Windows.h>#include <gl/GL.h>#include <gl/GLAux.h>#include <gl/GLU.h>#include <gl/glut.h>#pragma comment(lib, "OpenGL32.lib")#pragma comment(lib, "GLAux.lib")#pragma comment(lib, "GLU32.lib")#pragma comment(lib, "GLut32.lib")#include <string>#include <sstream>#include <assert.h>static const int QUIT_VALUE(99);GLuint listID;static void display(){glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f, 0.0f, -4.0f);glCallList(listID);glutSwapBuffers();assert(glGetError() == GL_NO_ERROR);}static void reshape(int w, int h){glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(50, (double)w / (double)h, 1.0, 10.0);glMatrixMode(GL_MODELVIEW);assert(glGetError() == GL_NO_ERROR);}static void mainMenuCB(int value){if (value == QUIT_VALUE){exit(0);}}static void init(){glDisable(GL_DITHER);std::string ver((const char*)glGetString(GL_VERSION));assert(!ver.empty());std::istringstream verStream(ver);int major, minor;char dummySep;verStream >> major >> dummySep >> minor;const bool useVertexArrays = ((major >= 1) && (minor >= 1));const GLfloat data[] = {-1.0f, -1.0f, 0.0f,1.0f, -1.0f, 0.0f,0.0f, 1.0f, 0.0f};if (useVertexArrays){glEnable(GL_VERTEX_ARRAY);glVertexPointer(3, GL_FLOAT, 0, data);}listID = glGenLists(1);glNewList(listID, GL_COMPILE);if (useVertexArrays){glDrawArrays(GL_TRIANGLES, 0, 3);}else{glBegin(GL_TRIANGLES);glVertex3fv(&data[0]);glVertex3fv(&data[3]);glVertex3fv(&data[6]);glEnd();}glEndList();assert(glGetError() == GL_NO_ERROR);glutDisplayFunc(display);glutReshapeFunc(reshape);int mainMenu = glutCreateMenu(mainMenuCB);glutAddMenuEntry("Quit", QUIT_VALUE);glutAttachMenu(GLUT_RIGHT_BUTTON);}int main(int argc, char **argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);glutInitWindowPosition(100, 100);glutInitWindowSize(300, 300);glutCreateWindow("Simple Example");init();glutMainLoop();glDeleteLists(listID, 1);return 0;}
运行效果如下:


0 0
原创粉丝点击