31 Oct 2011
21 May 2011
查看OpenGL版本号
如何查看系统当期OpenGL版本号?
OpenGL 版本: char *Version = (char *)glGetString(GL_VERSION); 取得字串,此字串便是版本号。 OpenGL extension 版本可如下获取 char *Extension = (char *)glGetString(GL_EXTENSIONS);
gluPerspective和glFrustum的转换
gluPerspective使用右手坐标系,跟opengl一样.(x/y/z分别是右/上/屏幕往外);glFrustum使用eye coordinate system(相机坐标系,或者眼睛坐标系),x/y与gluPerspective相同,但是z轴反向,是顺着视线方向的(x/y/z分别是右/上屏幕往里),所以转换时需要注意zFar的值(zFar是最后2个参数中比较大的那个.如果原来zFar是负值,则需要反向).
下图2个坐标系分别是gluPerspective使用的坐标系和glFrustum使用的坐标系.
这2个函数的参数转换原理如下图:
下面是个转换函数:(仅限于显示区域对称的情况)
测试用参数: fovy = 45.0, zNear = 50.0, zFar = -1000.0;
void Perspective2Frustum(double fovy, double fAspect, double zNear, double zFar)
{
const double DEG2RAD = 3.1415926/180;
double ymin, ymax, xmin, xmax, tangent;
tangent = tan(fovy/2 * DEG2RAD);
ymax = zNear * tangent;
xmax = ymax * fAspect;
ymin = -ymax;
xmin = -xmax;
glFrustum(xmin,xmax,ymin,ymax,zNear,-zFar);
} 对于显示区域不对称的情况,gluPerspective就无能为力了,必须分别指定glFrustum的各个参数来实现透视投影变换.还有一种情况是使用多个显示器来显示时,对于每个显示区域可以分别指定glFrustum的参数来拼接场景.
参考资料:http://www.songho.ca/opengl/gl_transform.html
1 Mar 2011
Python OpenGL绑定的按键处理
key=='\033',虽然\033等于十六进制的\0x1b,但是用十六进制不行.
大体类似如下流程处理:
if key=='a':
pass
elif key=='s':
pass
elif key=='d':
pass
elif key=='c':
pass
elif key=='x':
pass
elif key=='r':
pass
elif key=='\033': # ESC
exit()
elif key=='+' or key=='=':
pass
elif key=='-':
pass
else:
pass24 Jan 2011
OpenGL显示字符
Windows系统中,可以使用wglUseFontBitmaps函数来批量的产生显示字符用的显示列表。函数有四个参数:
第一个参数是HDC,学过Windows GDI的朋友应该会熟悉这个。如果没有学过,那也没关系,只要知道调用wglGetCurrentDC函数,就可以得到一个HDC了。具体的情况可以看下面的代码。
第二个参数表示第一个要产生的字符,因为我们要产生0到127的字符的显示列表,所以这里填0。
第三个参数表示要产生字符的总个数,因为我们要产生0到127的字符的显示列表,总共有128个字符,所以这里填128。
第四个参数表示第一个字符所对应显示列表的编号。假如这里填1000,则第一个字符的绘制命令将被装到第1000号显示列表,第二个字符的绘制命令将被装到第1001号显示列表,依次类推。我们可以先用glGenLists申请128个连续的显示列表编号,然后把第一个显示列表编号填在这里。
还要说明一下,因为wglUseFontBitmaps是Windows系统特有的函数,所以在使用前需要加入头文件:#include
#include显示列表一旦产生就一直存在(除非调用glDeleteLists销毁),所以我们只需要在第一次调用的时候初始化,以后就可以很方便的调用这些显示列表来绘制字符了。// ASCII字符总共只有0到127,一共128种字符 #define MAX_CHAR 128 void drawString(const char* str) { static int isFirstCall = 1; static GLuint lists; if( isFirstCall ) { // 如果是第一次调用,执行初始化 // 为每一个ASCII字符产生一个显示列表 isFirstCall = 0; // 申请MAX_CHAR个连续的显示列表编号 lists = glGenLists(MAX_CHAR); // 把每个字符的绘制命令都装到对应的显示列表中 wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists); } // 调用每个字符对应的显示列表,绘制每个字符 for(; *str!='\0'; ++str) glCallList(lists + *str); }
绘制字符的时候,可以先用glColor*等指定颜色,然后用glRasterPos*指定位置,最后调用显示列表来绘制。
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glRasterPos2f(0.0f, 0.0f);
drawString("Hello, World!");
glutSwapBuffers();
}字体修改
void selectFont(int size, int charset, const char* face) {
HFONT hFont = CreateFontA(size, 0, 0, 0, FW_MEDIUM, 0, 0, 0,
charset, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, face);
HFONT hOldFont = (HFONT)SelectObject(wglGetCurrentDC(), hFont);
DeleteObject(hOldFont);
}调用
void display(void) {
selectFont(48, ANSI_CHARSET, "Comic Sans MS");
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glRasterPos2f(0.0f, 0.0f);
drawString("Hello, World!");
glutSwapBuffers();
}
6 Jan 2011
VS2008 OpenGL 配置
方式一:----->
第一步,选择一个编译环境
现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev- C++等,它们都是支持OpenGL的。我选择Visual Studio 2008作为学习OpenGL的环境。
第二步,安装GLUT工具包
GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows环境下的GLUT下载地址:(大小约为150k)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
Windows 环境下安装GLUT的步骤:
1、将下载的压缩包解开,将得到5个文件
2、把glut.h复制到x:\Program Files\Microsoft\Visual Studio 9.0\VC\include\GL文件夹中,如果没有GL这个文件夹则可以自己新建一个。
3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(即与include并排的lib文件夹下)。
4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32 文件夹内。
第三步,建立一个OpenGL工程
选择 File->New->Project,然后选择Win32 Console Application,(不是 win32 application).选择一个名字,然后按OK。
在弹出的对话框左边点Application Settings,找到Empty project 并勾上,选择Finish。然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c来作为文件结尾。
搞定了,就跟平时的工程没什么两样的。
第一个OpenGL程序
一个简单的 OpenGL程序如下:(注意,如果需要编译并运行,需要正确安装 GLUT,安装方法如上所述)
#include该程序的作用是在一个黑色的窗口中央画一个白色的矩形。下面对各行语句进行说明。void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow(" 第一个OpenGL程序"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0; }
首先,需要包含头文件#include
本来OpenGL程序一般还要包含
然后看main函数。
int main(int argc, char *argv[]),这个是带命令行参数的main函数,各位应该见过吧?没见过的同志们请多翻翻书,等弄明白了再往下看。
注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。
1、glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句 glutInit(&argc, argv)就可以了。
2、 glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。更多信息,请自己Google。当然以后的教程也会有一些讲解。
3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。
4、 glutInitWindowSize,这个也简单,设置窗口的大小。
5、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
6、 glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧)。
7、glutMainLoop,进行一个消息循环。(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了。)
在glutDisplayFunc函数中,我们设置了“当需要画图时,请调用myDisplay函数”。于是myDisplay函数就用来画图。观察 myDisplay中的三个函数调用,发现它们都以gl开头。这种以gl开头的函数都是OpenGL的标准函数,下面对用到的函数进行介绍。
1、 glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍。
2、 glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。
3、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。
===============================================================
这个时候会有一个控制台和一个窗口,如果不想让它显示这个控制台,则要以文件中加入
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
===============================================================
方式二:----->
1、建工程同一。
2、把所需要的头文件和.lib文件都放在工程下
3、在源文件中这样引用:
#pragma comment( lib, "glut32.lib") #include "glut.h"当然,想加入哪个lib或是.h就把它写在这里就OK了。
注:#pragma comment(lib,"glut32.lib")表示链接glut32.lib这个库。
和在工程设置里写上链入glut32.lib的效果一样,不过这种方法写的
程序别人在使用你的代码的时候就不用再设置工程settings了。
强烈推荐此法。
30 Dec 2010
一个很简单的opengl例子
# include <GL/glut.h>
# include <stdlib.h>
/* 初始化材料属性、光源属性、光照模型,打开深度缓冲区 */
void init ( void )
{
GLfloat mat_specular [ ] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess [ ] = { 50.0 };
GLfloat light_position [ ] = { 1.0, 1.0, 1.0, 0.0 };
glClearColor ( 0.0, 0.0, 0.0, 0.0 );
glShadeModel ( GL_SMOOTH );
glMaterialfv ( GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv ( GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv ( GL_LIGHT0, GL_POSITION, light_position);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glEnable (GL_DEPTH_TEST);
}
/*调用GLUT函数,绘制一个球*/
void display ( void )
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(1.0, 40, 50);
glFlush();
}
/* 定义GLUT的reshape函数,w、h分别是当前窗口的宽和高*/
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
if (w <= h)
glOrtho (-1.5, 1.5, -1.5 * ( GLfloat ) h / ( GLfloat ) w, 1.5 * ( GLfloat ) h / ( GLfloat ) w, -10.0, 10.0 );
else
glOrtho (-1.5 * ( GLfloat ) w / ( GLfloat ) h, 1.5 * ( GLfloat ) w / ( GLfloat ) h, -1.5, 1.5, -10.0, 10.0);
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity ( ) ;
}
/* 定义对键盘的响应函数 */
void keyboard ( unsigned char key, int x, int y)
{
/*按Esc键退出*/
switch (key)
{
case 27:
exit ( 0 );
break;
}
}
int main(int argc, char** argv)
{
/* GLUT环境初始化*/
glutInit (&argc, argv);
/* 显示模式初始化 */
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
/* 定义窗口大小 */
glutInitWindowSize (300, 300);
/* 定义窗口位置 */
glutInitWindowPosition (100, 100);
/* 显示窗口,窗口标题为执行函数名 */
glutCreateWindow ( argv [ 0 ] );
/* 调用OpenGL初始化函数 */
init ( );
/* 注册OpenGL绘图函数 */
glutDisplayFunc ( display );
/* 注册窗口大小改变时的响应函数 */
glutReshapeFunc ( reshape );
/* 注册键盘响应函数 */
glutKeyboardFunc ( keyboard );
/* 进入GLUT消息循环,开始执行程序 */
glutMainLoop( );
return 0;
}
12 Dec 2010
ZT: OpenGL教程收藏
1.DancingWind NEHE中文教程
NEHE是十分不错的opengl教程,由浅入深,配合实例讲解。而DancingWind本着一颗分享的心,制成中文版。看官不必一课一课按顺序看但每一课都应该认真看,英文可在英文版教程观看……各位可以在这个网站下载。此外DancingWind还整合了几种OPENGL框架 、SDK()。
2.EastcowBoy OpenGL入门学习
连载于programfan.com论坛的入门教程,建议初学者重点看看。涉及的是OpenGL基础,真正的由浅入深,eastcowboy讲解认真详细,备足功课(崇拜ING)。也讲述了很多其他教程中很难包含的关于一点原理概念上的东西,帮助你更好理解opengl。各位可点以上链接,内有目录。(P.S.期待新作)
3.LightHouse3D
提供十分有针对性的教程,譬如三维地形技术啦Billboard公告牌技术啦GLSL教程等等。而且讲解详细,看后一定有所裨益。话说我初学GLSL就是从这里开始呢。(注意是英文哦。)另外貌似还有VRML(虚拟真实建模语言)的介绍呢。
4.Ozone3D
ozone3d.net 里面可以看到很多诱人的东西,我有机会一定得好好参详。此外网站也提供OpenGL教程,但是貌似跨度比较大的说,不太适合拿来初学。另外还有GLSL,Direct3D, Demoniak3D等等的教案,资源实在太丰富了。
5.SULACO
OpenGL的Dephi实现。记得网上也有一些Dephi版的NEHE教程了,可见学OpenGL不一定只有C/C++的。但是即使你手头上只有C/C++也可以看看sulaco的教程。不难明白的,而且更重要的是一些绚丽效果的实现手法。
6.UltimateGameProgramming
这里的教程就更加“逐步”了,十分适合给初学者一直看下去学下去。其最大特点是教程间的关联性,基本每个例子都代表一项特性并都与上下文相关。缺点是,教案是“代码”,意味着看代码学习,所以初学者还是“以此为辅”吧。(注意需要.net编译器)
7.SwiftlessGameProgramming
同样是适合初学者循序渐进地学习的教程,而且附有一定的讲解。有C++版和Basic版。关键词是“一步一步来”,恩,是的,学习不可急进。
当然,系统地学习就要有书在旁,如经典的《OpenGL编程权威指南》(红宝,现在有中文第六版了)、《OpenGL编程基础》等等,但是,要记得ZwqXin在上篇文章说过的:行为决定态度啊。
再提供一些相关网站。OPENGL在这个世界上学习资源还是很多的。
Opengl.org -WIKI
Opengl.org-掌握最新信息。
Debevec
关注图形学前沿技术。
GameDev
一个属于3D技术的强大社区,高手云集于此。
开始学习OpenGL可以直接上手的awx文件
点此下载(for VC++6.0)
8 Nov 2010
OpenGL函数二
opengl函数解释2 第一章使用颜色
l. l glshadeModel--选择平面明暗模式或光滑明暗模式
1. 2 glColor--设置当前颜色
1. 3 glColorPointer--定义颜色数组
1. 4 gllndex--设置当前颜色索引
1. 5 gllndexPointer--定义颜色索引数组
1. 6 glCOforTableEXT--为目标调色板纹理指定调色板的格式和大小
1. 7 glColorsubTableEXT--指定需要替代的目标纹理调色板的一部分
第二章 绘製几何图原及物体
2. l glVertex--指定顶点
2. 2 glVertexPointer--定义顶点数据数组
2. 3 glArrayElement--指定用来绘製顶点的数组元素
2. 4 glBegin, glEnd--限定一个或多个图原顶点的绘製
2. 5 glEdgeFlag, glEdgeFlagy--指定边界标记
2. 6 glPointsize--指定光栅化点的直径
2. 7 glLinewidth--指定光栅化直线的宽度
2. 8 glLinestipple--指定点划线
2. 9 glPolygonMode--选择多边形光栅化模式
2. 10 glFrontFace--定义正面多边形和反反面多边形
2. 11 glPolygonstipple--设置多边形点划图
2. 12 glDrawElements--从数组数据绘製图原
2. 13 glRect--绘製矩形
第三章 坐标转换
3. l glTranslate--用平移矩阵乘以当前矩阵
3. 2 glRotate--用旋转矩阵乘以当前矩阵
3. 3 glscale--用缩放矩阵乘以当前矩阵
3. 4 glViewport--设置机口
3. 5 glFrustum--用透视矩阵乘以当前矩阵
3. 6 glorthO--用正视矩阵乘以当前矩阵
3. 7 glClipPlane--指定切割几何物体的平面
第四章 堆栈操作
4. l glLoadMatrix--用任意矩阵替换当前矩阵
4. 2 glMultMatrix--用任意矩阵乘以当前矩阵
4. 3 glMatrixMode--指定哪一个矩阵是当前矩阵
4. 4 glPushMatrix, glPopMatrix--压人和弹出当前矩阵堆栈
4. 5 glPushAttrib, glPopAttrib--压人和弹出属性堆栈
4. 6 glPushClientAttrib, glPopClientAttrib--在客户属性堆栈中保存和恢复客户状态变量组
4. 7 glPushName, gPopName--压人和弹出名称堆栈
4. 8 gllnitNames--初始名称堆栈
4, 9 glLoadName--向名称堆栈中装载名称
第五章 显示列表
5. l glNewList, glEndList--创建或替换一个显示列表
5. 2 glCallLISt--执行一个显示列表
5. 3 glCallLISts--执行一列显示列表
5. 4 glGenLists--生成一组空的相邻的显示列表
5. 5 glDeleteLists--删除一组相邻的显示列表
5. 6 gllSLISt--检验显示列表的存在
第六章 使用光照和材质
6. l glNormal--设置当前的法向量
6. 2 glNormalPointer--定义法向量数组
6. 3 glLight--设置光源参数
6. 4 glLightModel--设置光照模型参数
6. 5 glMaterial--为光照模型指定材质参数
6. 6 glColorMateria--使材质颜色跟踪当前颜色
第七章 像素操作
7. l glRasterPos--为像素操作指定光栅位置
7. 2 glBitmap--绘製位图
7. 3 glReadPixels--从帧缓存中读取一块像素
7. 4 glDrawPixels--将一个像素块写人帧缓存
7. 5 glCopyPixels--在帧缓存中拷贝像素
7. 6 glCopyTexlmage1D--将像素从帧缓存拷贝到一维纹理图像中
7. 7 glCopyTexlmageZD--把像素从帧缓存拷贝到二维纹理图像中
7. 8 glCopyTexsublmagelD--从帧缓存中拷贝一维纹理图像的子图像
7. 9 glCopyTexsublmageZD--从帧缓存中拷贝二维纹理图像的子图像
7. 10 glPixelZoom--指定像素缩放因子
7. 11 glPixelstore--设置像素存储模式
7. 12 glPixelTransfer--设置像素传输模式
7. 13 glPixelMap--设置像素传输映射表
第八章 纹理映射
8. l glTexlmagelD--指定一维纹理图像
8. 2 glTexlmageZD--指定二维纹理映射
8. 3 glTexParameter--设置纹理参数
8. 4 glTexsublmage1D--指定已存在的一维纹理图像的一部分
8. 5 glTexsublmageZD--指定已存在的二维纹理图像的一部分
8. 6 glTexEnv--设置纹理环境参数
8. 7 glTexCoord--设置当前纹理坐标
8. 8 glTexGen--控制纹理坐标的生成
8. 9 glTexCoordPointer--定义纹理坐标数组
8. 10 glDeleteTextures--删除命名的纹理
第九章 特殊效果操作
9. l glBlendFunc--指定像素的数学算法
9. 2 glHint--指定由实现确定的控制行为
9. 3 glFOg--指定雾化参数
第十章 帧缓存操作
10. l glClear--将缓存清除为预先的设置值
10. 2 glClearAccum--设置累加缓存的清除值
10. 3 glClearColor--设置颜色缓存的清除值
10. 4 glClearDepth--设置深度缓存的清除值
10. 5 glClearlndex--设置颜色索引缓存的清除值
10. 6 glClearstencil--设置模板缓存的清除值
10. 7 glDrawBuffer--指定绘製的颜色缓存
10. 8 gllndexMask--控制颜色索引缓存中单个位的写操作
10. 9 glColorMask--激活或关闭帧缓存颜色分量的写操作
10. 10 glDepthMask--激活或关闭对深度缓存的写操作
10. 11 glstencilMask--控制模板平面中单个位的写操作
10. 12 glAlphaFunc-一指定alpha检验函数
10. 13 glstencilFunc--设置模板检验函数和参考值
10. 14 glstencilop--设置模板检验操作
10. 15 glDepthFunc--指定深度比较中使用的数值
10. 16 glDepthRange--指定从单位化的设备坐标到窗口坐标的z值映射
10. 17 glLOgiCOp--为颜色索引绘製指定逻辑像素操作
10. 18 glACCum--对累加缓存进行操作
第十一章 绘製曲线和曲面
11. l glEvalCoord--求取激活的一维和二维纹理图
11. 2 glMapl--定义一维求值器
11. 3 glMapZ--定义二维求值器
11. 4 glMapGrid--定义一维或二维网格
11. 5 glEvalMesh--计算一维或二维点网格或线网格
11. 6 glEvalPoint--生成并求取网格中的单个点
第十二章 查询函数
12. l glGet--返回所选择的参数值
12. 2 glGetClipPlane--返回指定的切平面係数
12. 3 glGetColorTableEXT--获得当前目标纹理调色板的颜色表数据
12. 4 glGetColorTableParameterfvEXT, glGetColorTableParameterlvEXT-从颜色表中获得调色板参数
12. 5 glGetError--返回错误信息
12. 6 glGetLight--返回光源参数值
12. 7 glGetMap--返回求值器参数
12. 8 glGetMaterial--返回材质参数
12. 9 glGetPixelMap--返回指定的像素映像
12. 10 glGetPointery--返回顶点数据数组地J
12. 11 glGetPolygonstipple--返回多边形点戈
12. 12 glGetstring--返回描述当前OpenGL
12. 13 glGetTexEnv--返回纹理环境参数
12. 14 glGetTexGen--返回纹理坐标生成参数
12. 15 glGetTexlmage--返回纹理图像
12. 16 glGetTexLevelParameter--返回指定细节水平的纹理参数值
12. 17 glGetTexParameter--返回纹理参数值
第二篇GLU库函数
第一章 绘製NURBS曲线和曲面
1. l gluNewNurbsRenderer--创建一个NURBS对像
1. 2 gluNurbsProperty--设置NURBS属性
1. 3 gluNurbsCallback--为NURBS对像定义回调函数
1. 4 gluBeginCurve, gluEndCurve--限定NURBS曲线的定义
1. 5 gluNurbsCurve--定义NURBS曲线的形状
1. 6 gluDeleteNurbsRenderer--删除NURBS对像
1. 7 gluBeglnsurface, gluEndsurface--限定NURBS曲面的定义
1. 8 ghiNurbssurface--定义NURBS曲面的形状
1. 9 gluBeginTrim, gluEndTrim--限定NURBS裁剪环的定义
1. 10 gluPwlCurve--描述分段线性NURBS裁剪曲线
1. ll gfuBeglnPolygon, gluEndPolygon--限定多边形的定义
1. 12 gluPickMatrix--定义拾取区域
第二章 绘製二次几何物体
2. l gluNewQuadric--创建一个二次对象
2. 2 gluQuadricDrawsope--指定二次对象的绘製方式
2. 3 gluQuadricNormals--指定二次对象使用的法向量类型
2. 4 gluQuadricorientation--指定二次对象的内侧面或外侧面方向
2. 5 gluCylinder--绘製圆柱体
2. 6 ghisphere--绘製球体
2. 7 glllDISk--绘製圆盘
2. 8 gluPartialDisk--绘製部分圆盘
2. 9 gliJDeleteQuadric--删除二次对象
2. 10 gluQuadricTexture--指定是否为二次对象使用纹理
2. 11 ghiQuadricCallback--为二次对象定义回调
第三章 网格化
3. l gluNewTess--创建一个网格化对象
3. 2 gluTessVertex--在多边形上指定顶点
3. 3 gluTessCallback--为网格化对象定义回调
3. 4 gluTessBeglnPolygon, ghiTessEndPolygon--限定多边形的描述
3. 5 gluTessBeglnContour, gluTessEndContour--限定多边形轮廓线的定义
3. 6 gluTessProperty--设置网格化对象的属性
3. 7 ghiNextContour--标记开始绘製另一个轮廓线
3. 8 gluTessNormal--为多边形指定法向量
3. 9 gluDeleteTess--删除网格化对象
第四章 坐标变换
4. l gluOorthoZD--定义二维正视投影矩阵
4. 2 gluPerspective--创建透视投影矩阵
4. 3 gltlLOOkAt--定义视景转换
4. 4 gluProject--将物体坐标映射为窗口坐标
4. 5 gluInProject--将窗口坐标映射力物体坐标
第五章 多重映射
5. l gfuBuildlDMipmaps--创建一维多重映射
5. 2 gluBuildZDMipmaps--创建H维多重映射
5. 3 gluSCalelmage--将图像缩放到任意尺寸
第六章 查询函数
6. l ghiErrorstring--从OpenGL或GLU错误代码中生成错误字符串
6. 2 gluGetNurbsProperty--获得NURBS属性
6. 3 ghiGetstring--获得描述GLU版本号或支持GLU扩展调用的字符串
6. 4 ghiGetTessProperty--获得网格化对象的属性
第三篇GLUT库函数
第一章 初始化和启动事件处理
1. l ghjtlnit--初始化GLUT库
1. 2 glutlnitwindowPosition--设置初始窗口位置
1. 3 glutlnitwindowsize--设置初始窗口大小
1. 4 glutlnitDisplayMode--设置初始显示模式
1. 5 glutMainLoop--进人GLUT事件处理循环
第二章 窗口管理
2. l glutCreatewindow--创建顶层窗口
2. 2 glutCreatesubwindow--创建子窗口
2. 3 ghitHidewindow--隐藏当前窗口的显示状态
2. 4 glutshowwindow--改变当前窗口的显示状态, 使其显示
2. 5 gfutsetwindowTitle--设置当前顶层窗口的窗口标题
2. 6 ghitsetlconTitle--设置当前顶层窗口的图标标题
2. 7 ghitPostRedisplay--标记当前窗口需要重新绘製
2. 8 glutswapBuffers--交换当前窗口的缓存
2. 9 glutFullscreen--关闭全屏显示
2. 10 glutPositionwindow--申请改变当前窗口的位置
2. ll gintReshapewindow--申请改变当前窗口的大小
2. 12 glutsetwindow--设置当前窗口
2. 13 ghitGetwindow--获得当前窗口的标识符
2. 14 glutPopwindow--改变当前窗口的位置, 使其前移
2. 15 ghitPtshwilldOO--改变当前窗口的位置, 使其后移
2. 16 glutDestroywindow--销毁指定的窗口
2. 17 glutlconifywindow--使当前窗口图标化显示
2. 18 glutsetCursor--设置当前窗口的鼠标形状
第三章 重迭层管理
3. l glutEstablishoverlay--创建当前窗口的重迭层
3. 2 glutUseLayer--改变当前窗口的使用层
3. 3 glutRemoveoverlay--删除当前窗口的重迭层
3. 4 glutPostoverlayRedisplay--标记当前窗口的重迭层需要重新绘製
3. 5 glutshowoverlay--显示当前窗口的重迭层
3. 6 glutHideoverlay--显示当前窗口的重迭层
第四章 菜单管理
4. l glutCreateMenu--创建一个新的弹出式菜单
4. 2 glutAddMenuEntry--在当前菜单的底部增加一个菜单条目
4. 3 glutAddsubMenu--在当前菜单的底部增加一个子菜单触发条目
4. 4 glutAttachMenu--把当前窗口的一个鼠标按键与当前菜单的标识符联繫起来
4. 5 glutGetMenu--获取当前菜单的标识符
4. 6 glutsetMenu--设置当前菜单
4. 7 glutDestroyMenu--删除指定的菜单
4. 8 glutChangeToMenuEntry--将指定的当前菜单中的菜单项更改为菜单条目
4. 9 glutChangeTosubMenu--将指定的当前菜单中的菜单项更改为子菜单触发条目
4. 10 glutRemoveMenultem--删除指定的菜单项
4. 11 glutDetachMenu--释放当前窗口的一个鼠标按键
第五章 注册国调函数
5. l glutDispfayFunc--注册当前窗口的显示回调函数
5. 2 glutReshapeFunc--注册当前窗口的形状变化回调函数
5. 3 glutMouseFunc--注册当前窗口的鼠标回调函数
5. 4 glutMotionFunc--设置移动回调函数
5. 5 glutldleFunc--设置全局的空閒回调函数
5. 6 glutVisibilityFunc--设置当前窗口的可视回调函数
5. 7 glutKeyboardFunc--注册当前窗口的键盘回调函数
5. 8 glutspecialFunc--设置当前窗口的特定键回调函数
5. 9 glutoverlayDisplayFunc--注册当前窗口的重迭层显示回调函数
5. 10 glutPassiveMotionFunc--设置当前窗口的被动移动回调函数
5. 11 glutEntryFunc--设置当前窗口的鼠标进出回调函数
5. 12 glutspaceballMotionFunc--设置当前窗口的空间球移动回调函数
5. 13 glutspaceballRotateFunc--设置当前窗口的空间球旋转回调函数
5. 14 glutspaceballButtonFunc--设置当前窗口的空间球按键回调函数
5. 15 glutButtonBoxFunc--设置当前窗口的拨号按键盒按键回调函数
5. 16 glutDialsFunc--设置当前窗口的拨号按键盒拨号回调函数
5. 17 glutTabletMotionFunc--设置图形板移动回调函数
5. 18 glutTabletButtonFunc--设置当前窗口的图形板按键回调函数
5. 19 glutMenustatusFunc--设置全局的菜单状态回调函数
5. 20 glutTimerFunc--注册按一定时间间隔触发的定时器回调函数
第六章 颜色素引映射表管理
6. l glutsetColor--设置当前窗口当前层一个颜色表单元的颜色
6. 2 glutGetColor--获得指定的索引颜色
6. 3 glutCopyColormap--将逻辑颜色表从指定的窗口拷贝到当前窗口
第七章 状态检索
7. l glutGet--检索指定的GLUT状态
7. 2 glutLayerGet--检索属于当前窗口重迭层的 GLU T状态
7. 3 glutDeviceGet--检索GLUT设备信息
7. 4 glutGetModifiers--返回修饰键在引起某些回调的事件发生时的状态
7. 5 glutExtensionsupported--判别当前OpenGL版本是否支持给定的OpenGL扩展
第八章 字体绘製
8. l glutBltmapCharcter--绘製一个位图字符
8. 2 glutBitmapwidth--返回一个位图字符的宽度
8. 3 glutstrokeCharcter--绘製一个笔划字符
8. 4 glutstrokewidth--返回一个笔划字体的宽度
第九章 几何图形绘製
9. 1 glutSolidsphere, glutwiresphere--绘製实心球体和线框球体
9. 2 glutsolidCube, glutwireCube--绘製实心立方体和线框立方体
9. 3 glutsolidCone, glutwireCone--绘製实心圆锥体和线框圆锥体
9. 4 glutsolidTorus, glutwireTorus--绘製实心圆环和线框圆环
9. 5 glutSolidDOdeCahedroll, glLltwiFeDOdechedfotl--绘製实心十二面体和线框十二面体
9. 6 glutSolidOctahedron, glutWireOctahedron--绘製买心八面体和线框八面体
9. 7 glutsolldTetrahedron, glutwireTetrahedron--绘製实心四面体和线框四面体
9. 8 glutSollelcosahedron, glutwirelcosahedron--绘製实心二十面体和线框二十面体
9. 9 glutsolidTeapot, glutwireTeapot--绘製实心茶壶和线框茶壶
OpenGL函数
OpenGL函数整理 一:GL库函数
使用颜色
glshadeModel--选择平面明暗模式或光滑明暗模式
glColor--设置当前颜色
glColorPointer--定义颜色数组
gllndex--设置当前颜色索引
gllndexPointer--定义颜色索引数组
glCOforTableEXT--为目标调色板纹理指定调色板的格式和大小
glColorsubTableEXT--指定需要替代的目标纹理调色板的一部分
绘制几何图原及物体
glVertex--指定顶点
glVertexPointer--定义顶点数据数组
glArrayElement--指定用来绘制顶点的数组元素
glBegin,glEnd--限定一个或多个图原顶点的绘制
glEdgeFlag,glEdgeFlagy--指定边界标记
glPointsize--指定光栅化点的直径
glLinewidth--指定光栅化直线的宽度
glLinestipple--指定点划线
glPolygonMode--选择多边形光栅化模式
glFrontFace--定义正面多边形和反反面多边形
glPolygonstipple--设置多边形点划图
glDrawElements--从数组数据绘制图原
glRect--绘制矩形
坐标转换
glTranslate--用平移矩阵乘以当前矩阵
glRotate--用旋转矩阵乘以当前矩阵
glscale--用缩放矩阵乘以当前矩阵
glViewport--设置机口
glFrustum--用透视矩阵乘以当前矩阵
glorthO--用正视矩阵乘以当前矩阵
glClipPlane--指定切割几何物体的平面
堆栈操作
glLoadMatrix--用任意矩阵替换当前矩阵
glMultMatrix--用任意矩阵乘以当前矩阵
glMatrixMode--指定哪一个矩阵是当前矩阵
glPushMatrix,glPopMatrix--压人和弹出当前矩阵堆栈
glPushAttrib,glPopAttrib--压人和弹出属性堆栈
glPushClientAttrib,glPopClientAttrib--在客户属性堆栈中保存和恢复客户状态变量组
glPushName,gPopName--压人和弹出名称堆栈
gllnitNames--初始名称堆栈
glLoadName--向名称堆栈中装载名称
显示列表
glNewList,glEndList--创建或替换一个显示列表
glCallLISt--执行一个显示列表
glCallLISts--执行一列显示列表
glGenLists--生成一组空的相邻的显示列表
glDeleteLists--删除一组相邻的显示列表
gllSLISt--检验显示列表的存在
使用光照和材质
glNormal--设置当前的法向量
glNormalPointer--定义法向量数组
glLight--设置光源参数
glLightModel--设置光照模型参数
glMaterial--为光照模型指定材质参数
glColorMateria--使材质颜色跟踪当前颜色
像素操作
glRasterPos--为像素操作指定光栅位置
glBitmap--绘制位图
glReadPixels--从帧缓存中读取一块像素
glDrawPixels--将一个像素块写人帧缓存
glCopyPixels--在帧缓存中拷贝像素
glCopyTexlmage1D--将像素从帧缓存拷贝到一维纹理图像中
glCopyTexlmageZD--把像素从帧缓存拷贝到二维纹理图像中
glCopyTexsublmagelD--从帧缓存中拷贝一维纹理图像的子图像
glCopyTexsublmageZD--从帧缓存中拷贝二维纹理图像的子图像
glPixelZoom--指定像素缩放因子
glPixelstore--设置像素存储模式
glPixelTransfer--设置像素传输模式
glPixelMap--设置像素传输映射表
纹理映射
glTexlmagelD--指定一维纹理图像
glTexlmageZD--指定二维纹理映射
glTexParameter--设置纹理参数
glTexsublmage1D--指定已存在的一维纹理图像的一部分
glTexsublmageZD--指定已存在的二维纹理图像的一部分
glTexEnv--设置纹理环境参数
glTexCoord--设置当前纹理坐标
glTexGen--控制纹理坐标的生成
glTexCoordPointer--定义纹理坐标数组
glDeleteTextures--删除命名的纹理
特殊效果操作
glBlendFunc--指定像素的数学算法
glHint--指定由实现确定的控制行为
glFOg--指定雾化参数
帧缓存操作
glClear--将缓存清除为预先的设置值
glClearAccum--设置累加缓存的清除值
glClearColor--设置颜色缓存的清除值
glClearDepth--设置深度缓存的清除值
glClearlndex--设置颜色索引缓存的清除值
glClearstencil--设置模板缓存的清除值
glDrawBuffer--指定绘制的颜色缓存
gllndexMask--控制颜色索引缓存中单个位的写操作
glColorMask--激活或关闭帧缓存颜色分量的写操作
glDepthMask--激活或关闭对深度缓存的写操作
glstencilMask--控制模板平面中单个位的写操作
glAlphaFunc-一指定alpha检验函数
glstencilFunc--设置模板检验函数和参考值
glstencilop--设置模板检验操作
glDepthFunc--指定深度比较中使用的数值
glDepthRange--指定从单位化的设备坐标到窗口坐标的z值映射
glLOgiCOp--为颜色索引绘制指定逻辑像素操作
glACCum--对累加缓存进行操作
绘制曲线和曲面
glEvalCoord--求取激活的一维和二维纹理图
glMapl--定义一维求值器
glMapZ--定义二维求值器
glMapGrid--定义一维或二维网格
glEvalMesh--计算一维或二维点网格或线网格
glEvalPoint--生成并求取网格中的单个点
查询函数
glGet--返回所选择的参数值
glGetClipPlane--返回指定的切平面系数
glGetColorTableEXT--获得当前目标纹理调色板的颜色表数据
glGetColorTableParameterfvEXT,glGetColorTableParameterlvEXT-从颜色表中获得调色板参数
glGetError--返回错误信息
glGetLight--返回光源参数值
glGetMap--返回求值器参数
glGetMaterial--返回材质参数
glGetPixelMap--返回指定的像素映像
glGetPointery--返回顶点数据数组地J
glGetPolygonstipple--返回多边形点戈
glGetstring--返回描述当前OpenGL
glGetTexEnv--返回纹理环境参数
glGetTexGen--返回纹理坐标生成参数
glGetTexlmage--返回纹理图像
glGetTexLevelParameter--返回指定细节水平的纹理参数值
glGetTexParameter--返回纹理参数值
二:GLU库函数
绘制NURBS曲线和曲面
gluNewNurbsRenderer--创建一个NURBS对像
gluNurbsProperty--设置NURBS属性
gluNurbsCallback--为NURBS对像定义回调函数
gluBeginCurve,gluEndCurve--限定NURBS曲线的定义
gluNurbsCurve--定义NURBS曲线的形状
gluDeleteNurbsRenderer--删除NURBS对像
gluBeglnsurface,gluEndsurface--限定NURBS曲面的定义
ghiNurbssurface--定义NURBS曲面的形状
gluBeginTrim,gluEndTrim--限定NURBS裁剪环的定义
gluPwlCurve--描述分段线性NURBS裁剪曲线
gfuBeglnPolygon, gluEndPolygon--限定多边形的定义
gluPickMatrix--定义拾取区域
绘制二次几何物体
gluNewQuadric--创建一个二次对象
gluQuadricDrawsope--指定二次对象的绘制方式
gluQuadricNormals--指定二次对象使用的法向量类型
gluQuadricorientation--指定二次对象的内侧面或外侧面方向
gluCylinder--绘制圆柱体
ghisphere--绘制球体
glllDISk--绘制圆盘
gluPartialDisk--绘制部分圆盘
gliJDeleteQuadric--删除二次对象
gluQuadricTexture--指定是否为二次对象使用纹理
ghiQuadricCallback--为二次对象定义回调
网格化
gluNewTess--创建一个网格化对象
gluTessVertex--在多边形上指定顶点
gluTessCallback--为网格化对象定义回调
gluTessBeglnPolygon,ghiTessEndPolygon--限定多边形的描述
gluTessBeglnContour,gluTessEndContour--限定多边形轮廓线的定义
gluTessProperty--设置网格化对象的属性
ghiNextContour--标记开始绘制另一个轮廓线
gluTessNormal--为多边形指定法向量
gluDeleteTess--删除网格化对象
坐标变换
gluOorthoZD--定义二维正视投影矩阵
gluPerspective--创建透视投影矩阵
gltlLOOkAt--定义视景转换
gluProject--将物体坐标映射为窗口坐标
gluInProject--将窗口坐标映射力物体坐标
多重映射
gfuBuildlDMipmaps--创建一维多重映射
gluBuildZDMipmaps--创建H维多重映射
gluSCalelmage--将图像缩放到任意尺寸
查询函数
ghiErrorstring--从OpenGL或GLU错误代码中生成错误字符串
gluGetNurbsProperty--获得NURBS属性
ghiGetstring--获得描述GLU版本号或支持GLU扩展调用的字符串
ghiGetTessProperty--获得网格化对象的属性
三:GLUT库函数
初始化和启动事件处理
ghjtlnit--初始化GLUT库
glutlnitwindowPosition--设置初始窗口位置
glutlnitwindowsize--设置初始窗口大小
glutlnitDisplayMode--设置初始显示模式
glutMainLoop--进人GLUT事件处理循环
窗口管理
glutCreatewindow--创建顶层窗口
glutCreatesubwindow--创建子窗口
ghitHidewindow--隐藏当前窗口的显示状态
glutshowwindow--改变当前窗口的显示状态,使其显示
gfutsetwindowTitle--设置当前顶层窗口的窗口标题
ghitsetlconTitle--设置当前顶层窗口的图标标题
ghitPostRedisplay--标记当前窗口需要重新绘制
glutswapBuffers--交换当前窗口的缓存
glutFullscreen--关闭全屏显示
glutPositionwindow--申请改变当前窗口的位置
gintReshapewindow--申请改变当前窗口的大小
glutsetwindow--设置当前窗口
ghitGetwindow--获得当前窗口的标识符
glutPopwindow--改变当前窗口的位置,使其前移
ghitPtshwilldOO--改变当前窗口的位置,使其后移
glutDestroywindow--销毁指定的窗口
glutlconifywindow--使当前窗口图标化显示
glutsetCursor--设置当前窗口的鼠标形状
重叠层管理
glutEstablishoverlay--创建当前窗口的重叠层
glutUseLayer--改变当前窗口的使用层
glutRemoveoverlay--删除当前窗口的重叠层
glutPostoverlayRedisplay--标记当前窗口的重叠层
需要重新绘制
glutshowoverlay--显示当前窗口的重叠层
glutHideoverlay--显示当前窗口的重叠层
菜单管理
glutCreateMenu--创建一个新的弹出式菜单
glutAddMenuEntry--在当前菜单的底部增加一个菜单条目
glutAddsubMenu--在当前菜单的底部增加一个子菜单触发条目
glutAttachMenu--把当前窗口的一个鼠标按键与当前菜单的标识符联系起来
glutGetMenu--获取当前菜单的标识符
glutsetMenu--设置当前菜单
glutDestroyMenu--删除指定的菜单
glutChangeToMenuEntry--将指定的当前菜单中的菜单项更改为菜单条目
glutChangeTosubMenu--将指定的当前菜单中的菜单项更改为子菜单触发条目
glutRemoveMenultem--删除指定的菜单项
glutDetachMenu--释放当前窗口的一个鼠标按键
注册国调函数
glutDispfayFunc--注册当前窗口的显示回调函数
glutReshapeFunc--注册当前窗口的形状变化回调函数
glutMouseFunc--注册当前窗口的鼠标回调函数
glutMotionFunc--设置移动回调函数
glutldleFunc--设置全局的空闲回调函数
glutVisibilityFunc--设置当前窗口的可视回调函数
glutKeyboardFunc--注册当前窗口的键盘回调函数
glutspecialFunc--设置当前窗口的特定键回调函数
glutoverlayDisplayFunc--注册当前窗口的重叠层显示回调函数
glutPassiveMotionFunc--设置当前窗口的被动移动回调函数
glutEntryFunc--设置当前窗口的鼠标进出回调函数
glutspaceballMotionFunc--设置当前窗口的空间球移动回调函数
glutspaceballRotateFunc--设置当前窗口的空间球旋转回调函数
glutspaceballButtonFunc--设置当前窗口的空间球按键回调函数
glutButtonBoxFunc--设置当前窗口的拨号按键盒按键回调函数
glutDialsFunc--设置当前窗口的拨号按键盒拨号回调函数
glutTabletMotionFunc--设置图形板移动回调函数
glutTabletButtonFunc--设置当前窗口的图形板按键回调函数
glutMenustatusFunc--设置全局的菜单状态回调函数
glutTimerFunc--注册按一定时间间隔触发的定时器回调函数
颜色素引映射表管理
glutsetColor--设置当前窗口当前层一个颜色表单元的颜色
glutGetColor--获得指定的索引颜色
glutCopyColormap--将逻辑颜色表从指定的窗口拷贝到当前窗口
状态检索
glutGet--检索指定的GLUT状态
glutLayerGet--检索属于当前窗口重叠层的 GLU T状态
glutDeviceGet--检索GLUT设备信息
glutGetModifiers--返回修饰键在引起某些回调的事件发生时的状态
glutExtensionsupported--判别当前OpenGL版本是否支持给定的OpenGL扩展
字体绘制
glutBltmapCharcter--绘制一个位图字符
glutBitmapwidth--返回一个位图字符的宽度
glutstrokeCharcter--绘制一个笔画字符
glutstrokewidth--返回一个笔画字体的宽度
几何图形绘制
glutSolidsphere,glutwiresphere--绘制实心球体和线框球体
glutsolidCube,glutwireCube--绘制实心立方体和线框立方体
glutsolidCone,glutwireCone--绘制实心圆锥体和线框圆锥体
glutsolidTorus,glutwireTorus--绘制实心圆环和线框圆环
glutSolidDOdeCahedroll,glLltwiFeDOdechedfotl--绘制实心
十二面体和线框十二面体
glutSolidOctahedron,glutWireOctahedron--绘制买心八面体和线框八面体
glutsolldTetrahedron,glutwireTetrahedron--绘制实心四面体和线框四面体
glutSollelcosahedron,glutwirelcosahedron--绘制实心二十面体和线框二十面体
glutsolidTeapot,glutwireTeapot--绘制实心茶壶和线框茶壶
14 Mar 2009
Basic4GL
Basic4GL is a free BASIC programming language for Win32 platforms with built in OpenGL v1.1 support.
Basic4GL is a compiler and virtual machine, using a easy, simple syntax based on traditional BASIC. It is designed to be an easy to learn, easy to use language for writing games, 3D demos and utilities without all the setup hassle associated with most language compilers.
##CONTINUE##
Basic4GL was written for anyone who:
- Wants a free, easy to learn language to get into programming
- Wants to learn OpenGL, or wants an easy to use environment for playing around with OpenGL, testing out ideas, making concept prototypes, e.t.c
- Wants to write 3D games and demos.
If you want to know more, please following the link:
http://www.basic4gl.net/