编程论坛's Archiver

starrysky 发表于 2005-10-20 09:32

[原创]喷气式发动机模拟(OpenGL)-->starrysky转移

<P>[attach]3417[/attach]


最近看到不少学弟学妹们为了学习OpenGL而忙的一塌糊涂,就把去年我做的一个程序发出来
给大家共同学习一下。看到这个程序,我心里既高兴又痛苦,痛并着快乐吧,快乐的是这个
程序是我一手做出来的,不骗你们,里面所有的程序代码全是我一个人写的,让我相当有成就感。
痛苦的是,和我一组的其他几位同学没几个真正关心这个程序(程序占总分40分啊,还有额外的加分),只是在最后几个星期假情假意做了个文档
以示自己尽了分力,个别的重头到尾问都没问一句,挂个名而已。后来程序被老师看好,说是要进什么国家库,于是又到外面炫耀。
唉,要不是我很想把程序给做出来,看看效果,我真的不想做了,大不了一齐挂了,明年都重修去。
我不图名利,但我怕心寒。
不发牢骚了,言归正传。本程序编译环境:Borland C++build6.0
由于引入了粒子系统(共60000个粒子),而且为了达到很好的效果粒子用的是三棱锥而不是点,所以运算量很大
,对电脑要求有点高,配置不好的电脑可以在头文件中将粒子个数改少一些。由于我将说明文档整和在了程序中,
有大量的图片要处理,所以编译时会很慢(我的电脑要50多秒 CPU p4 2.4G DDR400 512M 七彩虹 Radom9800se)
请耐心等待。
因为不是最终版所以有些BUG没改(编译没有问题,只是某些功能无法实现):
程序中由于按钮控制与键盘有冲突,所以键盘控制部分的语句不能被执行。只要在按钮函数中的开头和结尾加上2个函数就能解决.具体函数现在忘了,具体方法是先让按钮判别为无,再在点击按钮时激活按钮,按钮函数执行完时再判别为无,过几天再发出来。
有时候运行程序时看不到图形,但将窗口还原再最大化就又出现了(我的机子上没出现过这个问题,但在比较差的机子上出现过,估计是显卡问题,刷新不够)。这是因为在TFormMain(TComponent* Sender)中少了几句话,没有重建窗口,请大家参考紧跟着的FormResize(TObject *Sender)后自行添加。自己不试试是不会记住的。
因为音乐打包比较大,所以把音乐删除了,但保留了音乐控制语句,请大家自行添加.
还有什么问题的话请指出。
附件中包括完整源代码和一个已经编译好的可执行文件,直接运行可执行文件就可以看到效果了。注意,源代码不能用VC++6.0直接运行,因为格式不同,要修改一些地方才可以。</P>
<P>下面我把主要的头文件和函数发出来
//Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#define Max 20000            //粒子数1   有3种不同的粒子
#define Max1 20000          //粒子数2
#define Max2 20000          //粒子数3
//--------------------------------------------
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;StdCtrls.hpp&gt;
#include &lt;Forms.hpp&gt;
#include &lt;ExtCtrls.hpp&gt;
#include &lt;Menus.hpp&gt;
#include &lt;gl\gl.h&gt;
#include &lt;gl\glu.h&gt;
#include &lt;math.h&gt;
//---------------------------------------------------------------------------
typedef struct              //粒子系统所用的结构体
         {
          bool active;
          GLfloat life;
          GLfloat fade;
          GLfloat r;
          GLfloat g;
          GLfloat b;
          GLfloat x;
          GLfloat y;
          GLfloat z;
          GLfloat xi;
          GLfloat yi;
          GLfloat zi;
          GLfloat xg;
          GLfloat yg;
          GLfloat zg;
    }  particles;</P>
<P>//---------------------------------------------------------------------
class TFormMain : public TForm
{
__published: // IDE-managed Components
        TPanel *Control_Zone;
        TButton *Button5;
        TButton *Button6;
        TButton *Button7;
        TButton *Button8;
        TButton *Button9;
        TButton *Button10;
        TButton *Button11;
        TTimer *Timer1;
        TButton *Button12;
        TStaticText *StaticText5;
        TStaticText *StaticText7;
        TStaticText *StaticText8;
        TStaticText *StaticText9;
        TStaticText *StaticText10;
        TStaticText *StaticText11;
        TStaticText *StaticText12;
        TStaticText *StaticText13;
        TButton *Button13;
        TStaticText *StaticText14;
        TStaticText *StaticText15;
        TStaticText *StaticText16;
        TButton *Button14;
        TButton *Button15;
        TMainMenu *MainMenu1;
        TMenuItem *File1;
        TMenuItem *Exit1;
        TMenuItem *Help2;
        TMenuItem *About2;
        TMenuItem *SearchforHelpOn2;
        TMenuItem *Contents2;
        TMenuItem *File2;
        TMenuItem *PrintSetup1;
        TMenuItem *N2;
        TMenuItem *SaveAs1;
        TMenuItem *N1;
        TMenuItem *N3;
        TMenuItem *N4;
        TStaticText *StaticText6;
        TLabel *Label1;
        TButton *Button1;
        TButton *Button2;
        TButton *Button3;
        TButton *Button4;
        TButton *Button16;
        TButton *Button17;</P>
<P>    void __fastcall FormResize(         TObject *Sender);
    void __fastcall FormCreate(         TObject *Sender);
    void __fastcall FormKeyDown(        TObject *Sender, WORD &amp;Key,   TShiftState Shift);
    void __fastcall FormMouseMove(      TObject *Sender, TShiftState  Shift, int X,int Y);
    void __fastcall FormMouseDown(      TObject *Sender, TMouseButton Button,TShiftState Shift, int   X, int Y );
    void __fastcall FormMouseUp(        TObject *Sender, TMouseButton Button,TShiftState Shift, int   X, int Y );
    void __fastcall FormMouseWheelDown( TObject *Sender, TShiftState  Shift, TPoint  &amp;MousePos, bool &amp;Handled );
    void __fastcall FormMouseWheelUp(   TObject *Sender, TShiftState  Shift, TPoint  &amp;MousePos, bool &amp;Handled );
        void __fastcall Button1Click(TObject *Sender);</P>
<P>        void __fastcall Button5Click(TObject *Sender);
        void __fastcall Button6Click(TObject *Sender);
        void __fastcall Button7Click(TObject *Sender);
        void __fastcall Button8Click(TObject *Sender);
        void __fastcall Button9Click(TObject *Sender);
        void __fastcall Button10Click(TObject *Sender);</P>
<P>        
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall Button12Click(TObject *Sender);
        void __fastcall Button11Click(TObject *Sender);
        void __fastcall Button13Click(TObject *Sender);
        void __fastcall Button14Click(TObject *Sender);
        void __fastcall Button15Click(TObject *Sender);
        void __fastcall Exit1Click(TObject *Sender);
        void __fastcall SaveAs1Click(TObject *Sender);
        void __fastcall PrintSetup1Click(TObject *Sender);
        void __fastcall Contents2Click(TObject *Sender);
        void __fastcall N1Click(TObject *Sender);
        void __fastcall SearchforHelpOn2Click(TObject *Sender);
        void __fastcall About2Click(TObject *Sender);
        void __fastcall N3Click(TObject *Sender);
        void __fastcall N4Click(TObject *Sender);</P>
<P>
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button17Click(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button16Click(TObject *Sender);</P>
<P>private: // User declarations
    HDC             hdc;
    float           w, h;
    int             PixelFormat,x,y;
    int             I,XX;
    float           zoom,M,J,K,n,N,V,Angle,L,O,P;
    HGLRC           hrc;
    GLuint         list_of_objects,waike;
    Graphics::TBitmap* bitmap;
    BOOL            Left_Button_Down,inclined,key_and_mouse_down;</P>
<P>    int loop;</P>
<P>public:  // User declarations
         __fastcall TFormMain(TComponent* Sender);
    void __fastcall IdleLoop(TObject*, bool&amp;);
    void __fastcall SetPixelFormatDescriptor();
    void __fastcall SetupLighting();
    void __fastcall SetupTextures();
    void __fastcall FormPaint( TObject *Sender );
    void __fastcall FormDestroy( TObject *Sender );</P>
<P>    void __fastcall Prepare_All();
    void __fastcall Prepare_Wolun1();
    void __fastcall Prepare_Top();
    void __fastcall Prepare_FireRoom();
    void __fastcall Prepare_Wolun2();
     void __fastcall Prepare_WeiPen();
     void __fastcall Prepare_Waike1();
      void __fastcall Prepare_Waike2();
    void __fastcall Prepare_Waike3();
      void __fastcall Prepare_Smoke1();
      void __fastcall Prepare_Smoke2();
       void __fastcall Prepare_Smoke3();
            void __fastcall Prepare_Waike11();
      void __fastcall Prepare_Waike21();
    void __fastcall Prepare_Waike31();
    void __fastcall Normal(float*p1,float*p2,float*p3,float*n);
    void __fastcall Draw_Out_All();
    void __fastcall Draw_Out_Wolun1();
    void __fastcall Draw_Out_Top();
    void __fastcall Draw_Out_FireRoom();
     void __fastcall Draw_Out_Wolun2();
     void __fastcall Draw_Out_WeiPen();
      void __fastcall Draw_Out_Waike1();
       void __fastcall Draw_Out_Waike2();
    void __fastcall Draw_Out_Waike3();
          void __fastcall Draw_Out_Waike11();
       void __fastcall Draw_Out_Waike21();
    void __fastcall Draw_Out_Waike31();
         void __fastcall   polarView();
         void __fastcall Draw_Out_Smoke1();
          void __fastcall Draw_Out_Smoke2();
        void __fastcall   Draw_Out_Smoke3();
        void __fastcall  ShowM();
     particles particle[Max];
     particles particle1[Max]; particles particle2[Max];
};
//---------------------------------------------------------------------------
extern PACKAGE TFormMain *FormMain;
//---------------------------------------------------------------------------
#endif


//Unit1.cpp

//------------------------------------------------------------------------------
#include "stdio.h"
#include &lt;vcl.h&gt;
#include "Unit1.h"
#include "Unit2.h"
#include "Unit6.h"
#include "Unit12.h"
  #include "Unit14.h"
  #include "Unit15.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMain *FormMain;
//------------------------------------------------------------------------------</P>
<P>//---------------------------------------------------------------------------
GLfloat Throttle=5;
  GLfloat glow=.4;
GLfloat glowp=0;
//------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Sender)     //初始化窗口
    : TForm(Sender)
{
    hdc = GetDC(Handle);
    Control_Zone-&gt;Top    = 100;
    Control_Zone-&gt;Left   =3* FormMain-&gt;Width/4 +  1;
    Control_Zone-&gt;Width  =   FormMain-&gt;Width/4 - 32;
    Control_Zone-&gt;Height =   FormMain-&gt;Height  -32;</P>
<P>
    Application-&gt;OnIdle = IdleLoop;
    Left_Button_Down   = FALSE;
    key_and_mouse_down = FALSE;
    inclined           = TRUE;//FALSE;
    zoom               = 0.99;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormResize(TObject *Sender)    //重置窗口
{
  Control_Zone-&gt;Top   = 0;
  Control_Zone-&gt;Left  =ClientWidth-150;            //3*ClientWidth/4+
  Control_Zone-&gt;Width = 150;         //ClientWidth/4-
  Control_Zone-&gt;Height=   ClientHeight;</P>
<P>  float nRange =75.0;
  w = 3*ClientWidth/4-1;
  h =   ClientHeight;
  if( h==0 ) h = 1;</P>
<P>  glViewport(0, 0, w, h);
  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();</P>
<P>  if ( w&lt;=h ) glOrtho( -nRange,    nRange,    -nRange*h/w,nRange*h/w,-nRange,nRange );
  else        glOrtho( -nRange*w/h,nRange*w/h,-nRange,    nRange,    -nRange,nRange );</P>
<P>  glMatrixMode( GL_MODELVIEW );
  glLoadIdentity();
  inclined           = TRUE;
  key_and_mouse_down = FALSE;
}
void __fastcall TFormMain::IdleLoop(TObject*, bool&amp; done) //系统空闲的时候做什么
{
  done = false;</P>
<P>  if( inclined==FALSE )
  {
    glRotatef(  15.0, 1.0, 0.0, 0.0 );
    glRotatef(  -45,0.0,1.0,  0.0 );
    inclined = TRUE;
  }
  if( key_and_mouse_down==FALSE )
    glRotatef( 0.05, 0,1.0, 0.0);</P>
<P>  Draw_Out_All();</P>
<P>
  SwapBuffers(hdc);
}
//------------------------------------------------------------------------------
void __fastcall TFormMain::SetPixelFormatDescriptor()
{
  PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR),1,
        PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,
        PFD_TYPE_RGBA,24,
        0,0,0,0,0,0,
        0,0,
        0,0,0,0,0,
        32,
        0,
        0,
        PFD_MAIN_PLANE,
        0,
        0,0,0
  };
  PixelFormat = ChoosePixelFormat(hdc, &amp;pfd);
  SetPixelFormat( hdc, PixelFormat, &amp;pfd );
}
void __fastcall TFormMain::SetupLighting()    //设置光源
{
  float MaterialAmbient[]   = {  0.6,   0.6,   0.6,  1.0 };
  float MaterialDiffuse[]   = {  0.8,   0.8,   0.8,  1.0 };
  float MaterialSpecular[]  = {  1.0,   1.0,   1.0,  1.0 };
  float MaterialShininess[] = { 80.0                     };
  glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT,   MaterialAmbient  );
  glMaterialfv( GL_FRONT_AND_BACK, GL_DIFFUSE,   MaterialDiffuse  );
  glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR,  MaterialSpecular );
  glMaterialfv( GL_FRONT_AND_BACK, GL_SHININESS, MaterialShininess);</P>
