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
- OpenGL: 一个简单的例子
- 在MFC下使用OpenGL的一个简单的例子
- 基于MFC的OpenGL的一个简单例子
- 在MFC下使用OpenGL的一个简单的例子
- 一个OpenGL ES 的简单使用例子代码
- Cocoa+OpenGL编程(一):一个简单的例子
- 一个OpenGL的小例子
- 一个简单的例子
- 在MFC下使用OpenGL的一个简单的例子(转)
- 在MFC下使用OpenGL的一个简单的例子(基于单文档程序)
- 一个简单的OpenGL程序
- 一个简单的OpenGL程序
- 一个简单的openGL例程
- 一个简单的OpenGL实例
- 一个测试openGL的小例子
- 分析一个别人的qt+opengl例子
- OpenGL Shader简单例子
- openmp 例子:一个简单的OpenMP例子
- 嵌入式开发基础笔记
- 创建透明窗口
- DataNode内幕(一):数据存储和它的小伙伴们
- 判断连通图(并查集 )
- UML之类图
- OpenGL: 一个简单的例子
- unity3d学习笔记(二十)--利用JSON读取和保存游戏数据
- UVa 548 - Tree 二叉树的重建与遍历
- java代码实现的jdk工具native2ascii.exe
- iOS 7 认识 TextKit
- 优秀的 Java 程序员所应该知道的 Java 知识
- 判断三角形类型
- ASIHttprequest的使用
- Set