GL1 Open GL32Windows Windows NTWindows 95 Open GL





















- Slides: 21
GL的平台(1) • 基于Open. GL标准开发的应用程序必须运行于32位Windows 平台下,如Windows. NT或Windows 95环境;而且运行时还需有动态 链接库Open. GL 32. DLL、Glu 32. DLL,一般在 …WINDOWSsystem 32里面(注:window 2000以上系统均带有 OPENGL 32. DLL和glu 32. dll) • 一般来说,VC 6和VS. NET里面就带有GL的基本库 – VC 6:…Microsoft Visual StudioVC 98IncludeGL – VS. NET. 2005:…Microsoft Visual Studio 8VCPlatform. SDKIncludegl – 一般是Gl. h,Glaux. h,Glu. h – Lib里也有:Open. GL 32. lib,GLu 32. lib,GLaux. lib • 所以开发者在VC下可以使用 – #include <glgl. h> // Header File For The Open. GL 32 Library – #include <glglu. h> // Header File For The GLu 32 Library – #include <glglaux. h>// Header File For The Glaux Library
一些命名规则 • 函数: – Open. GL核心库(gl) – Open. GL实用库(glu) – 对X窗口系统的Open. GL扩展(gl. X) • 举例: – void gl. Begin(GLenum mode); – void glu. Begin. Curve(GLUnurbs* nurb); – void gl. XFree. Context. EXT(Display * dpy, GLXContext ctx); • 参数: GL_POINTS, GL_LINE_STRIP, GL_LINE_LO OP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIAN, GL_QUADS, GL_QUAD_STRIP
数据类型名 • • void gl. Vertex 3 s(GLshort x, GLshort y, GLshort z); void gl. Vertex 3 i(GLint x, GLint y, GLint z); void gl. Vertex 3 f(GLfloat x, GLfloat y, GLfloat z); void gl. Vertex 3 d(GLdouble x, GLdouble y, GLdouble z);
• 在没使用GLUT的情况下(手动添加link): 1. 在你文件头加上 • • • #include <glgl. h> #include <glglu. h> #include <glglaux. h> 2. 进入Project菜单,选Settings项,弹出 Settings 对话框,选Link项,在 Libraries 栏 目中加入Open. GL库:opengl 32. lib glu 32. lib glaux. lib
#include <GL/glut. h> void render. Scene(void) { //绘制一个简单的二维的三角形 gl. Clear(GL_COLOR_BUFFER_BIT); gl. Begin(GL_TRIANGLES); gl. Vertex 3 f(-0. 5, 0. 0); gl. Vertex 3 f(0. 0, 0. 5, 0. 0); gl. End(); gl. Flush(); } void main(int argc, char **argv) { glut. Init(&argc, argv); //初始化glut. Init. Display. Mode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); //设置窗口的模式-深度缓存,单缓存,颜色模型 glut. Init. Window. Position(100, 100); //设置窗口的位置 glut. Init. Window. Size(320, 320); //设置窗口的大小 glut. Create. Window(“ 3 D Tech- GLUT Tutorial”); //创建窗口并赋予title glut. Display. Func(render. Scene); //调用render. Scene把绘制传送到窗口 glut. Main. Loop(); //进入循环等待 }
• 通过定义 void glut. Reshape. Func(void (*func)(int width, int height))来避免因窗口 大小改变时图形的变形; • 通过定义 void glut. Idle. Func(void (*func)(void)); 使应用空闲时反复调用函数func • 对于window的基本应用:mouse, keyboard,menu,sub window,font等 glut里也提供了支持
• • • • #include<GL/glut. h> float angle = 0. 0; void change. Size(int w, int h) { if(h == 0)h = 1; float ratio = 1. 0* w / h; gl. Matrix. Mode(GL_PROJECTION); gl. Load. Identity(); gl. Viewport(0, 0, w, h); glu. Perspective(45, ratio, 1, 1000); gl. Matrix. Mode(GL_MODELVIEW); gl. Load. Identity(); glu. Look. At(0. 0, 5. 0, 0. 0, -1. 0, 0. 0 f, 1. 0 f, 0. 0 f); } • • • • void render. Scene(void) { gl. Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gl. Push. Matrix(); gl. Rotatef(angle, 0. 0, 1. 0, 0. 0); gl. Begin(GL_TRIANGLES); gl. Vertex 3 f(-0. 5, 0. 0); gl. Vertex 3 f(0. 0, 0. 5, 0. 0); gl. End(); gl. Pop. Matrix(); angle++; glut. Swap. Buffers(); }
• void main(int argc, char **argv) { • glut. Init(&argc, argv); • glut. Init. Display. Mode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); //设为双缓冲区, //平滑动画需要 • • • glut. Init. Window. Position(100, 100); glut. Init. Window. Size(320, 320); glut. Create. Window("Lighthouse 3 D - GLUT Tutorial"); glut. Display. Func(render. Scene); glut. Idle. Func(render. Scene); //register a callback function to be called when the application is idle • glut. Reshape. Func(change. Size); //Preparing the window for a reshape • • } glut. Main. Loop();
参考 • web: – – Open. GL 官方主页:http: //www. opengl. org Open. GL 2. 1 Reference:http: //www. opengl. org/sdk/docs/man GLUT:http: //www. opengl. org/resources/libraries/glut/ NEHE的在线GL教程:http: //nehe. gamedev. net • specification : – The Open. GL Utility Toolkit (GLUT) Programming Interface (PDF) – Open. GL 2. 1 specification (PDF) • book: – Open. GL超级宝典(三版)(中文),人民邮电出版社 – Open. GL编程指南(四版)(中文),人民邮电出版社 – Open. GL Shading Language