<P>
  float AmbientLightPosition[] = { 0,   0,   30.0,  0.0 };
  float LightAmbient[]         = {  0.5,   0.5,   0.5,  1.0 };
  glLightfv(GL_LIGHT0, GL_POSITION, AmbientLightPosition);</P>
<P>  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, LightAmbient);  
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);  //双面反光</P>
<P>
  glEnable( GL_LIGHTING       );
  glEnable( GL_LIGHT0         );
  glEnable( GL_COLOR_MATERIAL );</P>
<P>
  glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );</P>
<P>  glShadeModel( GL_SMOOTH );
  glEnable(GL_POLYGON_SMOOTH);
}
void __fastcall TFormMain::FormPaint( TObject *Sender )
{
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  glFlush();
}</P>
<P>void __fastcall TFormMain::FormDestroy( TObject *Sender )
{</P>
<P>}
void __fastcall TFormMain::FormCreate(TObject *Sender)
{
  hdc = GetDC( Handle );
  SetPixelFormatDescriptor();</P>
<P>  hrc = wglCreateContext( hdc );
  if( hrc == NULL )                       ShowMessage("对不起,GL设备描述表是空的。");
  if( wglMakeCurrent(hdc, hrc) == false ) ShowMessage("对不起 MakeCurrent() 执行不了。");
  w = ClientWidth;
  h = ClientHeight;</P>
<P>  glEnable( GL_DEPTH_TEST );
   glDisable( GL_CULL_FACE );
  glClearColor(0.1f,0.1f, 0.3f, 0.0f);
  SetupLighting();
   //**********************************
    Control_Zone-&gt;Top   = 0;
  Control_Zone-&gt;Left  =ClientWidth-150;         //3*ClientWidth/4+
  Control_Zone-&gt;Width = 150;            // ClientWidth/4-
  Control_Zone-&gt;Height=   ClientHeight;</P>
<P>  float nRange =75.0;
  w = 3*ClientWidth/4-1;
  h =   ClientHeight;
  if( h==0 ) h = 1;</P>
<P>  glViewport(0, 0, w, h);
  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();</P>
<P>  if ( w&lt;=h ) glOrtho( -nRange,    nRange,    -nRange*h/w,nRange*h/w,-nRange,nRange );
  else        glOrtho( -nRange*w/h,nRange*w/h,-nRange,    nRange,    -nRange,nRange );</P>
<P>  glMatrixMode( GL_MODELVIEW );
  glLoadIdentity();
  inclined           = TRUE;
  key_and_mouse_down = FALSE;
//**********************************
  Prepare_All();
  Prepare_Smoke1();
  Prepare_Smoke2();
  Prepare_Smoke3();
  ShowM();
}
//---------------------------------------------------------------------------


