为什么我的世界为什么不能玩会显示wyworldcan,topen

为什么我的世界手机版的进不去,总是出现一句话 “My World&can't be opener_百度知道
为什么我的世界手机版的进不去,总是出现一句话 “My World&can't be opener
我有更好的答案
手机?还是电脑?建议重新下载个我的世界这个我也没有遇到过 也不知道怎么解决- -
采纳率:73%
额,翻译:我的世界不能打开原因应该是版本太久或者是需要重下
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。OpenFcGl 使用说明
OpenFcGl V5.0 使用说明
&&& OpenFcGl32W.dll是一个基于OpenGL的Forcal扩展动态库。
&&& OpenFcGl试图输出OpenGl的绝大部分函数并加以扩展(目前仅进行了部分工作),使之能方便地绘制三维图形。
&&& OpenFcGl中的函数目前有四种:以gl开头的是OpenGl32中的标准OpenGl函数;以glu开头的是glu32中的辅助OpenGl函数;以gle开头的是为方便与OpenGl和绘图窗口交互而扩展的函数;以fg开头的是OpenFcGl扩展的实用绘图函数,目前主要是一些绘制数学函数图形的函数。OpenFcGl努力保证这些函数在运行时的安全性,即无论以何种顺序使用这些函数,程序都不会崩溃(这也是所有forcal二级函数应具有的特点),但用户应该知道:只有正确地使用这些函数,才能充分发挥它们的性能。充分了解每一个要使用的函数的性能是非常必要的。
&&& OpenFcGl中绝大多数的OpenGl函数(以gl或glu开头)的用法与在OpenGl中完全相同,但也有少数函数不一样,在使用中要主要这些差别。
&&& OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft
Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。值得一提的是,随着Microsoft公司在Windows
NT和最新的Windows
95中提供了OpenGL标准及OpenGL三维图形加速卡的推出,OpenGL将在微机中有广泛地应用,同时也为广大用户提供了在微机上使用以前只能在高性能图形工作站上运行的各种软件的机会。
3.1 OpenGL的屏幕坐标与函数自变量的变化范围
坐标的中心在屏幕中心,X轴由左向右,Y轴由下向上,Z轴由里向外(屏幕以里为负值,屏幕以外为正值),三个坐标轴组成右手坐标系。注意:图象必须被绘制在屏幕里面才能够看到。
&&& 通常,屏幕坐标与函数自变量的变化范围并不一致,例如函数:z(x,y)=x+y,x取[-3,3],y取[-3,3],则z的取值范围为[-6,6]。可以将该函数的图象绘制在屏幕的任何位置,例如:X[0,10],Y[0,10],Z[-10,-20]。
3.2 用键盘移动屏幕坐标
&&& →:坐标原点沿X轴正向向右移动;
&&& ←:坐标原点沿X轴负向向左移动;
&&& ↑:坐标原点沿Y轴正向向上移动;
&&& ↓:坐标原点沿Y轴负向向下移动;
&&& PageUp: 坐标原点沿Z轴负向向里移动;
&&& PageDown:坐标原点沿Z轴正向向外移动;
&&& Home:坐标复位。
3.3 用键盘使图象旋转
&&& 在OpenFcGl中设置了三个可由键盘操纵的数,这三个数可由函数gleAngle[i]获得,使用这三个数并与函数glRotated[...]配合可使图象产生旋转。
&&& Shift + →: 使gleAngle[1]值增加;
&&& Shift + ←: 使gleAngle[1]值减少;
&&& Shift + ↑: 使gleAngle[2]值增加;
&&& Shift + ↓: 使gleAngle[2]值减少;
&&& Shift + PageUp: 使gleAngle[3]值减少;
&&& Shift + PageDown: 使gleAngle[3]值增加;
&&& Shift + Home: 使gleAngle[i]值为0。
&&& 在每一个绘图单元前加上以下代码,可用键盘操纵图象沿X、Y、Z轴旋转:
&&& glRotated[gleAngle(1),1,0,0];
//使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0]; //使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1];
//使图象沿Z轴旋转
3.4 看不到绘制的图象怎么办
&&& 连续按PageUp键,使图象往屏幕里移动,即可看到图象。
&&& 通常,使用MForcal的源程序格式书写OpenFcGl的源程序。建议使用以下基本格式:
gleDrawScene(HFor(&Draw&)),stop();&&&&&
//(1)启动场景绘制,就退出
//... ...&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//(2)一些函数定义
initScene()=&&&&&&&&&&&&&&&&&&&&&&&&&&&
//(3)定义初始化函数
&&& gleClear()&&&&&&&&&&&&&&&&&&&&&&&&&
//(4)清理已经不再使用的空间
&&& //在这里放置初始化代码
Draw()=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//(5)场景绘制函数
&&& if[gleIsInitScene(),initScene()],&&
//(6)需要初始化场景时,就执行初始化函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&
//(7)清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//(8)重置视图
&&& glTranslated[0,0,-20],&&&&&&&&&&&&&
//(9)移动坐标,向屏幕里移动20个单元
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//(10)设置颜色
&&& glePrint[&Hello OpenFcGl !&]&&&&&&&
//(11)绘制英文字符串
&&& 说明:
&&& (1)先通过函数gleDrawScene(HFor(&Draw&))将场景绘制函数&Draw&的句柄告诉OpenFcGl,然后用stop()结束该模块的执行。通过场景绘制函数,OpenFcGl会执行该模块的其余部分。
&&& (2)可以在这里定义一些要用到的函数。
&&& (3)自定义初始化函数initScene(),仅在需要时定义该函数。
(4)清理已经不再使用的空间,这些空间是以前绘图时申请的,重新绘图时,这些空间已经成为垃圾。如果有此语句,必须为初始化函数代码的第一个语句。
&&& (5)自定义场景绘制函数Draw(),该函数的代码会被OpenFcGl循环执行。
&&& (6)这句仅在设置了初始化函数时添加,如果有此语句,必须为场景绘制代码的第一个语句。其中gleIsInitScene()用于判断是否需要对场景进行初始化。
(7)从这一句开始,场景绘制才真正开始。此语句不可缺少,必须放在真正场景绘制代码的最前面。注意glClear()与前面的gleClear()是不一样的。
(8)、(9)、(10)、(11)语句组成了一个绘图单元。第(8)语句通常为每一个绘图单元的第一句,其功能是将绘图的起点重新设置到预定的初始位置。其余各句请参考源代码中的说明,不赘述。
5.1 一元函数图象
(::hF)= hF=HFor(&f&);&&&&&&&&&&&&&&&&&&&
//获得函数f的句柄,保存在模块变量hF中
gleDrawScene[HFor(&Scene&)],stop();&&&&&
//设置场景绘制函数后退出
f(x)=x*sin[x];&&&&&&&&&&&&&&&&&&&&&&&&&&
//一元函数定义
Scene(::hF)=
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[0,0,-10],&&&&&&&&&&&&&&
//移动坐标,向屏幕里移动10个单元
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&&
//设置颜色
&&& fgPlot[hF,-10,10,FG_AXES,-3,3,-2,2]&
//绘制一元函数图象
gleDrawScene[HFor(&Scene&)],stop();&&&&&&//设置场景绘制函数后退出
f(x,y)=(x^2-2*x)*exp(-(x^2)-y^2-x*y);
(::Rot)=Rot=0;&&&&&&&&&&&&&&&&&&&&&&&&&&
//定义自动常量
Scene(::Rot)=
&&& glClear[],
&&& glLoadIdentity[],
&&& glTranslated[0,0,-20],
&&& glColor3d[0,1,0],&&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glRotated[Rot++,1,1,1],&&&&&&&&&&&&&
//使图象连续旋转
&&& fgPlot3d[HFor(&f&),-3,3,-3,3]
gleDrawScene[HFor(&Scene&)],stop();&&&&&
//设置场景绘制函数后退出
f(x,y)=sin[sqrt(x*x+y*y)];
initScene()=&&&&&&&&&&&&&&&&&&&&&&&&&&&
&//定义初始化函数
&&& gleAngle(90,180,90)&&&&&&&&&&&&&&&&&&//设置重置视图初始位置
Scene()=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //场景绘制函数
&&& if[gleIsInitScene(),initScene()],&&&
//需要初始化场景时,就执行初始化函数
&&& glClear[],
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&&
//设置颜色
&&& gleAxesAngle[],&&&&&&&&&&&&&&&&&&&&&
//显示坐标和旋转角度
&&& glLoadIdentity[],
&&& glTranslated[0,0,-20],
&&& glColor3d[0,1,0],&&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glRotated[gleAngle(1),1,0,0],&&&&&&&
//使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],&&&&&&&
//使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1],&&&&&&&
//使图象沿Z轴旋转
&&& fgPlot3d[HFor(&f&),-5,5,-5,5,FG_NOMESH]
gleDrawScene[HFor(&Scene&)],stop();&&&&&
// 设置场景绘制函数后退出
(::yRot,xyzRot)=yRot=0,xyzRot=0;
Scene(::yRot,xyzRot)=
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&&
// 清屏和清除深度缓冲区
&&& glLoadIdentity(),&&&&&&&&&&&&&&&&&&&
// 重置当前Modelview矩阵
&&& glTranslated(-1.5,0.0,-6.0),&&&&&&&&
// 向左移动1.5个单元、向屏幕里移动6.0个单元
&&& glRotated(yRot,0,1,0),&&&&&&&&&&&&&&
// 在Y轴旋转金字塔
&&& glBegin(GL_TRIANGLES),&&&&&&&&&&&&&&
// 开始绘制一个三角形
&&&&&&& glColor3d(1.0,0.0,0.0),&&&&&&&&&
&&&&&&& glVertex3d( 0.0, 1.0, 0.0),&&&&&
// 顶(前面)
&&&&&&& glColor3d(0.0,1.0,0.0),&&&&&&&&&
&&&&&&& glVertex3d(-1.0,-1.0, 1.0),&&&&&
// 左(前面)
&&&&&&& glColor3d(0.0,0.0,1.0),&&&&&&&&&
&&&&&&& glVertex3d( 1.0,-1.0, 1.0),&&&&&
// 右(前面)
&&&&&&& glColor3d(1.0,0.0,0.0),&&&&&&&&&
&&&&&&& glVertex3d( 0.0, 1.0, 0.0),&&&&&
// 顶(右面)
&&&&&&& glColor3d(0.0,0.0,1.0),&&&&&&&&&
&&&&&&& glVertex3d( 1.0,-1.0, 1.0),&&&&&
// 左(右面)
&&&&&&& glColor3d(0.0,1.0,0.0),&&&&&&&&&
&&&&&&& glVertex3d( 1.0,-1.0, -1.0),&&&&
// 右(右面)
&&&&&&& glColor3d(1.0,0.0,0.0),&&&&&&&&&
&&&&&&& glVertex3d( 0.0, 1.0, 0.0),&&&&&
// 顶(后面)
&&&&&&& glColor3d(0.0,1.0,0.0),&&&&&&&&&
&&&&&&& glVertex3d( 1.0,-1.0, -1.0),&&&&
// 左(后面)
&&&&&&& glColor3d(0.0,0.0,1.0),&&&&&&&&&
&&&&&&& glVertex3d(-1.0,-1.0, -1.0),&&&&
// 右(后面)
&&&&&&& glColor3d(1.0,0.0,0.0),&&&&&&&&&
&&&&&&& glVertex3d( 0.0, 1.0, 0.0),&&&&&
// 顶(左面)
&&&&&&& glColor3d(0.0,0.0,1.0),&&&&&&&&&
&&&&&&& glVertex3d(-1.0,-1.0,-1.0),&&&&&
// 左(左面)
&&&&&&& glColor3d(0.0,1.0,0.0),&&&&&&&&&
&&&&&&& glVertex3d(-1.0,-1.0, 1.0),&&&&&
// 右(左面)
&&& glEnd(),&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// 完成金字塔的绘制
&&& glLoadIdentity(),&&&&&&&&&&&&&&&&&&&
// 重置当前Modelview矩阵
&&& glTranslated(1.5,0.0,-7.0),&&&&&&&&&
// 向右移动个1.5单元向屏幕里移动7个单元
&&& glRotated(xyzRot,1,1,1),&&&&&&&&&&&&
// 在X、Y、Z轴转动正方体
&&& glBegin(GL_QUADS),&&&&&&&&&&&&&&&&&&
// 绘制一个正方体
&&&&&&& glColor3d(0.0,1.0,0.0),&&&&&&&&&
// 设置蓝色
&&&&&&& glVertex3d( 1.0, 1.0,-1.0),&&&&&
// 右上(顶面)
&&&&&&& glVertex3d(-1.0, 1.0,-1.0),&&&&&
// 左上(顶面)
&&&&&&& glVertex3d(-1.0, 1.0, 1.0),&&&&&
// 左下(顶面)
&&&&&&& glVertex3d( 1.0, 1.0, 1.0),&&&&&
// 右下(顶面)
&&&&&&& glColor3d(1.0,0.5,0.0),&&&&&&&&&
// 设置橘红色
&&&&&&& glVertex3d( 1.0,-1.0, 1.0),&&&&&
// 右上(底面)
&&&&&&& glVertex3d(-1.0,-1.0, 1.0),&&&&&
// 左上(底面)
&&&&&&& glVertex3d(-1.0,-1.0,-1.0),&&&&&
// 左下(底面)
&&&&&&& glVertex3d( 1.0,-1.0,-1.0),&&&&&
// 右下(底面)
&&&&&&& glColor3d(1.0,0.0,0.0),&&&&&&&&&
// 设置红色
&&&&&&& glVertex3d( 1.0, 1.0, 1.0),&&&&&
// 右上(前面)
&&&&&&& glVertex3d(-1.0, 1.0, 1.0),&&&&&
// 左上(前面)
&&&&&&& glVertex3d(-1.0,-1.0, 1.0),&&&&&
// 左下(前面)
&&&&&&& glVertex3d( 1.0,-1.0, 1.0),&&&&&
// 右下(前面)
&&&&&&& glColor3d(1.0,1.0,0.0),&&&&&&&&&
// 设置黄色
&&&&&&& glVertex3d( 1.0,-1.0,-1.0),&&&&&
// 右上(后面)
&&&&&&& glVertex3d(-1.0,-1.0,-1.0),&&&&&
// 左上(后面)
&&&&&&& glVertex3d(-1.0, 1.0,-1.0),&&&&&
// 左下(后面)
&&&&&&& glVertex3d( 1.0, 1.0,-1.0),&&&&&
// 右下(后面)
&&&&&&& glColor3d(0.0,0.0,1.0),&&&&&&&&&
// 设置蓝色
&&&&&&& glVertex3d(-1.0, 1.0, 1.0),&&&&&
// 右上(左面)
&&&&&&& glVertex3d(-1.0, 1.0,-1.0),&&&&&
// 左上(左面)
&&&&&&& glVertex3d(-1.0,-1.0,-1.0),&&&&&
// 左下(左面)
&&&&&&& glVertex3d(-1.0,-1.0, 1.0),&&&&&
// 右下(左面)
&&&&&&& glColor3d(1.0,0.0,1.0),&&&&&&&&&
// 设置紫蓝色
&&&&&&& glVertex3d( 1.0, 1.0,-1.0),&&&&&
// 右上(右面)
&&&&&&& glVertex3d( 1.0, 1.0, 1.0),&&&&&
// 左上(右面)
&&&&&&& glVertex3d( 1.0,-1.0, 1.0),&&&&&
// 左下(右面)
&&&&&&& glVertex3d( 1.0,-1.0,-1.0),&&&&&
// 右下(右面)
&&& glEnd(),&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// 完成正方体绘制
&&& yRot=yRot+0.2,&&&&&&&&&&&&&&&&&&&&&&
// 增加三角形的旋转变量
&&& xyzRot=xyzRot-0.15&&&&&&&&&&&&&&&&&&
// 减小矩形的旋转变量
/////////////////////////////////////////////////////////////////////
///////& 请修改用户定义部分。若没有特殊的需要,其他部分无需修改
/////////////////////////////////////////////////////////////////////
//#LOAD{&dll\openfcgl32W&}&&&&&&&&&&&
//本程序由OpenFcGl32W.dll提供支持
gleDrawScene(HFor(&Scene&)),stop(); &
//启动场景绘制,就退出
//让图形随鼠标移动。factor为比例因子,factor越大则移动幅度越大。factor=0进行初始化。
fcglFollowMouse(factor:x,y,xx,yy,xxx,yyy:fcglFollowMouse,xMouse,yMouse)=
&&& if[!factor,fcglFollowMouse=0,return(0)],
&&& if[gleGetMouseMsg(WM_LBUTTONDOWN,&x,&y),fcglFollowMouse=1,xMouse=x,yMouse=y],
&&& gleGetWindowSize[&xxx,&yyy],
&&& if[fcglFollowMouse,gleGetMouseMsg(WM_MOUSEMOVE,&xx,&yy),gleAngle[1,gleAngle(1)+(yy-yMouse)/yyy*factor],gleAngle[2,gleAngle(2)+(xx-xMouse)/xxx*factor]],
&&& if[gleGetMouseMsg(WM_LBUTTONUP,&xx,&yy),fcglFollowMouse=0],
&&& glRotated[gleAngle(1),1,0,0],
&&& //使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],
&&& //使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1]&
&&& //使图象沿Z轴旋转
//x,y,z为要获得的屏幕坐标,需要引用参数&调用。
//i,j,k为点阵坐标。
//a,b,c,Alpha,Beta,Gamma为点阵的6个参数。
//规定:点阵原点即屏幕原点,点阵a轴即屏幕x轴,点阵b轴在屏幕x,y轴决定的平面内。
fcglTransCrystalAxis(x,y,z,i,j,k,a,b,c,Alpha,Beta,Gamma:_Alpha,_Beta,_Gamma,m)=
&&& _Alpha=Alpha/180*3.1415926, _Beta=Beta/180*3.1415926,
_Gamma=Gamma/180*3.1415926,
&&& x=i*a+j*b*cos(_Gamma)+k*c*cos(_Beta),
&&& m=[cos(_Alpha)^2+cos(_Beta)^2]/[1+cos(_Gamma)],
&&& y=j*b*sin(_Gamma)+k*c*sqrt[m-cos(_Beta)^2],
&&& z=k*c*sqrt[1-m]
//绘制连接两个点阵点的线段。
fcglCrystalLine(i1,j1,k1,i2,j2,k2,a,b,c,Alpha,Beta,Gamma:x,y,z)=
&&& glBegin(GL_LINES),
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i1,j1,k1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i2,j2,k2,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&& glEnd()
//绘制点阵平面,按逆时针输入坐标。
fcglCrystalQuads(i1,j1,k1,i2,j2,k2,i3,j3,k3,i4,j4,k4,a,b,c,Alpha,Beta,Gamma:x,y,z)=
&&& glBegin(GL_QUADS),
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i1,j1,k1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i2,j2,k2,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i3,j3,k3,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i4,j4,k4,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&& glEnd()
///////////////////////////////////////////////////////////////////////////////////////////
// 用 户 定 义 开 始
///////////////////////////////////////////////////////////////////////////////////////////
DrawCellEdge(a,b,c,Alpha,Beta,Gamma,EdgeR,EdgeG,EdgeB)=&&&&&&
//绘制晶胞晶棱的函数
&&& glColor3d[EdgeR,EdgeG,EdgeB],
&&& fcglCrystalLine(0,0,0,0,1,0,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(0,1,0,0,1,1,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(0,1,1,0,0,1,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(0,0,1,0,0,0,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(0,0,0,1,0,0,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(1,0,0,1,0,1,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(1,0,1,0,0,1,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(1,0,0,1,1,0,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(1,1,0,0,1,0,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(1,1,0,1,1,1,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(1,0,1,1,1,1,a,b,c,Alpha,Beta,Gamma),
&&& fcglCrystalLine(1,1,1,0,1,1,a,b,c,Alpha,Beta,Gamma)
DrawCellDot(::Ball)=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//绘制顶点的函数
&&& gluSphere[Ball,0.1,10,10]
DrawCellApex(a,b,c,Alpha,Beta,Gamma,ApexR,ApexG,ApexB:x,y,z)=
//绘制晶胞顶点
&&& glColor3d[ApexR,ApexG,ApexB],
&&& fcglTransCrystalAxis(&x,&y,&z,0,0,0,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&& fcglTransCrystalAxis(&x,&y,&z,0,0,1,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&& fcglTransCrystalAxis(&x,&y,&z,0,1,0,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&& fcglTransCrystalAxis(&x,&y,&z,0,1,1,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&& fcglTransCrystalAxis(&x,&y,&z,1,0,0,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&& fcglTransCrystalAxis(&x,&y,&z,1,0,1,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&& fcglTransCrystalAxis(&x,&y,&z,1,1,0,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&& fcglTransCrystalAxis(&x,&y,&z,1,1,1,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z]
//绘制晶胞(晶棱及顶点)。不要在绘制晶棱及顶点的函数中使用显示列表。
//a,b,c,Alpha,Beta,Gamma:晶胞参数。EdgeR,EdgeG,EdgeB:晶棱颜色。ApexR,ApexG,ApexB:顶点颜色。
//该函数在显示列表中绘制图形,返回一个显示列表序号。
//在初始化场景时调用该函数,在场景绘制代码中执行该函数返回的显示列表。
DrawCrystalCell(a,b,c,Alpha,Beta,Gamma,EdgeR,EdgeG,EdgeB,ApexR,ApexG,ApexB:x,y,z,list)=
&&& list=glGenLists[1],
&&& glNewList[list,GL_COMPILE],
DrawCellEdge(a,b,c,Alpha,Beta,Gamma,EdgeR,EdgeG,EdgeB),
//绘制晶胞晶棱
DrawCellApex(a,b,c,Alpha,Beta,Gamma,ApexR,ApexG,ApexB),
//绘制晶胞顶点
&&& glEndList[],
initScene(::MouseSpeed,Centre,CellX,CellY,CellZ,&&&&&&&&&&&&&&&
//初始化函数
CellA,CellB,CellC,CellAlpha,CellBeta,CellGamma,EdgeR,EdgeG,EdgeB,ApexR,ApexG,ApexB,Ball)=
&&& gleClear(),
&&& Ball=gluNewQuadric[], gluQuadricDrawStyle[Ball,GLU_FILL],gluQuadricNormals[Ball,GLU_SMOOTH],
&&& gleAxis(0,0,-12),gleAngle(0,0,0),&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//设置图形初始位置
&&& MouseSpeed=2,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//鼠标移动速度
&&& Centre=0,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//0:点阵原点在屏幕中心;其他值:点阵中心在屏幕中心
&&& CellX=3, CellY=3, CellZ=3,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//X,Y,Z方向晶胞个数
&&& ApexR=1, ApexG=0, ApexB=1,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//晶胞顶点颜色
&&& CellA=1, CellB=1 ,CellC=1, CellAlpha=90, CellBeta=90,
CellGamma=120,&&
//晶胞参数
&&& EdgeR=0, EdgeG=1, EdgeB=0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//晶胞晶棱颜色
///////////////////////////////////////////////////////////////////////////////////////////
// 用 户 定 义 结 束
///////////////////////////////////////////////////////////////////////////////////////////
Scene(:i,j,k,x,y,z:listDrawCrystalCell,MouseSpeed,Centre,CellX,CellY,CellZ,
CellA,CellB,CellC,CellAlpha,CellBeta,CellGamma,EdgeR,EdgeG,EdgeB,ApexR,ApexG,ApexB)=
&&& if{ gleIsInitScene(),&&&&&&&&&&&&
//需要初始化场景时,就执行初始化函数
&&&&&&& initScene(),
&&&&&&& listDrawCrystalCell=DrawCrystalCell(CellA,CellB,CellC,CellAlpha,CellBeta,CellGamma,EdgeR,EdgeG,EdgeB,ApexR,ApexG,ApexB),
&&&&&&& fcglFollowMouse(0)
&&& if{ gleVirtualKey(116),&&&&&&&&&&
//按F5时,重置参数
&&&&&&& gleVirtualKey(116,0),
&&&&&&& gleReSetPara
&&&&&&&&&&& {&&
&鼠标移动速度&, &MouseSpeed,
&&&&&&&&&&&&&&&
&0:点阵原点在屏幕中心;其他值:点阵中心在屏幕中心&, &Centre,
&&&&&&&&&&&&&&&
&X方向晶胞个数&, &CellX,
&&&&&&&&&&&&&&&
&Y方向晶胞个数&, &CellY,
&&&&&&&&&&&&&&&
&Z方向晶胞个数&, &CellZ,
&&&&&&&&&&&&&&&
&晶胞参数之 a&, &CellA,
&&&&&&&&&&&&&&&
&晶胞参数之 b&, &CellB,
&&&&&&&&&&&&&&&
&晶胞参数之 c&, &CellC,
&&&&&&&&&&&&&&&
&晶胞参数之 α&, &CellAlpha,
&&&&&&&&&&&&&&&
&晶胞参数之 β&, &CellBeta,
&&&&&&&&&&&&&&&
&晶胞参数之 γ&, &CellGamma,
&&&&&&&&&&&&&&&
&晶胞晶棱颜色之 Red&, &EdgeR,
&&&&&&&&&&&&&&&
&晶胞晶棱颜色之 Green&, &EdgeG,
&&&&&&&&&&&&&&&
&晶胞晶棱颜色之 Blue&, &EdgeB,
&&&&&&&&&&&&&&&
&晶胞顶点颜色之 Red&, &ApexR,
&&&&&&&&&&&&&&&
&晶胞顶点颜色之 Green&, &ApexG,
&&&&&&&&&&&&&&&
&晶胞顶点颜色之 Blue&, &ApexB
&&&&&&&&&&& },
&&&&&&& glDeleteLists(listDrawCrystalCell,1),
&&&&&&& listDrawCrystalCell=DrawCrystalCell(CellA,CellB,CellC,CellAlpha,CellBeta,CellGamma,EdgeR,EdgeG,EdgeB,ApexR,ApexG,ApexB)
&&& glClear[],&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glColor3d[1,0,0],
&&& gleAxesAngle[],&&&&&&&&&&&&&&
//显示屏幕坐标及旋转角度
&&& glLoadIdentity[],&&&&&&&&&&&&
//重置视图
&&& fcglFollowMouse(MouseSpeed),&
//鼠标跟随
&&& //按F4时,显示帮助
if[gleVirtualKey(115),gleVirtualKey(115,0),gleMessageBox(&按下鼠标左键,图形将随鼠标移动,放开鼠标左键,图形停止移动。\r\n按F5进行参数设置。&,&图形演示说明&,64)],
&&& if[Centre,glTranslated(-CellX/2,-CellY/2,-CellZ/2)],
&&& while{& i&CellX,j=0,
&&&&&&&&&&& while{&
j&CellY,k=0,
&&&&&&&&&&&&&&&&&&&
while{& k&CellZ,
&&&&&&&&&&&&&&&&&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,i,j,k,CellA,CellB,CellC,CellAlpha,CellBeta,CellGamma),
&&&&&&&&&&&&&&&&&&&&&&&&&&&
glTranslated[x,y,z],&&&&&&&&&&&&
//移动坐标
&&&&&&&&&&&&&&&&&&&&&&&&&&&
glCallList[listDrawCrystalCell],
//绘制图形
&&&&&&&&&&&&&&&&&&&&&&&&&&&
glTranslated[-x,-y,-z],&&&&&&&&&
//恢复坐标
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& },
&&&&&&&&&&& i++
&&& OpenGl显示列表是一组预先存储起来的OpenGl命令。显示列表可以在任何地方被调用,并按顺序立即执行。显示列表是经过编译的,因而执行效率比较高。
&&& 要应用显示列表,首先应创建一个显示列表(创建显示列表要在初始化函数中进行),由()函数和()函数来完成。执行显示列表的函数是()函数或()函数。管理和使用显示列表的函数还有()、()和()等函数。
&&& 使用显示列表的例子:[]、[]、[]。
尽管显示列表给应用程序提供了一个提高整体性能的机制,但并不能任意使用显示列表。因为启动显示列表需要一定的开销,如果这种开销不能被执行命令的开销所抵消,那就适得其反了。显示列表可以应用于:
&&& 第一,由大量的数据构造的几何模型,且是多次被调用或是几何模型要发生运行。
&&& 第二,较高维数的矩阵操作。在图形学算法中,需要涉及大量的矩阵运算,特别是矩阵求逆运算。
&&& 第三,光栅位图、图像和纹理操作。应用显示列表可调整像素数据,使其适合硬件处理的格式。
第四,光照计算。光照具有十分复杂的数学运算,如果场景中不同材质的物体较多且需要变化,把材质放入显示列表中,能发挥显示列表的优势。
&&& 第五,OpenGl使用库中标准二次曲面、Bezier曲线及曲面、NURBS曲线及曲面的绘制等等。
&&& 使用显示列表要注意以下事项:
&&& 第一,显示列表中所有函数的参数是当前的,不会受今后变化的影响。
&&& 第二,封装在显示列表中的变换操作会对后继绘图产生影响。
&&& 第三,显示列表不可对其进行外部干预。
&&& 第四,显示列表需要精心管理。
&&& 第五,不能在显示列表中使用的函数有:glIsList(),(),(),glFeedbackBuffer(),glSelectBuffer(),glRenderMode(),glFlush(),glFinish(),glIsEnabled(),glGet()。
&&& 实体模块是用OpenGl命令绘制任意实体的MForcal的模块源程序。模块写好后,一般不需改动,仅在需要时调用即可。显然,在模块中使用显示列表创建实体是非常方便的。
&&& 例如,下面的程序可作为模块来使用,可在任意的场景绘制单元中加入鼠标支持:
//让图形随鼠标移动。factor为比例因子,factor越大则移动幅度越大。factor=0进行初始化。
~fcglFollowMouse(factor:x,y,xx,yy,xxx,yyy:fcglFollowMouse,xMouse,yMouse)={&&& if[!factor,fcglFollowMouse=0,return(0)],&&& if[gleGetMouseMsg(WM_LBUTTONDOWN,&x,&y),fcglFollowMouse=1,xMouse=x,yMouse=y],&&& gleGetWindowSize[&xxx,&yyy],&&& if[fcglFollowMouse,gleGetMouseMsg(WM_MOUSEMOVE,&xx,&yy),gleAngle[1,gleAngle(1)+(yy-yMouse)/yyy*factor],gleAngle[2,gleAngle(2)+(xx-xMouse)/xxx*factor]],&&& if[gleGetMouseMsg(WM_LBUTTONUP,&xx,&yy),fcglFollowMouse=0],&&& glRotated[gleAngle(1),1,0,0],
&&& //使图象沿X轴旋转&&& glRotated[gleAngle(2),0,1,0],
&&& //使图象沿Y轴旋转&&& glRotated[gleAngle(3),0,0,1]&
&&& //使图象沿Z轴旋转};
&&& 再如,下面的模块可用在晶体图的绘制中:
//x,y,z为要获得的屏幕坐标,需要引用参数&调用。//i,j,k为点阵坐标。//a,b,c,Alpha,Beta,Gamma为点阵的6个参数。//规定:点阵原点即屏幕原点,点阵a轴即屏幕x轴,点阵b轴在屏幕x,y轴决定的平面内。
~fcglTransCrystalAxis(x,y,z,i,j,k,a,b,c,Alpha,Beta,Gamma:_Alpha,_Beta,_Gamma,m)={&&& _Alpha=Alpha/180*3.1415926, _Beta=Beta/180*3.1415926,
_Gamma=Gamma/180*3.1415926,&&& x=i*a+j*b*cos(_Gamma)+k*c*cos(_Beta),&&& m=[cos(_Alpha)^2+cos(_Beta)^2]/[1+cos(_Gamma)],&&& y=j*b*sin(_Gamma)+k*c*sqrt[m-cos(_Beta)^2],&&& z=k*c*sqrt[1-m]};
//绘制连接两个点阵点的线段。
~fcglCrystalLine(i1,j1,k1,i2,j2,k2,a,b,c,Alpha,Beta,Gamma:x,y,z)={&&& glBegin(GL_LINES),&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i1,j1,k1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i2,j2,k2,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),&&& glEnd()};
//绘制点阵平面,按逆时针输入坐标。
~fcglCrystalQuads(i1,j1,k1,i2,j2,k2,i3,j3,k3,i4,j4,k4,a,b,c,Alpha,Beta,Gamma:x,y,z)={&&& glBegin(GL_QUADS),&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i1,j1,k1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i2,j2,k2,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i3,j3,k3,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),&&&&&&& fcglTransCrystalAxis(&x,&y,&z,i4,j4,k4,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),&&& glEnd()};
//绘制简单晶胞(晶棱及顶点)。顶点由自定义函数DrawCellDot()绘制,该函数在调用模块中定义,被自动调用,不要在该函数中使用显示列表。
//a,b,c,Alpha,Beta,Gamma:晶胞参数。EdgeR,EdgeG,EdgeB:晶棱颜色。ApexR,ApexG,ApexB:顶点颜色。
//该函数在显示列表中绘制图形,返回一个显示列表序号。
//在初始化场景时调用该函数,在场景绘制代码中执行该函数返回的显示列表。
~fcglDrawCrystalPCell(a,b,c,Alpha,Beta,Gamma,EdgeR,EdgeG,EdgeB,ApexR,ApexG,ApexB:x,y,z,list)=
&&& list=glGenLists[1],
&&& glNewList[list,GL_COMPILE],
//绘制点阵单元
glColor3d[EdgeR,EdgeG,EdgeB],
&&&&&&& glBegin(GL_LINES),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,0,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,1,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,1,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,1,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,1,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,0,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,0,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,0,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,0,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,0,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,0,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,0,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,0,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,0,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,0,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,1,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,1,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,1,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,1,0,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,1,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,0,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,1,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,1,1,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&&&&&&
fcglTransCrystalAxis(&x,&y,&z,0,1,1,a,b,c,Alpha,Beta,Gamma),glVertex3d(x,y,z),
&&&&&&& glEnd(),
//绘制顶点
glColor3d[ApexR,ApexG,ApexB],
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,0,0,0,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,0,0,1,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,0,1,0,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,0,1,1,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,1,0,0,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,1,0,1,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,1,1,0,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&&&&&& fcglTransCrystalAxis(&x,&y,&z,1,1,1,a,b,c,Alpha,Beta,Gamma),glTranslated[x,y,z],gleCalFor(&DrawCellDot&),glTranslated[-x,-y,-z],
&&& glEndList[],
&&& OpenFcGl试图输出OpenGl的绝大部分函数并加以扩展(目前仅进行了部分工作),使之能方便地绘制三维图形。
&&& OpenFcGl中的函数目前有四种:以gl开头的是OpenGl32中的标准OpenGl函数;以glu开头的是glu32中的辅助OpenGl函数;以gle开头的是为方便与OpenGl和绘图窗口交互而扩展的函数;以fg开头的是OpenFcGl扩展的实用绘图函数,目前主要是一些绘制数学函数图形的函数。OpenFcGl努力保证这些函数在运行时的安全性,即无论以何种顺序使用这些函数,程序都不会崩溃(这也是所有forcal二级函数应具有的特点),但用户应该知道:只有正确地使用这些函数,才能充分发挥它们的性能。充分了解每一个要使用的函数的性能是非常必要的。
&&& 根据函数的使用位置,OpenFcGl函数可分为三类:进行场景绘制的函数,用于初始化场景的函数,可在任意位置使用的函数。场景绘制函数
具有循环执行的特点,显然可用于场景的初始化;而初始化函数仅在切换场景时执行一次,通常不能用在场景绘制函数之中。
&&& OpenFcGl中绝大多数的OpenGl函数(以gl或glu开头)的用法及功能与在OpenGl中完全相同,但也有少数函数不一样,在使用中要主要这些差别。
其中,函数列表中标记为“有扩展”的函数为与OpenGl函数的用法及功能完全相同且有所扩展;标记为“有区别”的函数与OpenGl函数的功能完全相同,但用法有区别。
与OpenGl函数相比
清除屏幕以及深度缓存
场景绘制函数
场景绘制函数
场景绘制函数
场景绘制函数
场景绘制函数
场景绘制函数
设置三维绘图点
场景绘制函数
使对象围绕轴进行旋转
场景绘制函数
定义点的尺寸
场景绘制函数
场景绘制函数
设置线的虚点模式
场景绘制函数
设置OpenGL的各种功能
场景绘制函数
取消OpenGL的各种功能
场景绘制函数
多边形模式设置
场景绘制函数
设置屏幕清屏的颜色
初始化函数
执行显示列表
场景绘制函数
设置显示列表序列的基序号
场景绘制函数
执行显示列表序列
场景绘制函数
创建一个或多个连续的显示列表,返回显示列表的基序号
初始化函数
建立显示列表,并编译和执行显示列表
初始化函数
结束建立显示列表
初始化函数
设置二维绘图点
场景绘制函数
设置边的可见性
场景绘制函数
将当前矩阵压入堆栈
场景绘制函数
将当前矩阵弹出堆栈
场景绘制函数
场景绘制函数
删除一组连续的显示列表
场景绘制函数
[]或glClear[Mask]:清除屏幕以及深度缓存
Mask:整数,工作方式。
Bitwise OR operators of masks that indicate the buffers
to be cleared. The four masks are as follows.
Buffer to be Cleared
GL_COLOR_BUFFER_BIT
The buffers currently enabled for
color writing.
GL_DEPTH_BUFFER_BIT
The depth buffer.
GL_ACCUM_BUFFER_BIT
The accumulation buffer.
GL_STENCIL_BUFFER_BIT
The stencil buffer.
通常,要把该函数设为场景绘制代码的第一个语句。
[]或glLoadIdentity[... ...]:重置视图
glLoadIdentity[]:将X、Y、Z轴移到屏幕的指定位置(该位置由(SetX,SetY,SetZ)指定)。
glLoadIdentity[... ...]:将X、Y、Z轴移到屏幕的中心位置。
通常在每一个图象绘制之前都要进行此项操作。
[x,y,z]:移动坐标
注意:当移动时,不是以屏幕的中心为起点而是以当前所在位置为起点进行移动。
通常在每一个图象绘制之前都要进行此项操作。
[r,g,b]:设置颜色
三个参数分别是红、绿、蓝的颜色强度值,其取值范围是从0到1。
一些特殊的颜色:[1,0,0]:红色、[0,1,0]:绿色、[0,0,1]:蓝色、[0,0,0]:黑色、[1,1,1]:白色
[mode]:开始绘图
glBegin[mode]与glEnd[]必须成对使用,glBegin[mode]表示一个绘图单元的开始,glEnd[]表示一个绘图单元的结束。这一对函数使您能够绘制任意的图形。
在glBegin[mode]与glEnd[]之间,一般用glVertex3d[...]函数设置绘图点,也可包括glColor3d[r,g,b]设置颜色等函数。mode的取值及意义如下:
GL_POINTS:表示绘制一系列独立的点。
GL_LINES:每两点相连成为线段,因此,在glBegin[i]与glEnd[]之间点的个数必须是2的倍数。
GL_LINE_LOOP:封闭线段。
GL_LINE_STRIP:顶点相连成为折线。
GL_TRIANGLES:每三点相连成为一个三角形,因此,在glBegin[i]与glEnd[]之间点的个数必须是3的倍数。
GL_TRIANGLE_STRIP:相连的三角形带。
GL_TRIANGLE_FAN:相连的三角形扇。
GL_QUADS:每四点相连成为一个四边形,因此,在glBegin[i]与glEnd[]之间点的个数必须是4的倍数。
GL_QUAD_STRIP:相连的四边形带。
GL_POLYGON:绘制简单、凸多边形的边界。
该函数可能返回如下运行错误:
1:glBegin[mode]与glEnd[]没有成对使用。
2:参数mode非法。
[]:结束绘图
glBegin[mode]与glEnd[]必须成对使用,glBegin[mode]表示一个绘图单元的开始,glEnd[]表示一个绘图单元的结束。
该函数可能返回如下运行错误:
1:glBegin[mode]与glEnd[]没有成对使用。
[X,Y,Z]:设置三维绘图点
X,Y,Z设置了屏幕坐标系中的一点。
注意:一般,图形的绘制从顶点开始,要按逆时针方向绘制。
[Angle,Xvector,Yvector,Zvector]:使对象围绕轴进行旋转
Angle为旋转角度,Xvector,Yvector和Zvector一起表示哪一个向量将发生旋转。如果使用(1,0,0)这意味着描述一个向量将沿X轴向右旋转一个单元;如果使用(-1,0,0)这意味着描述一个向量将沿X轴向左旋转一个单元。
[size]:定义点的尺寸
设置点的宽度(以象素为单位)。参数size必须大于0.0,缺省时为1.0。若size&=0,取size=1.0。
gleDrawScene[HFor(&Scene&)],stop();&&&&&&//设置场景绘制函数后退出
Scene(:i)=
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&&
//设置颜色为红色
&&& gleAxesAngle[],&&&&&&&&&&&&&&&&&&&&&
//显示坐标和旋转角度
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[0,0,-20],&&&&&&&&&&&&&&
//移动坐标,向屏幕里移动20个单元
&&& glRotated[gleAngle(1),1,0,0],&&&&&&&
//可由键盘控制使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],&&&&&&&
//可由键盘控制使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1],&&&&&&&
//可由键盘控制使图象沿Z轴旋转
// 绘制一系列大小尺寸不同的点(以象素为基本扩展单元)
&&& glColor3d[0,1,0],&&&&&&&&&&&&&&&&&&&
//设置颜色为绿色
&&& while{i&=10,
&&&&&&& glPointSize(i*2),&&&&&&&&&&&&&&&
//定义点的尺寸
&&&&&&& glBegin(0),
&&&&&&& glVertex3d(-10.0+i*2,0.0,0.0),
&&&&&&& glEnd(),
&&&&&&& i++
[width]:设置线宽
设置线宽(以象素为单位)。参数width必须大于0.0,缺省时为1.0。若width&=0,取width=1.0。
gleDrawScene[HFor(&Scene&)],stop();&&&&&
//设置场景绘制函数后退出
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&&
//设置颜色为红色
&&& gleAxesAngle[],&&&&&&&&&&&&&&&&&&&&&
//显示坐标和旋转角度
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[0,0,-20],&&&&&&&&&&&&&&
//移动坐标,向屏幕里移动20个单元
&&& glRotated[gleAngle(1),1,0,0],&&&&&&&
//可由键盘控制使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],&&&&&&&
//可由键盘控制使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1],&&&&&&&
//可由键盘控制使图象沿Z轴旋转
&&& // 绘制三条不同线型的线段
&&& glEnable (GL_LINE_STIPPLE),
&&& glLineStipple (2, 1*16*16+1),&&&&&&&
/* 点线 */
&&& glLineWidth (5.0),&&&&&&&&&&&&&&&&&&
//设置线段的宽度为 5
&&& glBegin(GL_LINES),
&&&&&&& glColor3d(1.0,0.0,0.0),
&&&&&&& glVertex3d(-10.0,4.0,0.0),
&&&&&&& glVertex3d( 10.0,4.0,0.0),
&&& glEnd(),
&&& glLineStipple (1, 16*16-1),&&&&&&&&&
/* 虚线 */
&&& glLineWidth (3.0),&&&&&&&&&&&&&&&&&&
//设置线段的宽度为 3
&&& glBegin(GL_LINES),
&&&&&&& glColor3d(1.0,1.0,0.0),
&&&&&&& glVertex3d(-10.0,2.0,0.0),
&&&&&&& glVertex3d( 10.0,2.0,0.0),
&&& glEnd(),
&&& glLineStipple(3,16*16*16+12*16*16+4*16+7),/*
&&& glLineWidth (1.0),&&&&&&&&&&&&&&&&&&
//设置线段的宽度为 1
&&& glBegin(GL_LINES),
&&&&&&& glColor3d(0.0,1.0,0.0),
&&&&&&& glVertex3d(-10.0,-2.0,0.0),
&&&&&&& glVertex3d( 10.0,-2.0,0.0),
&&& glEnd(),
&&& glEnable (GL_LINE_STIPPLE)
[factor,pattern]:设置线的虚点模式
设置线为当前的虚点模式。参数pattern是一系列的16位数(0或1),它重复地赋给所指定的线。其中每一位代表一个象素,且从低位开始,1表示用当前颜色绘制一个象素(或比例因子指定的个数),0表示当前不绘制,只移动一个象素位(或比例因子指定的个数)。参数factor是个比例因子,它用来拉伸pattern中的元素,即重复绘制1或移动0,比如,factor为2,则碰到1时就连续绘制2次,碰到0时连续移动2个单元。factor的大小范围限制在1到256之间。在绘制虚点线之前必须先启动一下,即调用函数glEnable(GL_LINE_STIPPLE);若不用,则调用glDisable(GL_LINE_STIPPLE)关闭。
该函数可能返回如下运行错误:1、参数不符合要求。
gleDrawScene[HFor(&Scene&)],stop();&&&&&
//设置场景绘制函数后退出
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&&
//设置颜色为红色
&&& gleAxesAngle[],&&&&&&&&&&&&&&&&&&&&&
//显示坐标和旋转角度
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[0,0,-20],&&&&&&&&&&&&&&
//移动坐标,向屏幕里移动20个单元
&&& glRotated[gleAngle(1),1,0,0],&&&&&&&
//可由键盘控制使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],&&&&&&&
//可由键盘控制使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1],&&&&&&&
//可由键盘控制使图象沿Z轴旋转
&&& // 绘制三条不同线型的线段
&&& glEnable (GL_LINE_STIPPLE),
&&& glLineStipple (2, 1*16*16+1),&&&&&&&
/* 点线 */
&&& glBegin(GL_LINES),
&&&&&&& glColor3d(1.0,0.0,0.0),
&&&&&&& glVertex3d(-10.0,4.0,0.0),
&&&&&&& glVertex3d( 10.0,4.0,0.0),
&&& glEnd(),
&&& glLineStipple (1, 16*16-1),&&&&&&&&&
/* 虚线 */
&&& glBegin(GL_LINES),
&&&&&&& glColor3d(1.0,1.0,0.0),
&&&&&&& glVertex3d(-10.0,2.0,0.0),
&&&&&&& glVertex3d( 10.0,2.0,0.0),
&&& glEnd(),
&&& glLineStipple(3,16*16*16+12*16*16+4*16+7),/*
&&& glBegin(GL_LINES),
&&&&&&& glColor3d(0.0,1.0,0.0),
&&&&&&& glVertex3d(-10.0,-2.0,0.0),
&&&&&&& glVertex3d( 10.0,-2.0,0.0),
&&& glEnd(),
&&& glDisable(GL_LINE_STIPPLE)
[cap]:设置OpenGL的各种功能
与glDisable(cap)配合使用,先用glEnable[cap]设置OpenGL的功能,不用时,用glDisable(cap)取消这种功能。
例如:glEnable(GL_LINE_STIPPLE):启用虚点模式。
The glEnable and
glDisable functions enable and disable various OpenGL graphics
capabilities. Use glIsEnabled or glGet to determine the current
setting of any capability.
Both glEnable and
glDisable take a single argument, cap, which can assume one of the
following values:
GL_ALPHA_TEST
If enabled, do alpha testing. See
glAlphaFunc.
GL_AUTO_NORMAL
If enabled, compute surface normal
vectors analytically when either GL_MAP2_VERTEX_3 or GL_MAP2_VERTEX_4
has generated vertices. See glMap2.
If enabled, blend the incoming RGBA color
values with the values in the color buffers. See glBlendFunc.
GL_CLIP_PLANEi
If enabled, clip geometry against
user-defined clipping plane i. See glClipPlane.
GL_COLOR_LOGIC_OP
If enabled, apply the current logical
operation to the incoming RGBA color and color buffer values. See
glLogicOp.
GL_COLOR_MATERIAL
If enabled, have one or more material
parameters track the current color. See glColorMaterial.
GL_CULL_FACE
If enabled, cull polygons based on their
winding in window coordinates. See glCullFace.
GL_DEPTH_TEST
If enabled, do depth comparisons and
update the depth buffer. See glDepthFunc and glDepthRange.
If enabled, dither color components or
indexes before they are written to the color buffer.
If enabled, blend a fog color into the
post-texturing color. See glFog.
GL_INDEX_LOGIC_OP
If enabled, apply the current logical
operation to the incoming index and color buffer indices. See
glLogicOp.
If enabled, include light i in the
evaluation of the lighting equation. See glLightModel and
GL_LIGHTING
If enabled, use the current lighting
parameters to compute the vertex color or index. If disabled, associate
the current color or index with each vertex. See glMaterial,
glLightModel, and glLight.
GL_LINE_SMOOTH
If enabled, draw lines with correct
filtering. If disabled, draw aliased lines. See glLineWidth.
GL_LINE_STIPPLE
If enabled, use the current line stipple
pattern when drawing lines. See glLineStipple.
GL_LOGIC_OP
If enabled, apply the currently selected
logical operation to the incoming and color-buffer indexes. See
glLogicOp.
GL_MAP1_COLOR_4
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate RGBA values. See
also glMap1.
GL_MAP1_INDEX
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate color indexes. See
also glMap1.
GL_MAP1_NORMAL
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate normals. See also
GL_MAP1_TEXTURE_COORD_1
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate s texture
coordinates. See also glMap1.
GL_MAP1_TEXTURE_COORD_2
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate s and t
texture coordinates. See also glMap1.
GL_MAP1_TEXTURE_COORD_3
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate s, t,
and r texture coordinates. See also glMap1.
GL_MAP1_TEXTURE_COORD_4
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate s, t,
r, and q texture coordinates. See also glMap1.
GL_MAP1_VERTEX_3
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate x, y,
and z vertex coordinates. See also glMap1.
GL_MAP1_VERTEX_4
If enabled, calls to glEvalCoord1,
glEvalMesh1, and glEvalPoint1 generate homogeneous x,
y, z, and w vertex coordinates. See also glMap1.
GL_MAP2_COLOR_4
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate RGBA values. See
also glMap2.
GL_MAP2_INDEX
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate color indexes. See
also glMap2.
GL_MAP2_NORMAL
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate normals. See also
GL_MAP2_TEXTURE_COORD_1
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate s texture
coordinates. See also glMap2.
GL_MAP2_TEXTURE_COORD_2
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate s and t
texture coordinates. See also glMap2.
GL_MAP2_TEXTURE_COORD_3
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate s, t,
and r texture coordinates. See also glMap2.
GL_MAP2_TEXTURE_COORD_4
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate s, t,
r, and q texture coordinates. See also glMap2.
GL_MAP2_VERTEX_3
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate x, y,
and z vertex coordinates. See also glMap2.
GL_MAP2_VERTEX_4
If enabled, calls to glEvalCoord2,
glEvalMesh2, and glEvalPoint2 generate homogeneous x,
y, z, and w vertex coordinates. See also glMap2.
GL_NORMALIZE
If enabled, normal vectors specified with
glNormal are scaled to unit length after transformation. See
GL_POINT_SMOOTH
If enabled, draw points with proper
filtering. If disabled, draw aliased points. See glPointSize.
GL_POLYGON_OFFSET_FILL
If enabled, and if the polygon is
rendered in GL_FILL mode, an offset is added to depth values of a
polygon's fragments before the depth comparison is performed. See
glPolygonOffset.
GL_POLYGON_OFFSET_LINE
If enabled, and if the polygon is
rendered in GL_LINE mode, an offset is added to depth values of a
polygon's fragments before the depth comparison is performed. See
glPolygonOffset.
GL_POLYGON_OFFSET_POINT
If enabled, an offset is added to depth
values of a polygon's fragments before the depth comparison is
performed, if the polygon is rendered in GL_POINT mode. See
glPolygonOffset.
GL_POLYGON_SMOOTH
If enabled, draw polygons with proper
filtering. If disabled, draw aliased polygons. See glPolygonMode.
GL_POLYGON_STIPPLE
If enabled, use the current polygon
stipple pattern when rendering polygons. See glPolygonStipple.
GL_SCISSOR_TEST
If enabled, discard fragments that are
outside the scissor rectangle. See glScissor.
GL_STENCIL_TEST
If enabled, do stencil testing and update
the stencil buffer. See glStencilFunc and glStencilOp.
GL_TEXTURE_1D
If enabled, one-dimensional texturing is
performed (unless two-dimensional texturing is also enabled). See
glTexImage1D.
GL_TEXTURE_2D
If enabled, two-dimensional texturing is
performed. See glTexImage2D.
GL_TEXTURE_GEN_Q
If enabled, the q texture
coordinate is computed using the texture-generation function defined
with glTexGen. Otherwise, the current q texture coordinate
GL_TEXTURE_GEN_R
If enabled, the r texture
coordinate is computed using the texture generation function defined
with glTexGen. If disabled, the current r texture
coordinate is used.
GL_TEXTURE_GEN_S
If enabled, the s texture
coordinate is computed using the texture generation function defined
with glTexGen. If disabled, the current s texture
coordinate is used.
GL_TEXTURE_GEN_T
If enabled, the t texture
coordinate is computed using the texture generation function defined
with glTexGen. If disabled, the current t texture
coordinate is used.
[cap]:取消OpenGL的各种功能
与glEnable(cap)配合使用,先用glEnable[cap]设置OpenGL的功能,不用时,用glDisable(cap)取消这种功能。
例如:glDisable(GL_LINE_STIPPLE):取消虚点模式。
[face,mode]:多边形模式设置
控制多边形指定面的绘制模式。参数face为GL_FRONT、GL_BACK或GL_FRONT_AND_BACK;参数mode为GL_POINT、GL_LINE或GL_FILL,分别表示绘制轮廓点式多边形、轮廓线式多边形或全填充式多边形。缺省时,绘制的是正反面全填充式多边形。
该函数可能返回如下运行错误:1、参数不符合要求;
(::hF,rot)= hF=HFor(&f&),rot=0;&&&&&&&&&&&&&&&&&& &&
//获取函数f的句柄,设置一个变量
gleDrawScene[HFor(&Scene&)],stop();&&&&&&&&&
&&&&&&& //设置场景绘制函数后退出
f(x,y)=(x^2-2*x)*exp(-(x^2)-y^2-x*y);
Scene(:x:hF,rot)=
&&& glClear[],
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//设置颜色
&&& gleAxesAngle[],&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//显示坐标和旋转角度
&&& glLoadIdentity[],
&&& glTranslated[0,0,-35],
&&& glColor3d[0,1,0],&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glRotated[90,1,0,0],&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//使图象沿X轴旋转90度
&&& glRotated[gleAngle(1),1,0,0],&&&&&&&&&&&&&&&&&&&
//可由键盘控制使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],&&&&&&&&&&&&&&&&&&&
//可由键盘控制使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1],&&&&&&&&&&&&&&&&&&&
//可由键盘控制使图象沿Z轴旋转
&&&&&&& x=5*sin[rot],
&&&&&&& glTranslated[-11,x,x],
&&&&&&& glPolygonMode[GL_FRONT,GL_POINT],&&&&&&&&&&&
//多边形模式设置
&&&&&&& fgPlot3d[hF,-x,x,-x,x,FG_NOAXES,FG_NOMESH],
&&&&&&& glTranslated[11,x/2,x/2],
&&&&&&& glPolygonMode[GL_BACK,GL_LINE],&&&&&&&&&&&&&
//多边形模式设置
&&&&&&& fgPlot3d[hF,-x,x,-x,x,FG_NOAXES,FG_NOMESH]
&&&&&&& x=5*sin[rot],
&&&&&&& glTranslated[11,x/2,x/2],
glPolygonMode[GL_FRONT_AND_BACK,GL_FILL],&&&
//多边形模式设置
&&&&&&& fgPlot3d[hF,-x,x,-x,x,FG_NOAXES,FG_NOMESH]
&&& rot=rot+0.05&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//速度控制
[r,g,b,Alpha]:设置屏幕清屏的颜色
r,g,b三个参数分别是红、绿、蓝的颜色强度值,其取值范围是从0到1。
Alpha值与透明度有关。
gleDrawScene(HFor(&Draw&)),stop();&&&&&
//启动场景绘制,就退出
initScene()=&&&&&&&&&&&&&&&&&&&&&&&&&&&
//定义初始化函数
&&& glClearColor(0,1,0,1)&&&& &&&&&&&&&
//设置屏幕清屏的颜色
Draw()=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数
&&& if[gleIsInitScene(),initScene()],&&
//需要初始化场景时,就执行初始化函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[-4,0,-10],&&&&&&&&&&&&&//移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glePrint[&Hello OpenFcGl !&]&&&&&&&
//绘制英文字符串
(i):执行显示列表
i为显示列表的序号。
(i):设置显示列表序列的基序号
i为显示列表序列的基序号。
(&abc... ...&)或glCallLists(n1,n2,...
...):执行显示列表序列
glCallLists(&abc...
...&):只有一个参数时,该参数必须为字符串。字符串中的每一个字符代表一个显示列表,该显示列表序号与基序号(由glListBase(i)设置)之差等于该字符的ASCII值。
glCallLists(n1,n2,... ...):多于一个参数时,每一个参数值等于该参数代表的显示列表序号与基序号(由glListBase(i)设置)之差。
该函数可能返回如下运行错误:1、只有一个参数时,该参数必须为字符串。2、内存错误。
gleDrawScene(HFor(&Draw&)),stop();&&&&&&//启动场景绘制,就退出
initScene(:a,r,m,n:AA,Ball)=&&&&&&&&&&&
//定义初始化函数
&&& Ball=gluNewQuadric[],&&&&&&&&&&&&&&
//创建二次曲面对象
&&& gluQuadricDrawStyle[Ball,GLU_FILL],
//设置二次曲面绘制模式
&&& gluQuadricNormals[Ball,GLU_SMOOTH],
//设置二次曲面法线信息
a=0.5,r=0.2,m=8,n=8,
&&& AA=glGenLists[6],
&&& glNewList[AA+2,GL_COMPILE],&&&&&&&&
//绘正方形
&&&&&&& glBegin(GL_LINES),
&&&&&&&&&&&
glVertex3d(-a,a,a),glVertex3d(-a,-a,a),
&&&&&&&&&&&
glVertex3d(-a,-a,a),glVertex3d(a,-a,a),
&&&&&&&&&&&
glVertex3d(a,-a,a),glVertex3d(a,a,a),
&&&&&&&&&&&
glVertex3d(a,a,a),glVertex3d(-a,a,a),
&&&&&&&&&&& glVertex3d(-a,a,-a),glVertex3d(a,a,-a),
&&&&&&&&&&&
glVertex3d(a,a,-a),glVertex3d(a,-a,-a),
&&&&&&&&&&&
glVertex3d(a,-a,-a),glVertex3d(-a,-a,-a),
&&&&&&&&&&&
glVertex3d(-a,-a,-a),glVertex3d(-a,a,-a),
&&&&&&&&&&&
glVertex3d(-a,a,a),glVertex3d(-a,a,-a),
&&&&&&&&&&&
glVertex3d(-a,-a,a),glVertex3d(-a,-a,-a),
&&&&&&&&&&&
glVertex3d(a,-a,a),glVertex3d(a,-a,-a),
&&&&&&&&&&&
glVertex3d(a,a,a),glVertex3d(a,a,-a),
&&&&&&& glEnd(),
&&& glEndList[],
&&& glNewList[AA+5,GL_COMPILE],&&&&&&&&
//绘正方形顶点的球
&&&&&&& glTranslated[-a,-a,-a], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[2*a,0,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[0,2*a,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[-2*a,0,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[0,0,2*a], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[0,-2*a,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[2*a,0,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[0,2*a,0], gluSphere[Ball,r,m,n],
&&& glEndList[]
};Draw(::AA)=&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数{&&& if[gleIsInitScene(),initScene()],&&
//需要初始化场景时,就执行初始化函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glRotated[gleAngle(1),1,0,0],&&&&&&
//使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],&&&&&&
//使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1],&&&&&&
//使图象沿Z轴旋转&&& glTranslated[0,0,-10],&&&&&&&&&&&&& //移动坐标&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色&&&
glListBase[AA],&&&&&&&&&&&&&&&&&&&&
//设置显示列表序列的基序号
&&& glCallLists[2,5]&&&&&&&&&&&&&&&&&&&
//执行显示列表序列
(n):创建一个或多个连续的显示列表,返回显示列表的基序号
n为显示列表的个数,n&=1。若返回值为0,表示创建失败。
(i,mode):建立显示列表,并编译和执行显示列表
i为显示列表的序号。mode为工作模式,mode=GL_COMPILE时,仅进行编译;mode=GL_COMPILE_AND_EXECUTE时,编译并执行显示列表。
该函数必须与glEndList()成对使用。
不要用该函数对同一个显示列表创建多次,这将引起混乱和不安全。
gleDrawScene(HFor(&Draw&)),stop();&&&&&&//启动场景绘制,就退出
initScene(:a,r,m,n:AA,Ball)=&&&&&&&&&&&&//定义初始化函数
&&& Ball=gluNewQuadric[],&&&&&&&&&&&&&&
//创建二次曲面对象
&&& gluQuadricDrawStyle[Ball,GLU_FILL],
//设置二次曲面绘制模式
&&& gluQuadricNormals[Ball,GLU_SMOOTH],
//设置二次曲面法线信息
a=0.5,r=0.2,m=8,n=8,
&&& AA=glGenLists[1],
&&& glNewList[AA,GL_COMPILE],
&&&&&&& glBegin(GL_LINES),&&&&&&&&&&&&
//绘正方形
&&&&&&&&&&&
glVertex3d(-a,a,a),glVertex3d(-a,-a,a),
&&&&&&&&&&&
glVertex3d(-a,-a,a),glVertex3d(a,-a,a),
&&&&&&&&&&&
glVertex3d(a,-a,a),glVertex3d(a,a,a),
&&&&&&&&&&&
glVertex3d(a,a,a),glVertex3d(-a,a,a),
&&&&&&&&&&& glVertex3d(-a,a,-a),glVertex3d(a,a,-a),
&&&&&&&&&&&
glVertex3d(a,a,-a),glVertex3d(a,-a,-a),
&&&&&&&&&&&
glVertex3d(a,-a,-a),glVertex3d(-a,-a,-a),
&&&&&&&&&&&
glVertex3d(-a,-a,-a),glVertex3d(-a,a,-a),
&&&&&&&&&&&
glVertex3d(-a,a,a),glVertex3d(-a,a,-a),
&&&&&&&&&&&
glVertex3d(-a,-a,a),glVertex3d(-a,-a,-a),
&&&&&&&&&&&
glVertex3d(a,-a,a),glVertex3d(a,-a,-a),
&&&&&&&&&&&
glVertex3d(a,a,a),glVertex3d(a,a,-a),
&&&&&&& glEnd(),
&&&&&&& glTranslated[-a,-a,-a], gluSphere[Ball,r,m,n],
//绘正方形顶点的球
&&&&&&& glTranslated[2*a,0,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[0,2*a,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[-2*a,0,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[0,0,2*a], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[0,-2*a,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[2*a,0,0], gluSphere[Ball,r,m,n],
&&&&&&& glTranslated[0,2*a,0], gluSphere[Ball,r,m,n],
&&& glEndList[]
};Draw(::AA)=&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数{&&& if[gleIsInitScene(),initScene()],&&
//需要初始化场景时,就执行初始化函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glRotated[gleAngle(1),1,0,0],&&&&&&
//使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],&&&&&&
//使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1],&&&&&&
//使图象沿Z轴旋转&&& glTranslated[0,0,-10],&&&&&&&&&&&&& //移动坐标&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色&&&
glCallList[AA]&&&&&&&&&&&&&&&&&&&&&
//绘制图形};
():结束建立显示列表
该函数必须与glNewList()成对使用。
(X,Y):设置二维绘图点
X,Y设置了屏幕二维坐标系中的一点。
gleDrawScene(HFor(&Draw&)),stop();&&&&&
//启动场景绘制,就退出
Draw(::AA)=&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数{&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[0,0,-2],&&& &&&&&&&&&& //移动坐标&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glPolygonMode(GL_FRONT_AND_BACK,GL_LINE),
&&& glBegin(GL_POLYGON),&&&& &&&&&&&&&& //绘
glVertex2d(-0.3,0.3),
&&&&&&& glEdgeFlag(0),
glVertex2d(-0.1,-0.1),
&&&&&&& glEdgeFlag(1),
glVertex2d(0,-0.1),
glVertex2d(0.3,0.3),
&&& glEnd(),
&&& glBegin(GL_POLYGON),&&&& &&&&&&&&&&
//绘四边形
glVertex2d(-0.1,-0.1),
glVertex2d(-0.2,-0.4),
&&&&&&& glVertex2d(0.2,-0.4),
&&&&&&& glEdgeFlag(0),
glVertex2d(0,-0.1),
&&&&&&& glEdgeFlag(1),
&&& glEnd()
(bool):设置边的可见性
如果bool为真,则边是可见的;如果bool为假,则边是不可见的。
通常边的可见性不发生变化,除非再一次用不同的参数调用该函数。
():将当前矩阵压入堆栈
glPushMatrix()与glPopMatrix()要成对使用。
gleDrawScene(HFor(&Draw&)),stop();&&&&&&//启动场景绘制,就退出
Draw()=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&& //清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[-4,0,-10],&&&&&&&&&&&&&//移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glPushMatrix(),&&&&&&&&&&&&&&&&&&&&
//将当前矩阵压入堆栈
&&& glePrint[&Hello OpenFcGl !&],&&&&&&
//绘制英文字符串
&&& glPopMatrix(),&&&&&&&&&&&&&&&&&&&&& //将当前矩阵弹出堆栈
&&& glTranslated[0,-2,0],&&&&&&&& &&&&&&//移动坐标
glScaled(0.5,1,1),&&&&&&&& &&&&&&&& //缩放变换
&&& glePrint[&Hello OpenFcGl !&]&&&&&&&
//绘制英文字符串
():将当前矩阵弹出堆栈
glPushMatrix()与glPopMatrix()要成对使用。
(sx,sy,sz):缩放变换
sx,sy,sz分别表示沿X,Y,Z轴的缩放因子。
(list,range):删除一组连续的显示列表
list为第一个要删除的显示列表。range为要删除的显示列表数目。
与OpenGl函数相比
创建二次曲面对象
初始化函数
设置二次曲面绘制模式
场景绘制函数
设置二次曲面法线信息
场景绘制函数
场景绘制函数
设置二次曲面插值计算的方向
场景绘制函数
设置二次曲面是否生成纹理坐标
场景绘制函数
删除二次曲面对象
场景绘制函数
绘制圆柱、圆锥或台锥
场景绘制函数
绘制圆盘或圆环
场景绘制函数
场景绘制函数
():创建二次曲面对象
返回一个二次曲面对象指针(指针保存在实数的前4个字节中)。在特定的函数中,可通过该指针访问到该二次曲面对象。
指针是否有效,可以用函数IsPointer(Pointer)进行检验。二次曲面对象不用时要及时用函数gluDeleteQuadric(p)删除。
尽量不要将函数gluNewQuadric()放在循环体或场景绘制函数内,以免造成连续不断的内存耗损,除非用函数gluDeleteQuadric(p)及时销毁了该二次曲面对象。
gleDrawScene(HFor(&Draw&)),stop();&&&&&
//启动场景绘制,就退出
initScene(::a)=&&&&&&&&&&&&&&&&&&&&&&&&&//定义初始化函数
&&& a=gluNewQuadric[],&&&&&&&&&&&&&&&&&
//创建二次曲面对象
&&& gluQuadricDrawStyle[a,GLU_FILL],&&&
//设置二次曲面绘制模式
&&& gluQuadricNormals[a,GLU_SMOOTH]&&&&
//设置二次曲面法线信息
Draw(::a)=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数
&&& if[gleIsInitScene(),initScene()],&&
//需要初始化场景时,就执行初始化函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[0,0,-10],&&&&&&&&&&&&& //移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& gluSphere[a,0.5,20,20]&&&&&&&&&&
&& //绘制球
(aa,drawStyle):设置二次曲面绘制模式
指针aa标识二次曲面对象。drawStyle为绘制模式。
该函数可能返回如下运行错误:1、无效的二次曲面对象指针。
The desired draw style. The following values are valid.
Quadrics are rendered with polygon
primitives. The polygons are drawn in a counterclockwise fashion
with respect to their normals (as defined with
gluQuadricOrientation).
Quadrics are rendered as a set of
GLU_SILHOUETTE
Quadrics are rendered as a set of
lines, except that edges separating coplanar faces will not be
Quadrics are rendered as a set of
(aa,normals):设置二次曲面法线信息
指针aa标识二次曲面对象。normals标识二次曲面法线信息。
该函数可能返回如下运行错误:1、无效的二次曲面对象指针。
The desired type of normals. The following values are
No normals are generated.
One normal is generated for every
facet of a quadric.
GLU_SMOOTH
One normal is generated for every
vertex of a quadric. This is the default value.
(aa,radius,slices,stacks):绘制球
指针aa标识二次曲面对象(球)。radius为球的半径。slices,stacks为经线和纬线的线圈数。
该函数可能返回如下运行错误:1、无效的二次曲面对象指针。
(aa,orientation):
设置二次曲面插值计算的方向
指针aa标识二次曲面对象。orientation表示二次曲面插值计算的方向。orientation=GLU_OUTSIDE表示二次曲面的法线是自曲面向外的;orientation=GLU_INSIDE表示二次曲面的法线是指向二次曲面的。
该函数可能返回如下运行错误:1、无效的二次曲面对象指针。
[例子](略)
(aa,textureCoords):
设置二次曲面是否生成纹理坐标
指针aa标识二次曲面对象。textureCoords表示是否为二次曲面生成纹理坐标。textureCoords为真表示生成纹理坐标,否则不生成纹理坐标。
该函数可能返回如下运行错误:1、无效的二次曲面对象指针。
[例子](略)
删除二次曲面对象
指针aa标识二次曲面对象。
(aa,baseRadius,topRadius,height,slices,stacks):
绘制圆柱、圆锥或台锥
指针aa标识二次曲面对象。baseRadius,topRadius表示台锥体底面半径和顶面半径。height表示台锥的高。slices,stacks为经线和纬线的线圈数。
该函数可能返回如下运行错误:1、无效的二次曲面对象指针。
gleDrawScene(HFor(&Draw&)),stop();&&&&&
&//启动场景绘制,就退出
Draw(:a)=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//场景绘制函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&& &//清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&&&//重置视图
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&&&//设置颜色
&&& a=gluNewQuadric[],&&&&&&&&&&&&&&&&&&&//创建二次曲面对象
&&& gluQuadricDrawStyle[a,GLU_FILL],&&&&
//设置二次曲面绘制模式
&&& gluQuadricNormals[a,GLU_SMOOTH],&&&&
//设置二次曲面法线信息
&&& glTranslated[-6,0,-20],&&&&&&&&&&&&&&//移动坐标
&&& gluSphere[a,0.5,20,20],&&&&&&&&&& &&&//绘制球
&&& glTranslated[3,0,0],&&&&&&&&&&&&&&&&&//移动坐标
&&& gluCylinder[a,2,1,3,20,20],&&&&&
&&& //绘制台锥
&&& glTranslated[5,0,0],&&&&&&&&&&&&&&&&&//移动坐标
&&& gluDisk[a,0.5,2,20,20],&&&&&&&&&&&&&
//绘制圆环
&&& glTranslated[5,0,0],&&&&&&&&&&&&&&&&&//移动坐标
&&& gluPartialDisk[a,0.5,2,20,20,10,80],&//绘制扇形
&&& gluDeleteQuadric[a] &&&&&&&&&&&&&&&& //删除二次曲面对象
(aa,innerRadius,outerRadius,slices,loops):
绘制圆盘或圆环
指针aa标识二次曲面对象。innerRadius,outerRadius表示圆环的内径和外径。slices,loops表示径向的线圈数和周向的等分直线数目。
该函数可能返回如下运行错误:1、无效的二次曲面对象指针。
(aa,innerRadius,outerRadius,slices,loops,startAngle,sweepAngle):
指针aa标识二次曲面对象。innerRadius,outerRadius表示扇形的内径和外径。lices,loops表示径向的线圈数和周向的等分直线数目。startAngle表示起始角度。sweepAngle表示扇形的张开角度。
该函数可能返回如下运行错误:1、无效的二次曲面对象指针。
场景绘制函数,必须手动关闭该函数打开的绘图窗口。
场景绘制函数,OpenFcGl会自动关闭打开的绘图窗口。
设置工作模式
初始化函数
删除中文字符串显示列表
场景绘制函数
创建中文字符串显示列表
初始化函数
显示存储在列表中的中文字符串
场景绘制函数
获得绘图窗口尺寸
场景绘制函数
获得鼠标消息
场景绘制函数
显示坐标和旋转角度
场景绘制函数
获得由键盘操纵的旋转角度
场景绘制函数
键盘操纵图象旋转的速率
场景绘制函数
设置坐标移动的速率
场景绘制函数
输出中文字符串
场景绘制函数
输出中文字符数组
场景绘制函数
输出英文字符串
场景绘制函数
输出英文字符数组
场景绘制函数
键盘状态函数
场景绘制函数
判断是否需要初始化场景
场景绘制函数
设置或获得OpenGl屏幕坐标
场景绘制函数
清除申请的空间
初始化函数
设置窗口模式
初始化函数
设置窗口标题
初始化函数
显示或隐藏光标
初始化函数
按位或函数
在运行时调用实数表达式
消息框函数
获得一个(顶层)窗口的句柄
检查常量注册情况
移动窗口,改变窗口的位置和尺寸
场景绘制函数
将OpenFcGl图像保存为文件
场景绘制函数
[HFor(&rFor&)] 或
gleWorkDrawScene[scene,HFor(&rFor&)]:场景绘制函数
gleWorkDrawScene将场景绘制函数&rFor&的句柄传送给OpenFcGl32W.dll,&rFor&是一个实数表达式的名称。scene是由函数gleNewScene申请的场景指针。
该函数可能返回如下运行错误:1、参数个数非法;2:非法的场景指针;3:非法的表达式句柄。
注意:如果没有通过给OpenFcGl窗口指定一个父窗口,必须手动关闭该函数打开的OpenFcGl窗口。
gleWorkDrawScene(HFor(&Draw&)),stop();&&//启动场景绘制,就退出
Draw()=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&& //清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[-5,0,-15],&&&&&&&&&&&&&//移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glePrint[&Hello OpenFcGl !&]&&&&&&&
//绘制英文字符串
[HFor(&rFor&)] 或
gleDrawScene[scene,HFor(&rFor&)]:场景绘制函数
gleDrawScene将场景绘制函数&rFor&的句柄传送给OpenFcGl32W.dll,&rFor&是一个实数表达式的名称。scene是由函数gleNewScene申请的场景指针。
该函数可能返回如下运行错误:1、参数个数非法;2:非法的场景指针;3:非法的表达式句柄。
注意:该函数打开的绘图窗口会被OpenFcGl自动关闭。
[&aaa&]:申请场景
字符串&aaa&是场景的窗口类的名称。每一个场景对应着一个窗口类。该函数返回一个场景指针,用在场景绘制函数gleWorkDrawScene或gleDrawScene中。场景不用时,须用函数gleDeleteScene销毁。
该函数可能返回如下运行错误:1、非法的字符串地址;2:字符串太长,应小于80个字符。
(:static,a,free)=
//设置场景绘制函数后退出
&&& if[free,gleDeleteScene(a)],
//销毁表达式时销毁场景
&&& a=gleNewScene[&aaa&],
&&& gleDrawScene[a,HFor(&Scene&)],stop()
//让图形随鼠标移动。factor为比例因子,factor越大则移动幅度越大。
fcglFollowMouse(factor:x,y,xx,yy,xxx,yyy,static,fcglFollowMouse,xMouse,yMouse)=
&&& if[gleGetMouseMsg(WM_LBUTTONDOWN,&x,&y),fcglFollowMouse=1,xMouse=x,yMouse=y],
&&& gleGetWindowSize[&xxx,&yyy],
&&& if[fcglFollowMouse,gleGetMouseMsg(WM_MOUSEMOVE,&xx,&yy),gleAngle[1,gleAngle(1)+(yy-yMouse)/yyy*factor],gleAngle[2,gleAngle(2)+(xx-xMouse)/xxx*factor]],
&&& if[gleGetMouseMsg(WM_LBUTTONUP,&xx,&yy),fcglFollowMouse=0],
&&& glRotated[gleAngle(1),1,0,0],
//使图象沿X轴旋转
&&& glRotated[gleAngle(2),0,1,0],
//使图象沿Y轴旋转
&&& glRotated[gleAngle(3),0,0,1]
&//使图象沿Z轴旋转
f(x,y:r)= r=sqrt[(x-50)^2+(y-50)^2]+exp[1], sin[r]/r+1;
initScene()= &&&&&&&&&&&&
//定义初始化函数
&&& gleAngle(90,180,90), &//设置重置视图初始位置
&&& gleSetWorkMode[0]&&&&
//计时器模式
Scene()=&&&&&&&&&&&&&&&&&
//场景绘制函数
&&& if[gleIsInitScene(),initScene()],
//需要初始化场景时,就执行初始化函数
&&& glClear[],
&&& glColor3d[1,0,0],&&&&
//设置颜色
&&& gleAxesAngle[],&&&&&&
//显示坐标和旋转角度
&&& glLoadIdentity[],
&&& glTranslated[0,0,-20],
&&& glColor3d[0,1,0],&&&&
//设置颜色
&&& fcglFollowMouse[2],&&
//通过鼠标拖动变换任意角度来观察物体
&&& fgPlot3d[HFor(&f&),0,100,0,100,FG_NOMESH]
//绘制二元函数图形
[scene]:销毁场景
销毁场景scene(场景指针),该场景是由函数gleNewScene申请的。
[mode]:设置工作模式
若mode为真,设置为快速模式;若mode为假,设置为计时器模式。按F3可在快速模式和计时器模式之间进行切换。
[]:显示坐标和旋转角度
(x):设置坐标移动的速率
键盘操纵屏幕坐标移动速率的缺省值是0.1,可用该函数重新设置坐标移动的速率。
gleDrawScene(HFor(&Draw&)),stop();&&&&&
//启动场景绘制,就退出
initScene()=&&&&&&&&&&&&&&&&&&&&&&&&&&&
//定义初始化函数
&&& gleAxisRate(0.5)&&&&&& && &&&&&&&&&
//设置坐标移动的速率
Draw()=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数
&&& if[gleIsInitScene(),initScene()],&&
//需要初始化场景时,就执行初始化函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[-5,0,-15],&&&&&&&&&&&&&//移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glePrint[&Hello OpenFcGl !&]&&&&&&&
//绘制英文字符串
(i):获得由键盘操纵的旋转角度
在OpenFcGl32W.dll中设置了三个可由键盘操纵的数,这三个数可由函数gleAngle[i]获得,使用这三个数并与函数glRotated[...]配合可使图象产生旋转。
Shift + →:使gleAngle[1]值增加;
Shift + ←:使gleAngle[1]值减少;
Shift + ↑:使gleAngle[2]值增加;
Shift + ↓:使gleAngle[2]值减少;
Shift + PageUp: 使gleAngle[3]值减少;
Shift + PageDown:使gleAngle[3]值增加;
Shift + Home:使gleAngle[i]值为0。
在每一个绘图单元前加上以下代码,可用键盘操纵图象沿X、Y、Z轴旋转:
glRotated[gleAngle(1),1,0,0]; //使图象沿X轴旋转。
glRotated[gleAngle(2),0,1,0]; //使图象沿Y轴旋转。
glRotated[gleAngle(3),0,0,1]; //使图象沿Z轴旋转。
(x):键盘操纵图象旋转的速率
键盘操纵图象旋转的速率的缺省值是0.5,可用该函数重新设置图象旋转的速率。
gleDrawScene(HFor(&Draw&)),stop();&&&&&
//启动场景绘制,就退出
initScene()=&&&&&&&&&&&&&&&&&&&&&&&&&&&
//定义初始化函数
&&& gleAngleRate(1)& &&&&& && &&&&&&&&&
//设置图象旋转的速率
Draw()=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数
&&& if[gleIsInitScene(),initScene()],&&
//需要初始化场景时,就执行初始化函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&&
//清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
glRotated[gleAngle(1),1,0,0],&&&&&&
//使图象沿X轴旋转
glRotated[gleAngle(2),0,1,0],&&&&&&
//使图象沿Y轴旋转
glRotated[gleAngle(3),0,0,1],&&&&&&
//使图象沿Z轴旋转
&&& glTranslated[-5,0,-15],&&&&&&&&&&&&&//移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glePrint[&Hello OpenFcGl !&]&&&&&&&
//绘制英文字符串
[&我的 OpenFC & OpenGL !&]:输出中文字符串
该函数速度很慢,但能用来输出汉字和英文。
该函数可能返回如下运行错误:1、字符串地址错误。
gleDrawScene(HFor(&Draw&)),stop();&&&&&
//启动场景绘制,就退出
Draw()=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//场景绘制函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&& //清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[-5,0,-15],&&&&&&&&&&&&&//移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glePrintCn[&我的 OpenFC & OpenGL !&]//绘制
中文字符串
[a]:输出中文一维字符数组
该函数速度很慢,但能用来输出汉字和英文。
该函数可能返回如下运行错误:1、无效的字符数组指针;2、不是一维数组。
i::NewStr()=new(wchar_s,EndType,&我的 OpenFC
& OpenGL !&);&&&&&&&&&& //设置字符数组存放中文字符串
(::Str)= Str=GetCalByte[NewStr()],gleDrawScene(HFor(&Draw&)),stop();&//启动场景绘制,就退出
Draw(::Str)=&&&&&&&&&&&&&&&&&&&&&&&&&&&&//场景绘制函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&& //清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[-5,0,-15],&&&&&&&&&&&&&//移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glePrintCnStr[Str]&&&&&&&&&&
&&&&&& //绘制中文字符数组
[&abc 123 !!!&]:输出英文字符串
该函数速度很快,但不能用来输出汉字。
该函数可能返回如下运行错误:1、字符串地址错误。
[a]:输出英文字符数组
该函数速度很快,但不能用来输出汉字。
该函数可能返回如下运行错误:1、无效的字符数组指针;2、不是一维数组。
i::NewStr()=new(wchar_s,EndType,&Hello
Forcal & OpenGL !&);&&&&&&&&& //设置字符数组存放
英文字符串
(::Str)= Str=GetCalByte[NewStr()],gleDrawScene(HFor(&Draw&)),stop();&//启动场景绘制,就退出
Draw(::Str)=&&&&&&&&&&&&&&&&&&&&&&&&&&&&//场景绘制函数
&&& glClear[],&&&&&&&&&&&&&&&&&&&&&&&&& //清除屏幕以及深度缓存
&&& glLoadIdentity[],&&&&&&&&&&&&&&&&&&
//重置视图
&&& glTranslated[-5,0,-15],&&&&&&&&&&&&&//移动坐标
&&& glColor3d[1,0,0],&&&&&&&&&&&&&&&&&&
//设置颜色
&&& glePrintStr[Str]&&&&&&&&&&
&&&&&&&& //绘制英文字符数组
[n]或gleVirtualKey[n,bool]:键盘状态函数
gleVirtualKey[n]:
获取键盘上键的状态,n为键盘代码,0&=n&256

我要回帖

更多关于 我的世界为什么闪退 的文章

 

随机推荐