通过GLUT库学习OpenGL
来源:互联网 发布:淘宝买药一直是审核中 编辑:程序博客网 时间:2024/06/05 12:50
GLUT(The OpenGL Utility Toolkit),OpenGL实用工具箱,是一个与窗口系统无关的OpenGL编程工具箱. 最早由Mark Robins编写.它实现了一个简单的窗口应用程序接口,使用它可以更加轻松的学习openGL,让我们集中注意力在openGL上,而不必关心所在的窗口系统.GLUT提供了可移植的API,所以你可以编写出在所有PC和工作站平台上都可以运行的OpenGL程序.
GLUT是设计用来构建小型的OpenGL程序.GLUT非常适合用来学习OpenGL和开发简单的OpenGL程序.GLUT不是一个功能完备的工具箱.所以需要复杂用户接口的大型应用最好是用与窗口系统有关的工具箱.
The current version of the GLUT API is 3.The current source code distribution is GLUT 3.7.
The toolkit supports:
- Multiple windows for OpenGL rendering
- Callback driven event processing
- Sophisticated input devices
- An 'idle' routine and timers
- A simple, cascading pop-up menu facility
- Utility routines to generate various solid and wire frame objects
- Support for bitmap and stroke fonts
- Miscellaneous window management functions
GLUT
GLUT的WIN32(Windows 95,98,Me,NT,2000,XP)版本由by Nate Robins编写,现在的版本是3.7.6.
GLUT FOR WIN32
简单的GLUT程序构造:(利用SOURCE INSIGHT 3.5 生成)
程序的大致过程如下:
- GLUT初始化和设置显示模式
- 初始化窗口信息
- 注册回调函数
- 进入事件处理循环
- 定义回调函数
GLUT初始化:
GLUTAPI void GLUTAPIENTRY glutInit(int *argcp, char **argv);
设置显示模式:
GLUTAPI void GLUTAPIENTRY glutInitDisplayMode(unsigned int mode);
初始化窗口信息:
GLUTAPI void GLUTAPIENTRY glutInitWindowSize(int width, int height);
GLUTAPI void GLUTAPIENTRY glutInitWindowPosition(int x, int y);
GLUTAPI int GLUTAPIENTRY glutCreateWindow(const char *title);
GLUTAPI void GLUTAPIENTRY glutInitWindowPosition(int x, int y);
GLUTAPI int GLUTAPIENTRY glutCreateWindow(const char *title);
/* and so on */
注册回调函数:
GLUTAPI void GLUTAPIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void));
GLUTAPI void GLUTAPIENTRY glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height));
GLUTAPI void GLUTAPIENTRY
GLUTAPI void GLUTAPIENTRY glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height));
GLUTAPI void GLUTAPIENTRY
glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
GLUTAPI void GLUTAPIENTRY glutIdleFunc(void (GLUTCALLBACK *func)(void));
GLUTAPI void GLUTAPIENTRY glutIdleFunc(void (GLUTCALLBACK *func)(void));
/* and so on */
进入事件处理循环
GLUTAPI void GLUTAPIENTRY glutMainLoop(void);
定义回调函数
/* 你的回调函数 */
实例,来自于DEV C++ 的默认的GLUT工程。
/* * FreeGLUT Shapes Demo * * Written by Nigel Stewart November 2003 * * This program is test harness for the sphere, cone * and torus shapes in FreeGLUT. * * Spinning wireframe and smooth shaded shapes are * displayed until the ESC or q key is pressed. The * number of geometry stacks and slices can be adjusted * using the + and - keys. */#include <Windows.h>#include <math.h>#include <stdlib.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")static int slices = 16;static int stacks = 16;/**//* GLUT callback Handlers */static void resize(int width, int height){ const float ar = (float) width / (float) height; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity() ;}static void display(void){ const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; const double a = t*90.0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(1,0,0); glPushMatrix(); glTranslated(-2.4,1.2,-6); glRotated(60,1,0,0); glRotated(a,0,0,1); glutSolidSphere(1,slices,stacks); glPopMatrix(); glPushMatrix(); glTranslated(0,1.2,-6); glRotated(60,1,0,0); glRotated(a,0,0,1); glutSolidCone(1,1,slices,stacks); glPopMatrix(); glPushMatrix(); glTranslated(2.4,1.2,-6); glRotated(60,1,0,0); glRotated(a,0,0,1); glutSolidTorus(0.2,0.8,slices,stacks); glPopMatrix(); glPushMatrix(); glTranslated(-2.4,-1.2,-6); glRotated(60,1,0,0); glRotated(a,0,0,1); glutWireSphere(1,slices,stacks); glPopMatrix(); glPushMatrix(); glTranslated(0,-1.2,-6); glRotated(60,1,0,0); glRotated(a,0,0,1); glutWireCone(1,1,slices,stacks); glPopMatrix(); glPushMatrix(); glTranslated(2.4,-1.2,-6); glRotated(60,1,0,0); glRotated(a,0,0,1); glutWireTorus(0.2,0.8,slices,stacks); glPopMatrix(); glutSwapBuffers();}static void key(unsigned char key, int x, int y){ switch (key) { case 27 : case 'q': exit(0); break; case '+': slices++; stacks++; break; case '-': if (slices>3 && stacks>3) { slices--; stacks--; } break; } glutPostRedisplay();}static void idle(void){ glutPostRedisplay();}const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat high_shininess[] = { 100.0f };/**//* Program entry point */int main(int argc, char *argv[]){ glutInit(&argc, argv); glutInitWindowSize(640,480); glutInitWindowPosition(10,10); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("FreeGLUT Shapes"); glutReshapeFunc(resize); glutDisplayFunc(display); glutKeyboardFunc(key); glutIdleFunc(idle); glClearColor(1,1,1,1); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glutMainLoop(); return EXIT_SUCCESS;}运行效果如下:
0 0
- 通过GLUT库学习OpenGL
- OpenGL--GLUT 学习
- OpenGL&GLUT入门学习
- OpenGL学习之windows下安装opengl的glut库
- OPENGL GLUT库
- opengl :glut库
- OpenGL--GLUT 学习1
- (Ubuntu)安装OpenGL/Glut库
- OpenGL(2) glut库测试
- ubuntu配置openGL glut库
- [OpenGL] glut库的安装
- 【OpenGL】glut
- openGL--GLUT
- 使用GLUT for win32 学习openGL
- Opengl GLUT工具开发 学习笔记 001
- 使用GLUT for win32 学习openGL
- windows下安装opengl的glut库
- windows下安装opengl的glut库
- Statement vs PreparedStatement,孰优孰劣,由你定夺。
- javscript继承第二种实现call方法
- Hadoop之SequenceFile 详解
- ExtJS4学习笔记四--图片上传
- 网络营销推广实战宝典 2.3 软文推广
- 通过GLUT库学习OpenGL
- 对快递100的智能查快递功能的简单分析
- ExtJS4学习笔记五--面板使用
- ExtJS4学习笔记六--一些小知识点
- gVim 基础配置
- sql中的with as
- 软件的设计,就像你要放的一个屁...
- ExtJS4学习笔记八--Template的使用
- source insigh宏=文件保存前清理空白行