</P>
[align=right][color=#000066][此贴子已经被作者于2005-10-20 10:27:41编辑过][/color][/align]

starrysky 发表于 2005-10-20 09:33

<P>void __fastcall TFormMain::FormKeyDown(TObject *Sender, WORD &amp;Key,TShiftState Shift)     //键盘控制,</P><P>{
  if( Key == VK_UP    )
  {
    key_and_mouse_down=TRUE;
    glRotatef(-5, 1.0, 0.0, 0.0);
  }
  if( Key == VK_DOWN  )
  {
    key_and_mouse_down = TRUE;
    glRotatef( 5, 1.0, 0.0, 0.0);
  }
  if( Key == VK_LEFT  )
  {
    key_and_mouse_down = TRUE;
    glRotatef(-5, 0.0, 1.0, 0.0);
  }
  if( Key == VK_RIGHT )
  {
    key_and_mouse_down = TRUE;
    glRotatef( 5, 0.0, 1.0, 0.0);
  }
  if( Key == VK_ESCAPE )
  {
    glLoadIdentity();
    glRotatef(  15.0, 1.0, 0.0, 0.0 );
    glRotatef( -45.0, 0.0, 1.0, 0.0 );
    inclined = TRUE;
    key_and_mouse_down = FALSE;
  }
  if( Key == VK_ADD )
  {
    glScalef(1/zoom,1/zoom,1/zoom);
  }
  if( Key == VK_SUBTRACT  )
  {
    glScalef(zoom,zoom,zoom);
  }
}</P><P>
void __fastcall TFormMain::FormMouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)//鼠标控制
{
  if( Button==mbLeft )
  {
    Left_Button_Down   = TRUE;
    key_and_mouse_down = TRUE;
    x                  = X;
    y                  = Y;
  }
  else if( Button==mbRight )
  {
    glLoadIdentity();
    glRotatef(  30, 1.0, 0.0, 0.0 );
    glRotatef( 15, 0.0, 1.0, 0.0 );
    inclined           = TRUE;</P><P>    Left_Button_Down   = FALSE;
    key_and_mouse_down = FALSE;
  }
  else
    Left_Button_Down   = FALSE;
}
void __fastcall TFormMain::FormMouseUp(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)
{
  Left_Button_Down = FALSE;
}
void __fastcall TFormMain::FormMouseMove(TObject *Sender,TShiftState Shift, int X, int Y)
{
  if( Left_Button_Down==TRUE )
  {
    if( x != X )
        glRotatef( (X-x)/4, 0.0, 1.0, 0.0);
    if( y != Y )
        glRotatef( (Y-y)/4, 1.0, 0.0, 0.0);
    x = X;
    y = Y;
  }
}
void __fastcall TFormMain::FormMouseWheelDown(TObject *Sender,TShiftState Shift, TPoint &amp;MousePos, bool &amp;Handled)
{
  glScalef( zoom,zoom,zoom );
}
void __fastcall TFormMain::FormMouseWheelUp(TObject *Sender,TShiftState Shift, TPoint &amp;MousePos, bool &amp;Handled)
{
  glScalef( 1/zoom,1/zoom,1/zoom );
}</P><P>void __fastcall TFormMain::Normal( float*p1,float*p2,float*p3,float*n )   //三维坐标转置矩阵
{
  float A[3], B[3], l;
  A[0] = p1[0] - p2[0];
  A[1] = p1[1] - p2[1];
  A[2] = p1[2] - p2[2];</P><P>  B[0] = p3[0] - p2[0];
  B[1] = p3[1] - p2[1];
  B[2] = p3[2] - p2[2];</P><P>  n[0] = B[1]*A[2] - B[2]*A[1];
  n[1] = B[2]*A[0] - B[0]*A[2];
  n[2] = B[0]*A[1] - B[1]*A[0];</P><P>  l = sqrt(n[0]*n[0] + n[1]*n[1] + n[2]*n[2]);
  if(l!=0)
  {
    n[0]=n[0]/l;
    n[1]=n[1]/l;
    n[2]=n[2]/l;
  }
}
//----
//------------------------------------------------------------------------------
void __fastcall TFormMain::Prepare_All()  //做好准备工作 ,建立所有静态物体的模型
{
  list_of_objects = glGenLists(6);
  Prepare_Wolun1();
  Prepare_Top();
   Prepare_FireRoom();
   Prepare_Wolun2();
   Prepare_WeiPen();
   waike=glGenLists(3);
    Prepare_Waike1();
    Prepare_Waike2();
   Prepare_Waike3();
    Prepare_Waike11();
    Prepare_Waike21();
   Prepare_Waike31();
}</P>

starrysky 发表于 2005-10-20 09:34

