#OpenFcGl.dll ʹOpenGLĺͼο
< OpenFcGl.dllʹ˵
OpenForcalչ̬⣬ͨʱҪÿ·
⺯˵fcerrʾFORCALصд롣
ĲҪFORCALԸòȡ㡣

1OpenGLĻ뺯Աı仯Χ

   ĻģXңYϣZ⣨ĻΪֵĻΪֵע⣺ͼ뱻Ļܹ
   ͨĻ뺯Աı仯Χһ£纯z(x,y)=x+yxȡ[-3,3]yȡ[-3,3]zȡֵΧΪ[-6,6]ԽúͼĻκλã磺X[0,10]Y[0,10]Z[-10,-20]

2üƶĻ

   ԭXƶ
   ԭXḺƶ
   ԭYƶ
   ԭYḺƶ
   PageUp  ԭZḺƶ
   PageDownԭZƶ
   Home긴λ

3üʹͼת

   OpenFcGl.dllɼ̲ݵɺglAngle[i]ãʹ뺯glRotated[...]Ͽʹͼת

   Shift + ʹglAngle[1]ֵӣ
   Shift + ʹglAngle[1]ֵ٣
   Shift + ʹglAngle[2]ֵӣ
   Shift + ʹglAngle[2]ֵ٣
   Shift + PageUp  ʹglAngle[3]ֵ٣
   Shift + PageDownʹglAngle[3]ֵӣ
   Shift + Home    ʹglAngle[i]ֵΪ0

   ÿһͼԪǰ´룬ü̲ͼXYZת
   glRotated[glangle(1),1,0,0]; //ʹͼXת
   glRotated[glangle(2),0,1,0]; //ʹͼYת
   glRotated[glangle(3),0,0,1]; //ʹͼZת
   ο7֮üƶתĶԪͼ

4Ƶͼô

   PageUpʹͼĻƶɿͼ

5֮һһԪͼ

   "DrawBegin";		//ʼַ

   glClear[];		//ĻԼȻ棻
   glLoadIdentity[];	//ͼ
   glTranslated[0,0,-6];//ƶ꣬Ļƶ6Ԫ
   glColor3d[1,0,0];	//ɫ;
   "f"(x)=x*sin[x];	//һԪ壻
   plot[#"f",-10,10,"axes",-3,3,-2,2]; //һԪͼ

   "DrawEnd";		//ַ

   //гƣ
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };

6֮Ԫͼ

   clear[];
   AutoConst:Rot,EndAutoConst;			//Զ
   NewDoubleS[EndAutoConst];setd[Rot,0];	//ñ
   "DrawBegin";
   glClear[];
   glLoadIdentity[];
   glTranslated[0,0,-20];
   glColor3d[0,1,0];				//ɫ;
   glRotated[GetdAdd(Rot,1),1,1,1];		//ʹͼת
   "f"(x,y)=(x^2-2*x)*exp(-x^2-y^2-x*y);
   plot3d[#"f",-3,3,-3,3];
   FindErrQuit[];				//д
   "DrawEnd";
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
               GetAddress[$"DrawEnd",#"DrawEnd"]
            };

7֮üƶתĶԪͼ
   볢ԽOpenGLĻתΪʽXǰYңZϡ

   clear[];
   "DrawBegin";
   glClear[];
   glColor3d[1,0,0];		//ɫ;
   glAxesAngle[];		//ʾתǶȣ
   glLoadIdentity[];
   glTranslated[0,0,-20];
   glColor3d[0,1,0];		//ɫ;
   glRotated[glangle(1),1,0,0]; //ʹͼXת
   glRotated[glangle(2),0,1,0]; //ʹͼYת
   glRotated[glangle(3),0,0,1]; //ʹͼZת
   "f"(x,y)=sin[sqrt(x*x+y*y)];
   plot3d[#"f",-5,5,-5,5,"nomesh"];
   FindErrQuit[];		//д
   "DrawEnd";
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
               GetAddress[$"DrawEnd",#"DrawEnd"]
            };

8֮ģɫתĽ

   clear[];
   AutoConst:yRot,xyzRot,EndAutoConst;	//Զ
   NewDoubleS[EndAutoConst];	//ñ
   setd[yRot,0];setd[xyzRot,0];	//ֵ
   "DrawBegin";
   glClear[];			//Ȼ

   glLoadIdentity();		//õǰModelview
   glTranslated(-1.5,0.0,-6.0);	//ƶ1.5ԪĻƶ6.0Ԫ
   glRotated(getd(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(getd(xyzRot),1,1,1);//XYZת
   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();			// 
   GetdAdd(yRot,0.2);		//εת
   GetdAdd(xyzRot,-0.15);	//Сεת

   FindErrQuit[];		//д
   "DrawEnd";
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };

9

   OpenFcGl£F1ȫģʽʹģʽ֮лESC˳OpenFcGlڡ

   *** ӭҵվظÿԴ ***
   *** http://forcal.yeah.net         ***
>
<DrawSceneƺ
DrawScene[Begin,End]ƴʼͽַ͸OpenFcGl.dll

   Beginƴʼʽַ
   End  ƴĽʽַ=-1ʱʾдַһʽַ
   BeginEndɺGetAddress[]ȡ
   οOpenFcGl.dllʹ˵еӡ
>
<glClearĻԼȻ
glClear[]ĻԼȻ

   ͨҪѸúΪƴĵһ䡣
   οOpenFcGl.dllʹ˵еӡ
>
<glLoadIdentityͼ
glLoadIdentity[]ͼ

   úǽXYZƵĻλͨÿһͼ֮ǰҪд
   οOpenFcGl.dllʹ˵еӡ
>
<glAxesAngleʾתǶ
glAxesAngle[]ʾתǶȡ
>
<glTranslatedƶ
glTranslated[x,y,z]ƶ

   ע⣺ƶʱĻΪԵǰλΪƶ
   ͨÿһͼ֮ǰҪд
   οOpenFcGl.dllʹ˵еӡ
>
<glAxisRateƶ
glAxisRate(x)̲Ļƶʵȱʡֵ0.1øúƶʡ
>
<glColor3dɫ
glColor3d[r,g,b]ɫ

   ֱǺ졢̡ɫǿֵȡֵΧǴ01
   һЩɫ
     [1,0,0]ɫ[0,1,0]ɫ[0,0,1]ɫ[0,0,0]ɫ[1,1,1]ɫ

   οOpenFcGl.dllʹ˵еӡ
>
<glBeginʼͼ
glBegin[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Ƽ򵥡͹εı߽硣

   fcerr=1glBegin[mode]glEnd[]ûгɶʹá
   fcerr=2modeǷ
>
<const: ͼģʽ
GL_POINTS=0,		GL_LINES=1,	GL_LINE_LOOP=2,
GL_LINE_STRIP=3,	GL_TRIANGLES=4,	GL_TRIANGLE_STRIP=5,
GL_TRIANGLE_FAN=6,	GL_QUADS=7,	GL_QUAD_STRIP=8,
GL_POLYGON=9
>
<glEndͼ
glEnd[]ͼ

   glBegin[mode]glEnd[]ɶʹãglBegin[mode]ʾһͼԪĿʼglEnd[]ʾһͼԪĽ
   fcerr=1glBegin[mode]glEnd[]ûгɶʹá
>
<glVertex3dûͼ
glVertex3d[X,Y,Z]ûͼ

   X,Y,ZĻϵеһ㡣
   ע⣺һ㣬ͼεĻƴӶ㿪ʼҪʱ뷽ơ
>
<glRotatedͼת
glRotated[Angle,Xvector,Yvector,Zvector]ʹΧת

  AngleΪתǶȣXvector,YvectorZvectorһʾһתʹ(1,0,0)ζһXתһԪʹ(-1,0,0)ζһXתһԪ
  οOpenFcGl.dllʹ˵еӡ
>
<glAngleɼ̲ݵתǶ
glAngle(i)ɼ̲ݵתǶ

   OpenFcGl.dllɼ̲ݵɺglAngle[i]ãʹ뺯glRotated[...]Ͽʹͼת

   Shift + ʹglAngle[1]ֵӣ
   Shift + ʹglAngle[1]ֵ٣
   Shift + ʹglAngle[2]ֵӣ
   Shift + ʹglAngle[2]ֵ٣
   Shift + PageUp  ʹglAngle[3]ֵ٣
   Shift + PageDownʹglAngle[3]ֵӣ
   Shift + HomeʹglAngle[i]ֵΪ0

   ÿһͼԪǰ´룬ü̲ͼXYZת
   glRotated[glangle(1),1,0,0]; //ʹͼXת
   glRotated[glangle(2),0,1,0]; //ʹͼYת
   glRotated[glangle(3),0,0,1]; //ʹͼZת
>
<glAngleRate̲ͼת
glAngleRate(x)̲ͼת

   ̲ͼתʵȱʡֵ0.5øúͼתʡ
>
<glPrintcnַ
glPrintcn["ҵ OpenFC & OpenGL !"]ַ

   úٶȺֺӢġ

   úܷд

   1ַַ
>
<glPrintӢַ
glPrint["abc 123 !!!]Ӣַ

   úٶȺܿ죬֡

   úܷд

   1ַַ
>
<meshƶά
mesh(X1,X2,Y1,Y2,x1,x2,y1,y2)ƶά

   ƶά(X1,X2,Y1,Y2)ÿ10ȷ֣(x1,x2,y1,y2)עϡ
>
<mesh3dά
mesh3d(X1,X2,Y1,Y2,Z1,Z2,x1,x2,y1,y2,z1,z2)ά

   ά(X1,X2,Y1,Y2,Z1,Z2)ÿ10ȷ֣(x1,x2,y1,y2,z1,z2)עϡ
>
<plotһԪͼ
plot[]һԪͼʵ

  plot[#"...",-15,15,"y",-20,20,"axes",-5,5,-3,3,"plotpoints",500,"cut","noaxes","nodraw"];

  #"..."ΪѾһԪ-15,15ΪԱΧ"y",-20,20ΪֵΧȱʡֵΧԶԱڵͼ"axes",-5,5,-3,3趨ĻϵĻͼȱʡĻͼ-5,5,-5,5"plotpoints",500趨ԱķָĿȱʡķָĿΪ1000"cut"ʾгͼ߶Σȱʡǽͼ߶λڻͼı߽ϣ"noaxes"ʾᣬȱʡǻ᣻"nodraw"ʾƺͼֻᣬȱʡǼȻͼֻᡣ"y""axes""plotpoints""cut""noaxes""nodraw"ǿѡ
  úܷд

  -2ݹûǶ̫
  1ƥ䣻
  2ʶָڣ
  3ָıʽ#"..."ڣ
  4ָıʽ#"..."δͨ
  5ָıʽ#"..."һԪ

  ӣ

   "DrawBegin"; //ʼַ

   glClear[]; //ĻԼȻ棻
   glLoadIdentity[]; //ͼ
   glTranslated[0,0,-6]; //ƶ꣬Ļƶ6Ԫ
   glColor3d[1,0,0];//ɫ;
   "f"(x)=x*sin[x]; //һԪ壻
   plot[#"f",-10,10,"axes",-3,3,-2,2]; //һԪͼ

   "DrawEnd"; //ַ

   //гƣ
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };
>
<paraplotƽߵĲͼ
paraplot[]ƽߵĲͼʵ

  paraplot[#"X",#"Y",-15,15,"xy",-15,15,-20,20,"axes",-5,5,-3,3,"plotpoints",500,"cut","noaxes","nodraw"];

  #"X",#"Y"ΪѾĲ̣-15,15ΪԱΧ"xy",-15,15,-20,20޶XYı仯ΧȱʡԶԱڵͼ"axes",-5,5,-3,3趨ĻϵĻͼȱʡĻͼ-5,5,-5,5"plotpoints",500趨ԱķָĿȱʡķָĿΪ1000"cut"ʾгͼ߶Σȱʡǽͼ߶λڻͼı߽ϣ"noaxes"ʾᣬȱʡǻ᣻"nodraw"ʾƺͼֻᣬȱʡǼȻͼֻᡣ"xy""axes""plotpoints""cut""noaxes""nodraw"ǿѡ
  úܷд

  -2ݹûǶ̫
  1ƥ䣻
  2ʶָڣ
  3ָıʽ#"..."ڣ
  4ָıʽ#"..."δͨ
  5ָıʽ#"..."һԪ

  ӣ

   "DrawBegin"; //ʼַ

   glClear[]; //ĻԼȻ棻
   glLoadIdentity[]; //ͼ
   glTranslated[0,0,-15]; //ƶ꣬Ļƶ15Ԫ
   glColor3d[1,0,0];//ɫ;
   "X"(x)=sin[x]^3; //X壻
   "Y"(x)=cos[x]^3; //Y壻
   paraplot[#"X",#"Y",0,10]; //ƻƽߵĲͼ

   "DrawEnd"; //ַ

   //гƣ
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };
>
<plot3dƶԪͼ
plot3d[]ƶԪͼʵ

  plot3d[#"...",-5,5,-6,6,"z",-2,2,"axes",-3,5,-3,6,-6,0,"plotpoints",50,30,"cut","noaxes","nomesh","nodraw"];

  #"..."ΪѾĶԪ-5,5Ϊxı仯Χ-6,6Ϊyı仯Χ"z",-2,2Ϊzı仯ΧȱʡԶԱڵͼ"axes",-3,5,-3,6,-6,0趨ĻϵĻͼ-3,5趨Xλã-3,6趨Yλã-6,0趨ZλãȱʡĻͼ-5,5,-5,5,-5,5"plotpoints",50,30е5030趨xyķָĿȱʡķָĿֱ5050"cut"ʾгͼͼȱʡǽͼͼڻͼı߽ϣ"noaxes"ʾᣬȱʡǻ᣻"nomesh"ʾȱʡǻ"nodraw"ʾƺͼֻᣬȱʡǼȻͼֻᡣ"z""axes""plotpoints""cut""noaxes""nomesh""nodraw"ǿѡ

  úܷд

  -2ݹûǶ̫
  1ƥ䣻
  2ʶָڣ
  3ָıʽ#"..."ڣ
  4ָıʽ#"..."δͨ
  5ָıʽ#"..."ǶԪ

  ӣ

   clear[];
   NewDoubleS[1];setd[0,0];//һ
   "DrawBegin";
   glClear[];
   glLoadIdentity[];
   glTranslated[0,0,-20];
   glColor3d[0,1,0];//ɫ;
   glRotated[getdadd(0,1),1,1,1];//ʹͼת
   "f"(x,y)=(x^2-2*x)*exp(-x^2-y^2-x*y);
   plot3d[#"f",-3,3,-3,3];
   FindErrQuit[];//д
   "DrawEnd";
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };
>
<paraplot3dάͼ
paraplot3d[]άͼʵ

  paraplot3d[#"X",#"Y",#"Z",-5,5,-6,6,"xyz",-3,3,-5,5,-2,2,"axes",-3,5,-3,6,-6,0,"plotpoints",50,30,"cut","noaxes","nomesh","nodraw"];

  #"X",#"Y",#"Z"ΪѾĲ̣-5,5Ϊxı仯Χ-6,6Ϊyı仯Χ"xyz",-3,3,-5,5,-2,2Ϊ޶#"X",#"Y",#"Z"ı仯ΧȱʡԶԱڵͼ"axes",-3,5,-3,6,-6,0趨ĻϵĻͼ-3,5趨Xλã-3,6趨Yλã-6,0趨ZλãȱʡĻͼ-5,5,-5,5,-5,5"plotpoints",50,30е5030趨xyķָĿȱʡķָĿֱ5050"cut"ʾгͼͼȱʡǽͼͼڻͼı߽ϣ"noaxes"ʾᣬȱʡǻ᣻"nomesh"ʾȱʡǻ"nodraw"ʾƺͼֻᣬȱʡǼȻͼֻᡣ"xyz""axes""plotpoints""cut""noaxes""nomesh""nodraw"ǿѡ

  úܷд

  -2ݹûǶ̫
  1ƥ䣻
  2ʶָڣ
  3ָıʽ#"..."ڣ
  4ָıʽ#"..."δͨ
  5ָıʽ#"..."ǶԪ

  ӣ

   clear[];
   NewDoubleS[1];setd[0,0];//һ
   "DrawBegin";
   glClear[];
   glLoadIdentity[];
   glTranslated[0,0,-20];
   glColor3d[0,1,0];//ɫ;
   glRotated[getdadd(0,1),1,1,1];//ʹͼת
   "x"(x,y)=[2-cos[x]]*cos[y];
   "y"(x,y)=[2-cos[x]]*sin[y];
   "z"(x,y)=sin[x];
   paraplot3d[#"x",#"y",#"z",-3,3,-3,3];
   FindErrQuit[];//д
   "DrawEnd";
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };
>
<glPointSizeĳߴ
glPointSize[size]ĳߴ

  õĿȣΪλsize0.0ȱʡʱΪ1.0size<=0ȡsize=1.0

  ӣ

   "DrawBegin";				//ͼʼַ
   glClear[];				//ĻԼȻ棻
   glColor3d[1,0,0];			//ɫΪɫ
   glAxesAngle[];			//ʾתǶȣ
   glLoadIdentity[];			//ͼ
   glTranslated[0,0,-20];		//ƶ꣬Ļƶ20Ԫ
   glRotated[glangle(1),1,0,0];		//ɼ̿ʹͼXת
   glRotated[glangle(2),0,1,0];		//ɼ̿ʹͼYת
   glRotated[glangle(3),0,0,1];		//ɼ̿ʹͼZת

   // һϵдСߴ粻ͬĵ㣨ΪչԪ
   glColor3d[0,1,0];			//ɫΪɫ
   (:i)=one
   {i=1,
     for{le(i,10),
        glPointSize(i*2),		//ĳߴ;
        glBegin(0),
         glVertex3d(-10.0+i*2,0.0,0.0),
        glEnd(),
        i=i+1
       }
   };

   FindErrQuit[];			//д
   "DrawEnd";				//ͼַ

   //ͼʼͽַOpenFcGl.dllгƣ
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };
>
<glLineWidth߿
glLineWidth[width]߿

  ߿Ϊλwidth0.0ȱʡʱΪ1.0width<=0ȡwidth=1.0

  ӣ

   "DrawBegin";				//ͼʼַ
   glClear[];				//ĻԼȻ棻
   glColor3d[1,0,0];			//ɫΪɫ
   glAxesAngle[];			//ʾתǶȣ
   glLoadIdentity[];			//ͼ
   glTranslated[0,0,-20];		//ƶ꣬Ļƶ20Ԫ
   glRotated[glangle(1),1,0,0];		//ɼ̿ʹͼXת
   glRotated[glangle(2),0,1,0];		//ɼ̿ʹͼYת
   glRotated[glangle(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);

   FindErrQuit[];			//д
   "DrawEnd";				//ͼַ

   //ͼʼͽַOpenFcGl.dllгƣ
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };
>
<glLineStippleߵģʽ
glLineStipple[factor,pattern]ߵģʽ

   Ϊǰģʽpatternһϵе16λ01ظظָߡÿһλһأҴӵλʼ1ʾõǰɫһأָĸ0ʾǰƣֻƶһλָĸfactorǸӣpatternеԪأظ1ƶ0磬factorΪ21ʱ2Σ0ʱƶ2ԪfactorĴСΧ1255֮䡣ڻ֮ǰһ£úglEnable(GL_LINE_STIPPLE);ãglDisable(GL_LINE_STIPPLE)رա

  úܷд

  1Ҫ

  ӣ

   "DrawBegin";				//ͼʼַ
   glClear[];				//ĻԼȻ棻
   glColor3d[1,0,0];			//ɫΪɫ
   glAxesAngle[];			//ʾתǶȣ
   glLoadIdentity[];			//ͼ
   glTranslated[0,0,-20];		//ƶ꣬Ļƶ20Ԫ
   glRotated[glangle(1),1,0,0];		//ɼ̿ʹͼXת
   glRotated[glangle(2),0,1,0];		//ɼ̿ʹͼYת
   glRotated[glangle(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();
   glEnable (GL_LINE_STIPPLE);

   FindErrQuit[];			//д
   "DrawEnd";				//ͼַ

   //ͼʼͽַOpenFcGl.dllгƣ
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            };
>
<const: glEnableģʽ塢λģʽ
GL_LINE_STIPPLE=2852,
GL_FRONT=1028,GL_BACK=1029,GL_FRONT_AND_BACK=1032,
GL_POINT=6912,GL_LINE=6913,GL_FILL=6914
>
<glEnableOpenGLĸֹ
glEnable[cap]OpenGLĸֹ

   glDisable(cap)ʹãglEnable[cap]OpenGLĹܣʱglDisable(cap)ȡֹܡ
   glEnable(GL_LINE_STIPPLE)ģʽ

  úܷд
  1Ҫ

  ο glLineStippleߵģʽ еӡ
>
<glDisableȡOpenGLĸֹ
glDisable[cap]ȡOpenGLĸֹ

   glEnable(cap)ʹãglEnable[cap]OpenGLĹܣʱglDisable(cap)ȡֹܡ
   glDisable(GL_LINE_STIPPLE)ȡģʽ

  úܷд
  1Ҫ

  ο glLineStippleߵģʽ еӡ
>
<glPolygonModeģʽ
glPolygonMode[face,mode]ģʽ

   ƶָĻģʽfaceΪGL_FRONTGL_BACKGL_FRONT_AND_BACKmodeΪGL_POINTGL_LINEGL_FILLֱʾʽΡʽλȫʽΡȱʡʱƵȫʽΡ

  úܷд
  1Ҫ

  ӣ

   clear[];
   NewDoubleS[1];setd[0,0]; //һ
   "DrawBegin";
   glClear[];
   glColor3d[1,0,0]; //ɫ;
   glAxesAngle[]; //ʾתǶȣ
   glLoadIdentity[];
   glTranslated[0,0,-35];
   glColor3d[0,1,0]; //ɫ;
   glRotated[90,1,0,0]; //ʹͼXת90ȡ
   glRotated[glangle(1),1,0,0]; //ɼ̿ʹͼXת
   glRotated[glangle(2),0,1,0]; //ɼ̿ʹͼYת
   glRotated[glangle(3),0,0,1]; //ɼ̿ʹͼZת
   "f"(x,y)=(x^2-2*x)*exp(-x^2-y^2-x*y);
   (:x)=one
   {x=5*sin[getd(0)],
    glTranslated[-11,x,x],
    glPolygonMode[GL_FRONT,GL_POINT],	//ģʽã
    plot3d[#"f",-x,x,-x,x,"noaxes","nomesh"],
    glTranslated[11,x/2,x/2],
    glPolygonMode[GL_BACK,GL_LINE],	//ģʽã
    plot3d[#"f",-x,x,-x,x,"noaxes","nomesh"]
   };
   (:x)=one
   {x=5*sin[getd(0)],
    glTranslated[11,x/2,x/2],
    glPolygonMode[GL_FRONT_AND_BACK,GL_FILL],	//ģʽã
    plot3d[#"f",-x,x,-x,x,"noaxes","nomesh"]
   };
   GetdAdd[0,0.05];//ٶȿƣ
   FindErrQuit[]; //д
   "DrawEnd";
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            }; 
>
<key״̬
key[n]״̬

  ȡϼ״̬nΪ̴룬0<=n<256ʱú1߼棩򷵻-1߼٣
  ο const: 볣塣
  úܷд1Ҫ

  ӣ

   NewDoubleS[1];setd[0,0]; //һ
   "DrawBegin";
   glClear[];
   glColor3d[1,0,0]; //ɫ;
   glAxesAngle[]; //ʾתǶȣ
   glLoadIdentity[];
   glTranslated[0,0,-35];
   glColor3d[0,1,0]; //ɫ;
   glRotated[90,1,0,0]; //ʹͼXת90ȡ
   glRotated[glangle(1),1,0,0]; //ɼ̿ʹͼXת
   glRotated[glangle(2),0,1,0]; //ɼ̿ʹͼYת
   glRotated[glangle(3),0,0,1]; //ɼ̿ʹͼZת
   "f"(x,y)=sin[sqrt(x*x+y*y)];
   (:x)=one
   {x=10*sin[getd(0)],
    plot3d[#"f",-x,x,-x,x,"noaxes","nomesh"],
    glTranslated[-11,0,0],
    plot3d[#"f",-x,x,-x,x,"noaxes","nomesh"],
    glTranslated[22,0,0],
    plot3d[#"f",-x,x,-x,x,"noaxes","nomesh"]
   };
   if[-key(VK_CONTROL),GetdAdd(0,0.01)];//̿ƣCtrlͣ
   FindErrQuit[]; //д
   "DrawEnd";
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],
             GetAddress[$"DrawEnd",#"DrawEnd"]
            }; 
>
<const: 볣
VK_LBUTTON	=1,
VK_RBUTTON	=2,
VK_CANCEL	=3,
VK_MBUTTON	=4,

VK_BACK		=8,
VK_TAB		=9,

VK_CLEAR	=12,
VK_RETURN	=13,

VK_SHIFT	=16,
VK_CONTROL	=17,
VK_MENU		=18,
VK_PAUSE	=19,
VK_CAPITAL	=20,

VK_KANA		=21,
VK_HANGEUL	=21,
VK_HANGUL	=21,
VK_JUNJA	=23,
VK_FINAL	=24,
VK_HANJA	=25,
VK_KANJI	=25,

VK_ESCAPE	=27,

VK_CONVERT	=28,
VK_NONCONVERT	=29,
VK_ACCEPT	=30,
VK_MODECHANGE	=31,

VK_SPACE	=32,
VK_PRIOR	=33,
VK_NEXT		=34,
VK_END		=35,
VK_HOME		=36,
VK_LEFT		=37,
VK_UP		=38,
VK_RIGHT	=39,
VK_DOWN		=40,
VK_SELECT	=41,
VK_PRINT	=42,
VK_EXECUTE	=43,
VK_SNAPSHOT	=44,
VK_INSERT	=45,
VK_DELETE	=46,
VK_HELP		=47,
VK_0	=48,
VK_1	=49,
VK_2	=50,
VK_3	=51,
VK_4	=52,
VK_5	=53,
VK_6	=54,
VK_7	=55,
VK_8	=56,
VK_9	=57,
VK_A	=65,
VK_B	=66,
VK_C	=67,
VK_D	=68,
VK_E	=69,
VK_F	=70,
VK_G	=71,
VK_H	=72,
VK_I	=73,
VK_J	=74,
VK_K	=75,
VK_L	=76,
VK_M	=77,
VK_N	=78,
VK_O	=79,
VK_P	=80,
VK_Q	=81,
VK_R	=82,
VK_S	=83,
VK_T	=84,
VK_U	=85,
VK_V	=86,
VK_W	=87,
VK_X	=88,
VK_Y	=89,
VK_Z	=90,

VK_LWIN	=91,
VK_RWIN	=92,
VK_APPS	=93,

VK_NUMPAD0	=96,
VK_NUMPAD1	=97,
VK_NUMPAD2	=98,
VK_NUMPAD3	=99,
VK_NUMPAD4	=100,
VK_NUMPAD5	=101,
VK_NUMPAD6	=102,
VK_NUMPAD7	=103,
VK_NUMPAD8	=104,
VK_NUMPAD9	=105,
VK_MULTIPLY	=106,
VK_ADD		=107,
VK_SEPARATOR	=108,
VK_SUBTRACT	=109,
VK_DECIMAL	=110,
VK_DIVIDE	=111,
VK_F1	=112,
VK_F2	=113,
VK_F3	=114,
VK_F4	=115,
VK_F5	=116,
VK_F6	=117,
VK_F7	=118,
VK_F8	=119,
VK_F9	=120,
VK_F10	=121,
VK_F11	=122,
VK_F12	=123,
VK_F13	=124,
VK_F14	=125,
VK_F15	=126,
VK_F16	=127,
VK_F17	=128,
VK_F18	=129,
VK_F19	=130,
VK_F20	=131,
VK_F21	=132,
VK_F22	=133,
VK_F23	=134,
VK_F24	=135,

VK_NUMLOCK	=144,
VK_SCROLL	=145,

VK_LSHIFT	=160,
VK_RSHIFT	=161,
VK_LCONTROL	=162,
VK_RCONTROL	=163,
VK_LMENU	=164,
VK_RMENU	=165,

VK_ATTN		=246,
VK_CRSEL	=247,
VK_EXSEL	=248,
VK_EREOF	=249,
VK_PLAY		=250,
VK_ZOOM		=251,
VK_NONAME	=252,
VK_PA1		=253
>
<glNewPrintcnListsַʾб
glNewPrintcnLists(n)ַʾб

  ʾn0123...n-1ַʾбɹglSetPrintCnList[i,str]洢ҪʾַҪʾʱglPrintCnList[i]ʾַͨڻͼУOpenFcGlڣȻڴڵĳʼ루òִڴִһΣʹglNewPrintcnLists(n)glSetPrintCnList[i,str]ڳƴ루òִ뱻ѭִУʹglPrintCnList[i]
  fcerr=1ûгɹ
  οglPrintCnListеӡ
>
<glSetPrintCnListַʾб
glSetPrintCnList[i,str]ַʾб

  ַstriʾбiΪʾбţóɹglPrintCnList[i]ʾַͨڻͼУOpenFcGlڣȻڴڵĳʼ루òִڴִһΣʹglNewPrintcnLists(n)glSetPrintCnList[i,str]ڳƴ루òִ뱻ѭִУʹglPrintCnList[i]
  fcerr=1ַַ
  fcerr=2ûгɹ
  οglPrintCnListеӡ
>
<glPrintCnListʾ洢беַ
glPrintCnList[i]ʾ洢беַ

  ʾ洢ڵiбеַúٶȱglPrintCn["..."]Ҫ졣ͨڻͼУOpenFcGlڣȻڴڵĳʼ루òִڴִһΣʹglNewPrintcnLists(n)glSetPrintCnList[i,str]ڳƴ루òִ뱻ѭִУʹglPrintCnList[i]
  fcerr=1ʾûгɹ
  ӣ
   clear[];

   //һʽĵַװ룬ͼڣȻstop˳
   "init"()=DrawScene{GetAddress[$"init",#"init"]+1,-1}+stop[];

   glNewPrintcnLists[3];				//3ʾб
   glSetPrintCnList[0,"I love ַ"];		//ַʾб
   glSetPrintCnList[1,"ʹʾбԿٵʾģ"];
   glSetPrintCnList[2,"ת OpenFcGl 壡"];

   "DrawBegin";						//ѭִеĻͼʼַ
   glClear[];
   glColor3d[1,0,0];					//ɫ;
   glAxesAngle[];					//ʾתǶȣ

   glLoadIdentity[];
   glTranslated[-8,1,-15];
   glPrintCnList[0];					//ʾ洢беַ0

   glLoadIdentity[];
   glTranslated[-8,0,-15];
   glPrintCnList[1];					//ʾ洢беַ1

   glLoadIdentity[];
   glTranslated[-8,-2,-15];
   glColor3d[0,1,0];					//ɫ;
   glRotated[glangle(1),1,0,0];				//ʹͼXת
   glRotated[glangle(2),0,1,0];				//ʹͼYת
   glRotated[glangle(3),0,0,1];				//ʹͼZת
   glPrintCnList[2];					//ʾ洢беַ2

   FindErrQuit[];					//д
   "DrawEnd";						//ѭִеĻͼַ
   DrawScene{GetAddress[$"DrawBegin",#"DrawBegin"],	//װ볡ƴַ
               GetAddress[$"DrawEnd",#"DrawEnd"]
            };
>
<glExchangeScreenлںȫʾģʽ
glExchangeScreen()лںȫʾģʽ

  F1лںȫʾģʽú1߼棩򷵻-1߼٣
  ڴлʱʱҪг˾Ҫõú
>
<glClearColorĻɫ
glClearColor[r,g,b,Alpha]Ļɫ

  r,g,bֱǺ졢̡ɫǿֵȡֵΧǴ01
  Alphaֵ͸йء
>