<P>// 以下是  Prepare_All()的子函数</P><P>
void __fastcall TFormMain::Prepare_Wolun1()
{</P><P>     GLUquadricObj *quadObj;
     glNewList(list_of_objects,GL_COMPILE);
     int n;
     for(n=0;n&lt;72;n++)
     {
        GLfloat p1[]={0,0,0};
        GLfloat p2[]={-0.5,15*cos(3.141592653*(n+1)/36),15*sin(3.141592653*(n+1)/36)} ;
        GLfloat p3[]={0.5,15*cos(3.141592653*n/36),15*sin(3.141592653*n/36)};</P><P>        GLfloat m[3];GLfloat n[3];
        Normal(p1,p2,p3,m);
        Normal(p3,p2,p1,n);
      glBegin(GL_POLYGON);
        glColor3f(0.8,0.8,0.8);
        glNormal3f(m[0],m[1],m[2]);
        glVertex3f(p1[0],p1[1],p1[2]);
        glVertex3f(p2[0],p2[1],p2[2]);
        glVertex3f(p3[0],p3[1],p3[2]);
      glEnd();
       };
     glPushMatrix();
         glColor3f(0.3,0.3,0.3);
         glTranslatef(-0.25,0,0);
         glRotatef( -90.0,0.0,1.0,  0.0 );
         quadObj=gluNewQuadric();
         gluQuadricNormals(quadObj,GLU_SMOOTH);
         gluCylinder(quadObj,7.5,2.8,1,36,2);
     glPopMatrix();</P><P>     glPushMatrix();
          glColor3f(0.3,0.3,0.3);
          glTranslatef(1.25,0,0);
          glRotatef(-90.0,0.0,1.0,  0.0 );
          quadObj=gluNewQuadric();
          gluQuadricNormals(quadObj,GLU_SMOOTH);
          gluCylinder(quadObj,2.8,7.5,1,36,2);
     glPopMatrix();</P><P>     glPushMatrix();
         glColor3f(0.3,0.3,0.3);
         glTranslatef(3.5,0,0);
         glRotatef(-90.0,0.0,1.0,  0.0 );
         quadObj=gluNewQuadric();
         gluQuadricNormals(quadObj,GLU_SMOOTH);
         gluCylinder(quadObj,2.8,2.8,10,36,2);
    glPopMatrix();</P><P>
    glEndList();
}</P><P> void __fastcall TFormMain:: Prepare_Top()
{
    GLUquadricObj *quadObj;
    glNewList(list_of_objects+1,GL_COMPILE);
       glPushMatrix();
           glColor3f(0.3,0.3,0.3);
           glTranslatef(1.25,0,0);
           glRotatef(-90.0,0.0,1.0,  0.0 );
           quadObj=gluNewQuadric();
           gluQuadricNormals(quadObj,GLU_SMOOTH);
           gluCylinder(quadObj,4.5,2.8,10,36,2);
           gluCylinder(quadObj,4.5,0,0,36,2);
           glColor3f(0.45,0.45,0.45);
           gluCylinder(quadObj,17,17,7,36,2);
           gluCylinder(quadObj,16,16,7,36,2);
           gluCylinder(quadObj,17,16,0,36,2);
//------------------------------------
                   glColor3f(0.4,0.4,0.4);
       int n;
       for(n=0;n&lt;12;n++)
     {
        GLfloat p1[]={0,0,0.1};
        GLfloat p2[]={0,0,5};
        GLfloat p3[]={16.8*cos(3.141592653/54+3.141592653*n/6),16.8*sin(3.141592653/54+3.141592653*n/6),0.1} ;
        GLfloat p4[]={16.8*cos(3.141592653/54+3.141592653*n/6),16.8*sin(3.141592653/54+3.141592653*n/6),5};
        GLfloat p5[]={16.8*cos(-3.141592653/54+3.141592653*n/6),16.8*sin(-3.141592653/54+3.141592653*n/6),0.1} ;
        GLfloat p6[]={16.8*cos(-3.141592653/54+3.141592653*n/6),16.8*sin(-3.141592653/54+3.141592653*n/6),5};
        GLfloat m[3];GLfloat n[3];</P><P>     Normal(p1,p2,p3,m);
     glBegin(GL_POLYGON);
        glNormal3f(m[0],m[1],m[2]);
        glVertex3f(p1[0],p1[1],p1[2]);
        glVertex3f(p2[0],p2[1],p2[2]);
        glVertex3f(p4[0],p4[1],p4[2]);
        glVertex3f(p3[0],p3[1],p3[2]);
      glEnd();</P><P>     Normal(p1,p2,p5,m);
     glBegin(GL_POLYGON);
        glNormal3f(m[0],m[1],m[2]);
        glVertex3f(p1[0],p1[1],p1[2]);
        glVertex3f(p2[0],p2[1],p2[2]);
        glVertex3f(p6[0],p6[1],p6[2]);
        glVertex3f(p5[0],p5[1],p5[2]);
      glEnd();</P><P>     Normal(p1,p3,p5,m);
     glBegin(GL_POLYGON);
        glNormal3f(m[0],m[1],m[2]);
        glVertex3f(p1[0],p1[1],p1[2]);
        glVertex3f(p3[0],p3[1],p3[2]);
        glVertex3f(p5[0],p5[1],p5[2]);
      glEnd();</P><P>     Normal(p4,p2,p6,m);
     glBegin(GL_POLYGON);
        glNormal3f(m[0],m[1],m[2]);
        glVertex3f(p2[0],p2[1],p2[2]);
        glVertex3f(p6[0],p6[1],p6[2]);
        glVertex3f(p4[0],p4[1],p4[2]);
      glEnd();</P><P>       };
//---------------------------------------------------------------------
           glColor3f(0.5,0.5,0.5);
           glTranslatef(0,0,7.0);
           gluCylinder(quadObj,17,16,0,36,2);
           glTranslatef(0,0,3.0);
           glColor3f(0.3,0.3,0.3);
           gluQuadricDrawStyle(quadObj,GLU_FILL);
           gluSphere(quadObj,2.8,72,72);
        glPopMatrix();</P><P>   glEndList();
}</P><P> void __fastcall TFormMain:: Prepare_FireRoom()
{
     GLUquadricObj *quadObj;int n;
     glNewList(list_of_objects+2,GL_COMPILE);
     glPushMatrix();
         glColor3f(0.3,0.3,0.3);
         glTranslatef(-7.25,0,0);
         glRotatef( 90.0,0.0,1.0,  0.0 );
         quadObj=gluNewQuadric();
         gluQuadricNormals(quadObj,GLU_SMOOTH);
         gluCylinder(quadObj,2.8,2.8,34,36,2);
         glTranslatef(0,0,5);
         glColor3f(0.4,0.4,0.6);
         gluCylinder(quadObj,2.8,3.5,0,36,2);
          gluCylinder(quadObj,3.5,3.5,20,36,2);
          glTranslatef(0,0,20);
          gluCylinder(quadObj,2.8,3.5,0,36,2);
      glPopMatrix();
//---------------------------------------</P><P>       glPushMatrix();
       glColor3f(0.3,0.3,0.3);
        glRotatef( 90.0,0.0,1.0,  0.0 );
        gluCylinder(quadObj,8,8,20,36,2);
        glTranslatef(0,0,-4);
        gluCylinder(quadObj,10,8,4,36,2);
        gluCylinder(quadObj,10,14,0,36,2);
        gluCylinder(quadObj,14,16,4,36,2);
        glColor3f(1,1,1);
        
        for (n=0;n&lt;12;n++)
        {
           glTranslatef(11*sin(3.141592653*n/6),11*cos(3.141592653*n/6),0.01);
           gluCylinder(quadObj,1,1.5,5,36,2);
           glTranslatef(-11*sin(3.141592653*n/6),-11*cos(3.141592653*n/6),-0.01);
        }
        glColor3f(0.3,0.3,0.3);
         glTranslatef(0,0,4);
        gluCylinder(quadObj,16,16,20,36,2);
         glTranslatef(0,0,20);
          gluCylinder(quadObj,8,10,4,36,2);
          gluCylinder(quadObj,16,14,4,36,2);
       glPopMatrix();
       glEndList();
}
void __fastcall TFormMain:: Prepare_Wolun2()</P><P>{
     GLUquadricObj *quadObj;
     glNewList(list_of_objects+3,GL_COMPILE);
     int n1;
     for(n1=0;n1&lt;36;n1++)
     {
        GLfloat p1[]={0,0,0};
        GLfloat p2[]={-0.7,17*cos(3.141592653*(n1+1)/18),17*sin(3.141592653*(n1+1)/18)} ;
        GLfloat p3[]={0.7,17*cos(3.141592653*n1/18),17*sin(3.141592653*n1/18)};</P><P>        GLfloat m[3];
        Normal(p1,p2,p3,m);
      glBegin(GL_POLYGON);
        glColor3f(0.8,0.8,0.8);
        glNormal3f(m[0],m[1],m[2]);
        glVertex3f(p1[0],p1[1],p1[2]);
        glVertex3f(p2[0],p2[1],p2[2]);
        glVertex3f(p3[0],p3[1],p3[2]);
      glEnd();
       };
     glPushMatrix();
         glColor3f(0.3,0.3,0.3);
         glTranslatef(-0.35,0,0);
         glRotatef( -90.0,0.0,1.0,  0.0 );
         quadObj=gluNewQuadric();
         gluQuadricNormals(quadObj,GLU_SMOOTH);
         gluCylinder(quadObj,8.5,2.8,1,36,2);
     glPopMatrix();</P><P>     glPushMatrix();
          glColor3f(0.3,0.3,0.3);
          glTranslatef(1.35,0,0);
          glRotatef(-90.0,0.0,1.0,  0.0 );
          quadObj=gluNewQuadric();
          gluQuadricNormals(quadObj,GLU_SMOOTH);
          gluCylinder(quadObj,2.8,8.5,1,36,2);
     glPopMatrix();</P><P>     glPushMatrix();
         glColor3f(0.3,0.3,0.3);
         glTranslatef(3.5,0,0);
         glRotatef(-90.0,0.0,1.0,  0.0 );
         quadObj=gluNewQuadric();
         gluQuadricNormals(quadObj,GLU_SMOOTH);
         gluCylinder(quadObj,2.8,2.8,10,36,2);
    glPopMatrix();</P><P>      glPushMatrix();
          glRotatef(-90.0,0.0,1.0,0.0 );
           glTranslatef(0,0,2.5);
                      quadObj=gluNewQuadric();
         gluQuadricNormals(quadObj,GLU_SMOOTH);
             gluCylinder(quadObj,4,0,0,36,2);
             glTranslatef(0,0,-1);
          gluCylinder(quadObj,4,4,1,36,2);</P><P>          gluCylinder(quadObj,4,5.5,0,36,2);
          glTranslatef(0,0,-1);
           gluCylinder(quadObj,5.5,5.5,1,36,2);
           gluCylinder(quadObj,5.5,7,0,36,2);</P><P>          glTranslatef(0,0,-1);
          gluCylinder(quadObj,7,7,1,36,2);
       glPopMatrix();</P><P>     glEndList();
}</P><P> void __fastcall TFormMain:: Prepare_WeiPen()
{
     GLUquadricObj *quadObj;
     glColor3f(0.3,0.3,0.3);
     glNewList(list_of_objects+4,GL_COMPILE);
     glPushMatrix();
          glRotatef(90.0,0.0,1.0,0.0 );
          glTranslatef(0,0,30);
          quadObj=gluNewQuadric();
          gluQuadricNormals(quadObj,GLU_SMOOTH);
          gluCylinder(quadObj,2.8,2.8,5,36,2);
          glTranslatef(0,0,5);
          gluCylinder(quadObj,2.8,10,0,36,2);
          gluCylinder(quadObj,10,0,17,36,2);
     glPopMatrix();
     glEndList();
}
void __fastcall TFormMain:: Prepare_Waike1()
{</P><P>     GLUquadricObj *quadObj;
     glNewList(waike,GL_COMPILE);
     glPushMatrix();
             glRotatef(90.0,0.0,1.0,0.0 );
             glTranslatef(0,0,-35);
             quadObj=gluNewQuadric();
             gluQuadricNormals(quadObj,GLU_SMOOTH);
              glColor3f(0.4,0.4,0.4);
             gluCylinder(quadObj,16,16,5,36,2);
             glTranslatef(0,0,5);
              gluCylinder(quadObj,16,16.5,1,36,2);
              gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>              glTranslatef(0,0,4);
              glColor3f(0.2,0.2,0.7);
              gluCylinder(quadObj,16.5,16,0.5,36,2);
              gluCylinder(quadObj,16,16,0.5,36,2);
              glTranslatef(0,0,0.5);
               gluCylinder(quadObj,16,16.5,0.5,36,2);</P><P>               glColor3f(0.4,0.4,0.4);
               gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>              glTranslatef(0,0,4);
               glColor3f(0.2,0.2,0.7);
              gluCylinder(quadObj,16.5,16,0.5,36,2);</P><P>              glTranslatef(0,0,0.5);
               gluCylinder(quadObj,16,16.5,0.5,36,2);</P><P>               glColor3f(0.4,0.4,0.4);
               gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>                glTranslatef(0,0,4);
                glColor3f(0.2,0.2,0.7);
              gluCylinder(quadObj,16.5,16,0.5,36,2);
               glTranslatef(0,0,0.5);
               gluCylinder(quadObj,16,16.5,0.5,36,2);</P><P>               glColor3f(0.4,0.4,0.4);
               gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>               glTranslatef(0,0,4);
                glColor3f(0.2,0.2,0.7);
              gluCylinder(quadObj,16.5,16,0.5,36,2);
                glTranslatef(0,0,0.5);
               gluCylinder(quadObj,16,16.5,0.5,36,2);</P><P>               glColor3f(0.4,0.4,0.4);
               gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>               glTranslatef(0,0,4);
              gluCylinder(quadObj,16.5,15,1,36,2);</P><P>
     glPopMatrix();
     glEndList();
}
  void __fastcall TFormMain:: Prepare_Waike2()
  {
     GLUquadricObj *quadObj;
     glNewList(waike+1,GL_COMPILE);
     glPushMatrix();
      quadObj=gluNewQuadric();
             gluQuadricNormals(quadObj,GLU_SMOOTH);
             glColor3f(0.3,0.3,0.7);
             glRotatef(90.0,0.0,1.0,0.0 );
             glTranslatef(0,0,-7);
                     gluCylinder(quadObj,15,15,4,36,2);
                     glTranslatef(0,0,4);
                     gluCylinder(quadObj,15,16.5,2,36,2);
                     glTranslatef(0,0,2);
                     gluCylinder(quadObj,16.5,17,2,36,2);
                      glTranslatef(0,0,2);
                     gluCylinder(quadObj,17,17,20,36,2);
                      glTranslatef(0,0,20);
                     gluCylinder(quadObj,17,16.5,2,36,2);
                                       glTranslatef(0,0,2);
                     gluCylinder(quadObj,16.5,15,2,36,2);
                     gluCylinder(quadObj,15,15,3,36,2);
             glPopMatrix();
     glEndList();
  }</P><P>  </P>

starrysky 发表于 2005-10-20 09:34

void __fastcall TFormMain:: Prepare_Waike3()
  {<P>     GLUquadricObj *quadObj;
     glNewList(waike+2,GL_COMPILE);
     glPushMatrix();
      quadObj=gluNewQuadric();
             gluQuadricNormals(quadObj,GLU_SMOOTH);
              glColor3f(0.7,0.7,0.7);
             glRotatef(90.0,0.0,1.0,0.0 );
             glTranslatef(0,0,26);
                    gluCylinder(quadObj,15,18,0,36,2);
                    gluCylinder(quadObj,18,18,0.5,36,2);
                     glTranslatef(0,0,0.5);
                     gluCylinder(quadObj,18,17.3,1,36,2);
                       glTranslatef(0,0,1);
                     gluCylinder(quadObj,17.3,17.8,3,36,2);
                     glTranslatef(0,0,3);
                     gluCylinder(quadObj,17.8,17.8,4.5,36,2);
                     glTranslatef(0,0,4.5);
                     gluCylinder(quadObj,12,19,0,36,2);
                      glColor3f(0.9,0.9,0.9);
                     gluCylinder(quadObj,19,19,1,36,2);
                     gluCylinder(quadObj,12,12,1,36,2);
                     glTranslatef(0,0,1);
                     gluCylinder(quadObj,12,19,0,36,2);
                     gluCylinder(quadObj,18.5,15.5,15,36,2);
                     gluCylinder(quadObj,17.5,14.5,15,36,2);
                     glColor3f(0.1,0.1,0.1);
                     glTranslatef(0,0,15);
                     gluCylinder(quadObj,14.5,15.5,0,36,2);
                      gluCylinder(quadObj,15.5,11,12,36,2);
                      gluCylinder(quadObj,14.5,10,12,36,2);
                      glTranslatef(0,0,12);
                       gluCylinder(quadObj,11,10,0,36,2);
                       glColor3f(0.3,0.3,0.3);
             glPopMatrix();
     glEndList();
  }
void __fastcall TFormMain:: Prepare_Waike11()
{</P><P>     GLUquadricObj *quadObj;
     glNewList(waike+3,GL_COMPILE);
     glPushMatrix();
             glRotatef(90.0,0.0,1.0,0.0 );
             glTranslatef(0,0,-35);
             quadObj=gluNewQuadric();
             gluQuadricNormals(quadObj,GLU_SMOOTH);
              glColor3f(0.6,0.6,0.6);
             gluCylinder(quadObj,16,16,5,36,2);
             glTranslatef(0,0,5);
              gluCylinder(quadObj,16,16.5,1,36,2);
              gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>              glTranslatef(0,0,4);
              glColor3f(0.8,0.8,0.3);
              gluCylinder(quadObj,16.5,16,0.5,36,2);
              gluCylinder(quadObj,16,16,0.5,36,2);
              glTranslatef(0,0,0.5);
               gluCylinder(quadObj,16,16.5,0.5,36,2);</P><P>               glColor3f(0.6,0.6,0.6);
               gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>              glTranslatef(0,0,4);
               glColor3f(0.8,0.8,0.3);
              gluCylinder(quadObj,16.5,16,0.5,36,2);</P><P>              glTranslatef(0,0,0.5);
               gluCylinder(quadObj,16,16.5,0.5,36,2);</P><P>               glColor3f(0.6,0.6,0.6);
               gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>                glTranslatef(0,0,4);
                glColor3f(0.8,0.8,0.3);
              gluCylinder(quadObj,16.5,16,0.5,36,2);
               glTranslatef(0,0,0.5);
               gluCylinder(quadObj,16,16.5,0.5,36,2);</P><P>               glColor3f(0.6,0.6,0.6);
               gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>               glTranslatef(0,0,4);
                glColor3f(0.8,0.8,0.3);
              gluCylinder(quadObj,16.5,16,0.5,36,2);
                glTranslatef(0,0,0.5);
               gluCylinder(quadObj,16,16.5,0.5,36,2);</P><P>               glColor3f(0.6,0.6,0.6);
               gluCylinder(quadObj,16.5,16.5,4,36,2);</P><P>               glTranslatef(0,0,4);
              gluCylinder(quadObj,16.5,15,1,36,2);</P><P>
     glPopMatrix();
     glEndList();
}
  void __fastcall TFormMain:: Prepare_Waike21()
  {
     GLUquadricObj *quadObj;
     glNewList(waike+4,GL_COMPILE);
     glPushMatrix();
      quadObj=gluNewQuadric();
             gluQuadricNormals(quadObj,GLU_SMOOTH);
             glColor3f(0.7,0.7,0.3);
             glRotatef(90.0,0.0,1.0,0.0 );
             glTranslatef(0,0,-7);
                     gluCylinder(quadObj,15,15,4,36,2);
                     glTranslatef(0,0,4);
                     gluCylinder(quadObj,15,16.5,2,36,2);
                     glTranslatef(0,0,2);
                     gluCylinder(quadObj,16.5,17,2,36,2);
                      glTranslatef(0,0,2);
                     gluCylinder(quadObj,17,17,20,36,2);
                      glTranslatef(0,0,20);
                     gluCylinder(quadObj,17,16.5,2,36,2);
                                       glTranslatef(0,0,2);
                     gluCylinder(quadObj,16.5,15,2,36,2);
                     gluCylinder(quadObj,15,15,3,36,2);
             glPopMatrix();
     glEndList();
  }</P><P>   void __fastcall TFormMain:: Prepare_Waike31()
  {</P><P>     GLUquadricObj *quadObj;
     glNewList(waike+5,GL_COMPILE);
     glPushMatrix();
      quadObj=gluNewQuadric();
             gluQuadricNormals(quadObj,GLU_SMOOTH);
              glColor3f(0.3,0.7,0.3);
             glRotatef(90.0,0.0,1.0,0.0 );
             glTranslatef(0,0,26);
                    gluCylinder(quadObj,15,18,0,36,2);
                    gluCylinder(quadObj,18,18,0.5,36,2);
                     glTranslatef(0,0,0.5);
                     gluCylinder(quadObj,18,17.3,1,36,2);
                       glTranslatef(0,0,1);
                     gluCylinder(quadObj,17.3,17.8,3,36,2);
                     glTranslatef(0,0,3);
                     gluCylinder(quadObj,17.8,17.8,4.5,36,2);
                     glTranslatef(0,0,4.5);
                     gluCylinder(quadObj,12,19,0,36,2);
                      glColor3f(0.1,0.9,0.1);
                     gluCylinder(quadObj,19,19,1,36,2);
                     gluCylinder(quadObj,12,12,1,36,2);
                     glTranslatef(0,0,1);
                     gluCylinder(quadObj,12,19,0,36,2);
                     gluCylinder(quadObj,18.5,15.5,15,36,2);
                     gluCylinder(quadObj,17.5,14.5,15,36,2);
                     glColor3f(0.1,0.7,0.1);
                     glTranslatef(0,0,15);
                     gluCylinder(quadObj,14.5,15.5,0,36,2);
                      gluCylinder(quadObj,15.5,11,12,36,2);
                      gluCylinder(quadObj,14.5,10,12,36,2);
                      glTranslatef(0,0,12);
                       gluCylinder(quadObj,11,10,0,36,2);
             glPopMatrix();
     glEndList();
  }</P>

starrysky 发表于 2005-10-20 09:36

<P>//------------------------------------------------------------------------------
void __fastcall TFormMain::Draw_Out_All() //控制画图的函数,相当于装配工,按要求画出需要的图形,参数由按钮控制
{
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );</P><P>
    if(K==0){                                   //音乐开关</P><P>   }
                                                        //粒子开关
    if(J==0){
        if(N==0.5&amp;&amp;I!=10) {
        if(M==0)
        {
             Draw_Out_Smoke2();
             Draw_Out_Smoke1();
             Draw_Out_Smoke3();
              }
         else if((M==1&amp;&amp;I==5)||(M==1&amp;&amp;I==6))
         {
               glPushMatrix();
              glTranslatef(26,0,0);
              Draw_Out_Smoke2();
             Draw_Out_Smoke1();
             Draw_Out_Smoke3();
             glPopMatrix();
          }
          else if((M==1&amp;&amp;I==8)||(M==1&amp;&amp;I==7)||(M==1&amp;&amp;I==9))
         {
               glPushMatrix();
              glTranslatef(-5,0,0);
              Draw_Out_Smoke2();
             Draw_Out_Smoke1();
             Draw_Out_Smoke3();
             glPopMatrix();
          }
            else if((M==1&amp;&amp;I==11)||(M==1&amp;&amp;I==12))
         {
               glPushMatrix();
              glTranslatef(-30,0,0);
              Draw_Out_Smoke2();
             Draw_Out_Smoke1();
             Draw_Out_Smoke3();
             glPopMatrix();
          }
           else if((M==1&amp;&amp;I==0)||(M==1&amp;&amp;I==1))
         {</P><P>              Draw_Out_Smoke2();
             Draw_Out_Smoke1();
             Draw_Out_Smoke3();</P><P>          }
     }
}</P><P>    if(I==0)
    {    Draw_Out_Top();
         Draw_Out_Wolun1();
         Draw_Out_FireRoom();
         Draw_Out_Wolun2();
         Draw_Out_WeiPen();
         Draw_Out_Waike1();
         Draw_Out_Waike2();
         Draw_Out_Waike3();</P><P>         
    }</P><P>    if(I==1)
    {
         Draw_Out_Wolun1();
          GLdouble equ[4]={0,0,-1,0} ;
          glClipPlane(GL_CLIP_PLANE0,equ);
          glEnable(GL_CLIP_PLANE0);
              Draw_Out_FireRoom();
          glDisable(GL_CLIP_PLANE0);
          GLdouble equ1[4]={0,-1,0,0} ;
          glClipPlane(GL_CLIP_PLANE1,equ1);
          glEnable(GL_CLIP_PLANE1);
              Draw_Out_FireRoom();
          glDisable(GL_CLIP_PLANE1);
         Draw_Out_Wolun2();
         Draw_Out_WeiPen();
         Draw_Out_Top();
    }</P><P>    if(I==5){                                //第一
       if (M==0)
       {
              
              Draw_Out_Top();
              Draw_Out_Wolun1();
              Draw_Out_FireRoom();
              Draw_Out_Wolun2();
              Draw_Out_WeiPen();
              Draw_Out_Waike2();
              Draw_Out_Waike3();
     //*************************************************change color
              if(L==1)
              Draw_Out_Waike11();
              else if(L==0)
              Draw_Out_Waike1();
         }
         else if(M==1)
         {
              glPushMatrix();
              glTranslatef(26,0,0);
              Draw_Out_Wolun1();
              Draw_Out_Top();
              Draw_Out_Waike1();glPopMatrix();
              }
     }</P><P>
    if(I==6){
      if (M==0)
       {
              Draw_Out_Wolun1();
              Draw_Out_FireRoom();
              Draw_Out_Wolun2();
              Draw_Out_WeiPen();
              Draw_Out_Waike2();
              Draw_Out_Waike3();
              Draw_Out_Top();</P><P>         }
         else if(M==1)
         {
              glPushMatrix();
              glTranslatef(26,0,0);
              Draw_Out_Wolun1();
              Draw_Out_Top();
              glPopMatrix();
         }
     }</P><P>    if(I==7){                                               //燃烧室
      if (M==0)
       {
              Draw_Out_Top();
              Draw_Out_Waike1();
              Draw_Out_Wolun1();
              Draw_Out_FireRoom();
              Draw_Out_WeiPen();
              Draw_Out_Wolun2();
              Draw_Out_Waike3();
               if(O==1)
              Draw_Out_Waike21();
               else if(O==0)
                Draw_Out_Waike2();
         }
         else if(M==1)
         {    glPushMatrix();
              glTranslatef(-5,0,0);
              Draw_Out_FireRoom();
              Draw_Out_Waike2();
              glPopMatrix();
         }
     }
    if(I==8){
        if (M==0)
        {
              Draw_Out_Top();
              Draw_Out_Waike1();
              Draw_Out_Wolun1();
              Draw_Out_WeiPen();
              Draw_Out_Wolun2();
              Draw_Out_Waike3();
     //*************************************************change color
          GLdouble equ[4]={0,0,-1,0} ;
          glClipPlane(GL_CLIP_PLANE0,equ);
          glEnable(GL_CLIP_PLANE0);
              Draw_Out_FireRoom();
          glDisable(GL_CLIP_PLANE0);
          GLdouble equ1[4]={0,-1,0,0} ;
          glClipPlane(GL_CLIP_PLANE1,equ1);
          glEnable(GL_CLIP_PLANE1);
              Draw_Out_FireRoom();
          glDisable(GL_CLIP_PLANE1);
   //*************************************************************************************//*****
         }
         else if(M==1)
         {
              glPushMatrix();
              glTranslatef(-5,0,0);
               GLdouble equ[4]={0,0,-1,0} ;
          glClipPlane(GL_CLIP_PLANE0,equ);
          glEnable(GL_CLIP_PLANE0);
              Draw_Out_FireRoom();
          glDisable(GL_CLIP_PLANE0);
          GLdouble equ1[4]={0,-1,0,0} ;
          glClipPlane(GL_CLIP_PLANE1,equ1);
          glEnable(GL_CLIP_PLANE1);
              Draw_Out_FireRoom();
          glDisable(GL_CLIP_PLANE1);
              glPopMatrix();
         }
     }
    if(I==9){                                     //切割
        if (M==0)
        {
          Draw_Out_Top();
          Draw_Out_Waike1();
          Draw_Out_Wolun1();
          Draw_Out_WeiPen();
          Draw_Out_Wolun2();
          Draw_Out_Waike3();
          GLdouble equ[4]={0,0,-1,0} ;
          glClipPlane(GL_CLIP_PLANE0,equ);
          glEnable(GL_CLIP_PLANE0);
          Draw_Out_FireRoom();
          Draw_Out_Waike2();
          glDisable(GL_CLIP_PLANE0);
       }
       else if(M==1)
       {  glPushMatrix();
              glTranslatef(-5,0,0);
          GLdouble equ[4]={0,0,-1,0} ;
          glClipPlane(GL_CLIP_PLANE0,equ);
          glEnable(GL_CLIP_PLANE0);
          Draw_Out_FireRoom();
          Draw_Out_Waike2();
          glDisable(GL_CLIP_PLANE0);
          glPopMatrix();
        }
    }
    if(I==10){
          glPushMatrix();
              glTranslatef(-5,0,0);                                 //特写
          GLdouble equ[4]={0,0,-1,0} ;
          glClipPlane(GL_CLIP_PLANE0,equ);
          glEnable(GL_CLIP_PLANE0);
          Draw_Out_FireRoom();
          Draw_Out_Waike2();
          glDisable(GL_CLIP_PLANE0);
          Draw_Out_Smoke3();
          glPopMatrix();</P><P>    }</P><P>     if(I==11){                                        //第二 轴流压缩室
      if (M==0)
       {
              Draw_Out_Top();
              Draw_Out_Wolun1();
              Draw_Out_FireRoom();
              Draw_Out_Wolun2();
               Draw_Out_WeiPen();
               Draw_Out_Waike1();
               Draw_Out_Waike2();
     //*************************************************change color
                if(P==1)
              Draw_Out_Waike31();
               else if(P==0)
                Draw_Out_Waike3();
               
         }
         else if(M==1)
         {     glPushMatrix();
              glTranslatef(-30,0,0);
              Draw_Out_WeiPen();
              Draw_Out_Waike3();
              Draw_Out_Wolun2();
              glPopMatrix();
         }
     }</P><P>      if(I==12){
      if (M==0)
       {
              Draw_Out_Top();
              Draw_Out_Waike1();
              Draw_Out_Wolun1();
              Draw_Out_FireRoom();
              Draw_Out_Waike2();
  //*************************************************change color
               Draw_Out_Wolun2();
               Draw_Out_WeiPen();
         }
         else if(M==1)
         {    glPushMatrix();
              glTranslatef(-30,0,0);
              Draw_Out_Wolun2();
              Draw_Out_WeiPen();
              glPopMatrix();</P><P>              }</P><P>       }</P><P>       if(I==13)
       {
          Close();
       }
      glFlush();
      SwapBuffers(hdc);
    }</P><P>void __fastcall TFormMain::Draw_Out_Wolun1()
{</P><P>
       glPushMatrix();
           n+=N;
          polarView();
         glTranslatef(-28,0,0);
            glCallList(list_of_objects);
         glTranslatef(4,0,0);
            glCallList(list_of_objects);
         glTranslatef(3.5,0,0);
            glCallList(list_of_objects);
         glTranslatef(3,0,0);
            glCallList(list_of_objects);
         glTranslatef(2.5,0,0);
            glCallList(list_of_objects);
         glTranslatef(2,0,0);
            glCallList(list_of_objects);
         glTranslatef(1.75,0,0);
            glCallList(list_of_objects);
         glTranslatef(1.5,0,0);
            glCallList(list_of_objects);
       glPopMatrix();
}
void __fastcall TFormMain::Draw_Out_Top()
{</P><P>      glPushMatrix();
          glTranslatef(-36,0,0);
          glCallList(list_of_objects+1);
      glPopMatrix();</P><P>
}</P>

starrysky 发表于 2005-10-20 09:36

<P>void __fastcall TFormMain::Draw_Out_FireRoom()
{</P>
<P>      glPushMatrix();
        glTranslatef(0,0,0);
        glCallList(list_of_objects+2);
      glPopMatrix();</P>
<P>
}</P>
<P>   void __fastcall TFormMain::Draw_Out_Wolun2()
{</P>
<P>    glPushMatrix();
          n+=N;
         polarView();
        glTranslatef(30,0,0);
          glCallList(list_of_objects+3);
        glTranslatef(4,0,0);
        glCallList(list_of_objects+3);
    glPopMatrix();</P>
<P>
}</P>
<P>      void __fastcall TFormMain::Draw_Out_WeiPen()
{</P>
<P>     glPushMatrix();
          glTranslatef(5,0,0);
          glCallList(list_of_objects+4);
      glPopMatrix();</P>
<P>   }
       void __fastcall TFormMain::Draw_Out_Waike1()
{</P>
<P>     glPushMatrix();
          glCallList(waike);
      glPopMatrix();</P>
<P>   }</P>
<P>
void __fastcall TFormMain::Draw_Out_Waike2()
{</P>
<P>     glPushMatrix();
           glCallList(waike+1);
      glPopMatrix();</P>
<P>   }</P>
<P>  void __fastcall TFormMain::Draw_Out_Waike3()
{</P>
<P>     glPushMatrix();
          glTranslatef(0,0,0);
          glCallList(waike+2);
      glPopMatrix();</P>
<P>   }
       void __fastcall TFormMain::Draw_Out_Waike11()
{</P>
<P>     glPushMatrix();
          glCallList(waike+3);
      glPopMatrix();</P>
<P>   }</P>
<P>
void __fastcall TFormMain::Draw_Out_Waike21()
{</P>
<P>     glPushMatrix();
           glCallList(waike+4);
      glPopMatrix();</P>
<P>   }</P>
<P>  void __fastcall TFormMain::Draw_Out_Waike31()
{</P>
<P>     glPushMatrix();
          glTranslatef(0,0,0);
          glCallList(waike+5);
      glPopMatrix();</P>
<P>   }</P>
<P>
void __fastcall TFormMain::Button1Click(TObject *Sender)            
{
      key_and_mouse_down=TRUE;
    glRotatef(-5, 1.0, 0.0, 0.0);
}</P>
<P>void __fastcall TFormMain::Button5Click(TObject *Sender)      //第一轴流压缩室
{
    I=5;
    if(L==0)
    L=1;
    else
    L=0;</P>
<P>}
//---------------------------------------------------------------------------</P>
<P>void __fastcall TFormMain::Button6Click(TObject *Sender)
{
   I=6;
}
//---------------------------------------------------------------------------</P>
<P>void __fastcall TFormMain::Button7Click(TObject *Sender)         // 燃烧室
{
    I=7;
     if(O==0)
    O=1;
    else
    O=0;
}
//---------------------------------------------------------------------------</P>
<P>void __fastcall TFormMain::Button8Click(TObject *Sender)
{
     I=8;
}
//---------------------------------------------------------------------------</P>
<P>void __fastcall TFormMain::Button9Click(TObject *Sender)
{
    I=9;
}
//---------------------------------------------------------------------------</P>
<P>void __fastcall TFormMain::Button10Click(TObject *Sender)
{
    I=10;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Button11Click(TObject *Sender)
{
  I=11;
  if(P==0)
  P=1;
  else
   P=0;
}
//---------------------------------------------------------------------------</P>
<P>void __fastcall TFormMain::Button12Click(TObject *Sender)
{
   I=12;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Button13Click(TObject *Sender)
{
    I=13;
}
//---------------------------------------------------------------------------
        void __fastcall TFormMain::Button14Click(TObject *Sender)
{
     I=0;
}
//---------------------------------------------------------------------------</P>
<P>void __fastcall TFormMain::Button15Click(TObject *Sender)
{
   I=1;
}
//---------------------------------------------------------------------------</P>
<P>void __fastcall TFormMain::Timer1Timer(TObject *Sender)
{</P>
<P>
          Timer1-&gt;Interval=10;</P>
<P>          Draw_Out_Wolun1();
          Draw_Out_Wolun2();
          Yield();
            Timer1-&gt;Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::polarView()
{
    glRotatef(n,1.0,0.0,0.0 );
}</P>
[align=right][color=#000066][此贴子已经被作者于2005-10-20 10:22:25编辑过][/color][/align]

starrysky 发表于 2005-10-20 09:37

<P>//-----------粒子系统-------------------------------------------------
void __fastcall TFormMain::Prepare_Smoke1()      ///********************************************
{</P><P>
for (loop=0;loop&lt;Max;loop++)
{</P><P>  particle[loop].active=true;
  particle[loop].life=1.0f;
  particle[loop].fade=0.075f;
  particle[loop].z= 3;
  V = (GLfloat((rand()%5))+2)/5;
  Angle = GLfloat(rand()%360);
      particle[loop].zg = .15;
  particle[loop].xi = sin(3.141592653*Angle/180) * V;
  particle[loop].yi = cos(3.141592653*Angle/180) * V;
  particle[loop].zi = ((rand()%10)-5)/5;
}</P><P>}
void __fastcall TFormMain::Draw_Out_Smoke1()
{
       glPushMatrix();
          glColor4f(1,1,1,0.5);
        glRotatef(90,0.0,1.0,0.0 )  ;
         glTranslatef(0,0,60);
     //****************************************
     glEnable(GL_ALPHA_TEST);
   glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE);
          GLfloat exhaust_r, exhaust_g, exhaust_b;
           exhaust_r = 1;
   exhaust_g = 0.6;
   exhaust_b = 0;</P><P>     //*******************************************
      for (loop=0;loop&lt;Max;loop++)
{
         GLfloat x=particle[loop].x;
  GLfloat y=particle[loop].y;
  GLfloat z=particle[loop].z;</P><P>  glColor4f(particle[loop].r,particle[loop].g,particle[loop].b,particle[loop].life/2);
  glBegin(GL_TRIANGLE_STRIP);
                         glVertex3f(x,y,z+0.5f);
           glVertex3f(x-0.5f,y-0.35f,z-0.35);
           glVertex3f(x+0.5f,y-0.9f,z-0.35);
           glVertex3f(x,y+0.5,z-0.35);
                         glVertex3f(x,y,z+0.5f);
           glVertex3f(x-0.5f,y-0.35f,z-0.35);
      glEnd();</P><P>          particle[loop].x+=particle[loop].xi/80;
         particle[loop].y+=particle[loop].yi/80;
  particle[loop].z+=particle[loop].zi/70;
      particle[loop].xi*=1;
  particle[loop].yi*=1;
  particle[loop].zi*=1;
         particle[loop].zi+=particle[loop].zg;
  particle[loop].life-=particle[loop].fade;
           if(particle[loop].y*particle[loop].y+particle[loop].x*particle[loop].x&gt;81)
         {
          particle[loop].r=exhaust_r;
       particle[loop].g=exhaust_g;
       particle[loop].b=exhaust_b;</P><P>       particle[loop].life=1.0f;
       particle[loop].fade=GLfloat(rand()%100)/7500+0.0075f;</P><P>   particle[loop].z= 3.f;
   V = (GLfloat((rand()%5))+2)/5;
   Angle = GLfloat(rand()%360);</P><P>   particle[loop].xi = sin(3.141592653*Angle/180) * V;
   particle[loop].yi = cos(3.141592653*Angle/180) * V;
   particle[loop].zi = ((rand()%10)-5)/5+ Throttle*8;
  }</P><P>  if (particle[loop].life&lt;0.05f)
   {
          particle[loop].r=exhaust_r;
       particle[loop].g=exhaust_g;
       particle[loop].b=exhaust_b;</P><P>   particle[loop].life=1.0f;
   particle[loop].fade=GLfloat(rand()%100)/7500+0.0075f;
   particle[loop].z= 3.f;
   V = (GLfloat((rand()%5))+2)/5;
   Angle = GLfloat(rand()%360);
   particle[loop].xi = sin(3.141592653*Angle/180) * V;
   particle[loop].yi = cos(3.141592653*Angle/180) * V;
   particle[loop].zi = ((rand()%10)-5)/5+ Throttle*8;
  }
}       glPopMatrix();
         glDisable(GL_BLEND);
         glColor4f(0.3,0.3,0.3,0);
}</P><P> void __fastcall TFormMain::Prepare_Smoke2()      ///********************************************
{</P><P>
for (loop=0;loop&lt;Max;loop++)
{</P><P>  particle1[loop].active=true;
  particle1[loop].life=1.0f;
  particle1[loop].fade=1;
  particle1[loop].z= 3;
  V = (GLfloat((rand()%5))+2)/5;
  Angle = GLfloat(rand()%360);
      particle1[loop].zg = .15;
  particle1[loop].xi = sin(3.141592653*Angle/180) * V;
  particle1[loop].yi = cos(3.141592653*Angle/180) * V;
  particle1[loop].zi = ((rand()%10)-5)/5;
}</P><P>}
void __fastcall TFormMain::Draw_Out_Smoke2()
{
       glPushMatrix();
          glColor4f(1,1,1,0.5);
        glRotatef(90,0.0,1.0,0.0 )  ;
         glTranslatef(0,0,-60);
     //****************************************
     glEnable(GL_ALPHA_TEST);
        glEnable(GL_BLEND);
      glBlendFunc(GL_SRC_ALPHA, GL_ONE);
          GLfloat exhaust_r, exhaust_g, exhaust_b;
           exhaust_r = 0.9;
   exhaust_g = 0.9;
   exhaust_b = 0.9;</P><P>     //*******************************************
      for (loop=0;loop&lt;Max;loop++)
{
         GLfloat x=particle1[loop].x;
  GLfloat y=particle1[loop].y;
  GLfloat z=particle1[loop].z;</P><P>  glColor4f(particle1[loop].r,particle1[loop].g,particle1[loop].b,1-particle1[loop].life);
  glBegin(GL_TRIANGLE_STRIP);
                         glVertex3f(x,y,z+0.3f);
           glVertex3f(x-0.3f,y-0.10f,z-0.10);
           glVertex3f(x+0.3f,y-0.3f,z-0.10);
           glVertex3f(x,y+0.3,z-0.10);
                         glVertex3f(x,y,z+0.3f);
           glVertex3f(x-0.3f,y-0.10f,z-0.10);
      glEnd();</P><P>          particle1[loop].x+=particle1[loop].xi/40;
         particle1[loop].y+=particle1[loop].yi/40;
  particle1[loop].z+=particle1[loop].zi/76;
      particle1[loop].xi*=1;
  particle1[loop].yi*=1;
  particle1[loop].zi*=1;
         particle1[loop].zi+=particle1[loop].zg;
  particle1[loop].life-=particle1[loop].fade;
           if(particle1[loop].y*particle1[loop].y+particle1[loop].x*particle1[loop].x&gt;210.25)
         {
          particle1[loop].r=exhaust_r;
       particle1[loop].g=exhaust_g;
       particle1[loop].b=exhaust_b;</P><P>       particle1[loop].life=1.0f;
       particle1[loop].fade=GLfloat(rand()%100)/7500+0.01f;</P><P>   particle1[loop].z= 3.f;
   V = (GLfloat((rand()%5))+2)/5;
   Angle = GLfloat(rand()%360);</P><P>   particle1[loop].xi = sin(3.141592653*Angle/180) * V;
   particle1[loop].yi = cos(3.141592653*Angle/180) * V;
   particle1[loop].zi = ((rand()%10)-5)/5+ Throttle*8;
  }</P><P>  if (particle1[loop].life&lt;0.05f)
   {
          particle1[loop].r=exhaust_r;
       particle1[loop].g=exhaust_g;
       particle1[loop].b=exhaust_b;</P><P>   particle1[loop].life=1.0f;
   particle1[loop].fade=GLfloat(rand()%100)/7500+0.0075f;
   particle1[loop].z= 3.f;
   V = (GLfloat((rand()%5))+2)/5;
   Angle = GLfloat(rand()%360);
   particle1[loop].xi = sin(3.141592653*Angle/180) * V;
   particle1[loop].yi = cos(3.141592653*Angle/180) * V;
   particle1[loop].zi = ((rand()%10)-5)/5+ Throttle*8;
  }
}       glPopMatrix();
         glDisable(GL_BLEND);
         glColor4f(0.3,0.3,0.3,0);
}</P><P> void __fastcall TFormMain::Prepare_Smoke3()
{
                int n1;
               for(n1=0;n1&lt;12;n1++){
        for (loop=n*Max2/12;loop&lt;(n+1)*Max2/12;loop++)
              {</P><P>
  particle2[loop].active=true;
  particle2[loop].life=1.0f;
  particle2[loop].fade=1;
                particle2[loop].x=sin(n1*3.141592653/6)*(10+(rand()%40)/10);
                particle2[loop].y=cos(n1*3.141592653/6)*(10+(rand()%40)/10);
  particle2[loop].z= 3;
  V = (GLfloat((rand()%5))+2)/5;
  Angle = GLfloat(rand()%360);
      particle2[loop].zg = .15;
  particle2[loop].xi = sin(3.141592653*Angle/180) * V;
  particle2[loop].yi = cos(3.141592653*Angle/180) * V;
  particle2[loop].zi = ((rand()%10)-5)/5;
                }
              }</P><P>}
void __fastcall TFormMain::Draw_Out_Smoke3()
{
       glPushMatrix();
          glColor4f(1,0,0,0.5);
        glRotatef(90,0.0,1.0,0.0 )  ;
         glTranslatef(0,0,-2);
     //****************************************
     glEnable(GL_ALPHA_TEST);
        glEnable(GL_BLEND);
      glBlendFunc(GL_SRC_ALPHA, GL_ONE);
          GLfloat exhaust_r, exhaust_g, exhaust_b;
           exhaust_r = 0.9;
   exhaust_g = 0.4;
   exhaust_b = 0;</P><P>     //*******************************************
      for (loop=0;loop&lt;Max2;loop++)
{
         GLfloat x=particle2[loop].x;
  GLfloat y=particle2[loop].y;
  GLfloat z=particle2[loop].z;</P><P>  glColor4f(particle2[loop].r,particle2[loop].g,particle2[loop].b,0.7);
  glBegin(GL_TRIANGLE_STRIP);
                         glVertex3f(x,y,z+0.5f);
           glVertex3f(x-0.5f,y-0.350f,z-0.35);
           glVertex3f(x+0.5f,y-0.5f,z-0.35);
           glVertex3f(x,y+0.5,z-0.35);
                         glVertex3f(x,y,z+0.5f);
           glVertex3f(x-0.5f,y-0.35f,z-0.35);
      glEnd();</P><P>          particle2[loop].x+=particle2[loop].xi/40;
         particle2[loop].y+=particle2[loop].yi/40;
  particle2[loop].z+=particle2[loop].zi/38;</P><P>         particle2[loop].zi+=particle2[loop].zg;
  particle2[loop].life-=particle2[loop].fade;</P><P>           if(particle2[loop].y*particle2[loop].y+particle2[loop].x*particle2[loop].x&gt;225||
                 particle2[loop].y*particle2[loop].y+particle2[loop].x*particle2[loop].x&lt;64)
         {</P><P>   int n1;
                 n1=  rand()%12;
  particle2[loop].life=1.0f;
  particle2[loop].fade=1;
                particle2[loop].x=sin(n1*3.141592653/6)*(10+(rand()%40)/10);
                particle2[loop].y=cos(n1*3.141592653/6)*(10+(rand()%40)/10);
  particle2[loop].z= 3;
  V = (GLfloat((rand()%5))+2)/5;
  Angle = GLfloat(rand()%360);
      particle2[loop].zg = .15;
  particle2[loop].xi = sin(3.141592653*Angle/180) * V;
  particle2[loop].yi = cos(3.141592653*Angle/180) * V;
  particle2[loop].zi = ((rand()%10)-5)/5;</P><P>  }
                if (particle2[loop].life&lt;0.38f)
                {
                particle2[loop].x*=0.97;
  particle2[loop].y*=0.97;</P><P>                }</P><P>  if (particle2[loop].life&lt;0.05f)
   {
          particle2[loop].r=exhaust_r;
       particle2[loop].g=exhaust_g;
       particle2[loop].b=exhaust_b;</P><P>   particle2[loop].life=1.0f;
   particle2[loop].fade=GLfloat(rand()%100)/7500+0.0075f;
   particle2[loop].z= 3.f;
   V = (GLfloat((rand()%5))+2)/5;
   Angle = GLfloat(rand()%360);
   particle2[loop].xi = sin(3.141592653*Angle/180) * V;
   particle2[loop].yi = cos(3.141592653*Angle/180) * V;
   particle2[loop].zi = ((rand()%10)-5)/5+ Throttle*3.2;  
                 }</P><P>
}       glPopMatrix();
         glDisable(GL_BLEND);
         glColor4f(0.3,0.3,0.3,0);
}</P>

starrysky 发表于 2005-10-20 09:55

<P>[em03]</P>
<P>上传有大小限制,附件内容有变化,删除了文档和音乐以及大部分的控置语句和全部的按钮,修正了全部的BUG.<br>保留了粒子效果,是个简化版(好像简的太多了),原来那个有90多M,压缩后6.5M,现在只有400多k了,压缩后200多K。<br>对电脑的要求降低了很多,编译的很快.但程序的功能减少了不少<br>欢迎大家讨论</P>
[align=right][color=#000066][此贴子已经被作者于2007-9-23 17:19:49编辑过][/color][/align]

starrysky 发表于 2005-10-20 10:05

发个截图给大家看看
[IMG]C:\Documents and Settings\starrysky\My Documents\My Pictures\1.jpg[/IMG]

starrysky 发表于 2005-10-20 10:11

[IMG]C:\Documents and Settings\starrysky\My Documents\My Pictures\3.jpg[/IMG]
[align=right][color=#000066][此贴子已经被作者于2005-10-20 10:14:52编辑过][/color][/align]

激情依旧 发表于 2005-10-20 13:37

     晕了。太强了。。。。。

starrysky 发表于 2005-10-20 13:49

谢谢版主的支持![em01]

激情依旧 发表于 2005-10-20 14:19

   看了楼主前面所言。我也深有感触。我们一组10个人。要求大家合作共同开发一个项目。我是组长。我们组的人没一个关心的。我也是一个人把全部代码写完。最郁闷的时候我没学过vb6.0。他们要我用vb6.0来做。后来只好去问老师。在老师的大力帮助下才弄好基本功能。不过我不管了。11月5号要考软设。现在都忙着复习。这个论坛我也比较少上了。不过看了你做的这个。真的感觉到编程人员的痛苦。

starrysky 发表于 2005-10-20 14:47

呵呵,我也是,OpenGL我是用了6个星期学会的,那段日子天天饿肚子,要么吃泡面,要么就不吃。辛辛苦苦做出来的东西自己是有感情的,虽然心里愤愤不平,但真正完成那天还是挺心慰的,毕竟花了那么大的功夫,这就是做程序的快乐吧。不为别的,为自己的程序而快乐,而骄傲!

zorro2zzz 发表于 2005-10-23 23:10

厉害啊,俺也要好好向你学习了。[em04]

firsttiger 发表于 2005-11-3 09:47

<P>[em04]</P>
<P>厉害呀。我也费了好大劲学习OpenGL,头开始我用的是C编的OpenGL,但不会VC编界面,所以就改用VB,呵呵,VB我比较熟悉一些,接着就开始绘图,总之,是一言难尽,<BR>现在的OpenGL基本上都是用BC,VC,Delphi,用VB的太少,<BR>至今还有一些问题还没搞清楚,呵呵,努力中。。。</P>

stnlcd 发表于 2005-11-5 22:50

想学direct,opengl书太少了。

fire77 发表于 2005-11-6 16:31

<P>支持SKY!!!!特棒~~</P>[em22]

txy45 发表于 2005-11-9 20:34

我下了,怎么都是一些三角形在乱飞啊 ?

hutuxian 发表于 2005-11-11 10:10

<P>在C++中怎么样建一个多文件头的文档啊????<BR></P>[em13][em13][em13]

页: [1] 2 3

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.