程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> OpenGL和Timer 控件實現變化的色彩動畫

OpenGL和Timer 控件實現變化的色彩動畫

編輯:Delphi

這是個基於OpenGL和Timer 控件的Delphi編程實例,在OpenGL.pas 文件中,定義了所有的OpenGL 函數。本例動畫的實現主要是利用OpenGL 的顏色配置來獲得OpenGL 的場景,具體請看下面的代碼:

vIEw source print? 01 unit Unit1; 02 interface 03 uses 04 Windows, Forms, OpenGL, Classes, ExtCtrls, Messages; 05 type 06 TMainForm = class(TForm) 07 Timer1: TTimer; 08 procedure FormCreate(Sender: TObject); 09 procedure FormDestroy(Sender: TObject); 10 procedure FormPaint(Sender: TObject); 11 procedure FormReSize(Sender: TObject); 12 procedure Timer1Timer(Sender: TObject); 13 private 14 RC: HGLRC; 15 Angle : Integer; 16 Procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ 17 ERASEBKGND; 18 end; 19 var 20 MainForm: TMainForm; 21 implementation 22 uses Dialogs; 23 {$R *.DFM} 24 procedure TMainForm.FormCreate(Sender: TObject); 25 begin //初始化設置OpenGL 場景 26 RC:=CreateRenderingConText(Canvas.Handle,[opDoubleBuffered],32,0); 27 end; 28 procedure TMainForm.FormDestroy(Sender: TObject); 29 begin //釋放OpenGL 場景 30 DestroyRenderingConText(RC); 31 end; 32 procedure TMainForm.FormPaint(Sender: TObject); 33 begin 34 ActivateRenderingConText(Canvas.Handle,RC); //制作場景需要的畫布 35 glClearColor(0,0.5,0.5,1); //背景 36 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //清除背景和占用的內存 37 glMatrixMode(GL_MODELVIEW); //設置轉換矩陣 38 glLoadIdentity; //轉換成初始狀態 39 gluLookAt(0,0,6,0,0,-10,0,1,0); //設置場景所在坐標 40 glRotatef(4*Angle,0,1,0); //繞軸(x:0;y:1;z:0)旋轉 41 glRotatef(30,1,0,0); //旋轉以獲得另一種場景 42 glScalef(1,sin(Angle*pi/90),1); //場景模仿 43 glEnable(GL_DEPTH_TEST); //著色 44 glBegin(GL_TRIANGLE_FAN); //繪制一個四面體 45 glColor3f(1,1,1); //上面頂點的顏色 46 glVertex3f(0,1,0); //上面頂點的場景 47 glColor3f(1,0,0); //左邊頂點的顏色 48 glVertex3f(-1,0,1); //左邊頂點的場景 49 glColor3f(0,1,0); //右邊頂點的顏色 50 glVertex3f(1,0,1); //右邊頂點的場景 51 glColor3f(0,0,1); //後部中間頂點的顏色 52 glVertex3f(0,0,-1); //後部中間頂點的場景 53 glColor3f(1,0,0); //變化左邊頂點的顏色 54 glVertex3f(-1,0,1); //變化左邊頂點的場景 55 glEnd; //停止變化 56 SwapBuffers(Canvas.Handle); //復制場景 57 DeactivateRenderingConText; //釋放場景 58 end; 59 procedure TMainForm.FormReSize(Sender: TObject); 60 begin //設置窗口隨窗口尺寸變化的位置 61 wglMakeCurrent(Canvas.handle,RC); //制作畫布場景 62 glVIEwport(0,0,Width,Height); //指定視點 63 glMatrixMode(GL_PROJECTION); //設置矩陣 64 glLoadIdentity; //設置初始狀態 65 gluPerspective(35,Width/Height,1,100); //設置透視參數 66 wglMakeCurrent(0,0); //釋放場景 67 Refresh; //更新畫布 68 end; 69 procedure TMainForm.Timer1Timer(Sender: TObject); 70 begin 71 Inc(Angle,1); 72 if Angle >= 360 then Angle:=0//當角度不小於360 度時,角度賦值為0 73 Repaint; 74 end; 75 procedure TMainForm.WMEraseBkgnd(var Message: TWMEraseBkgnd);//渲染背景 76 begin 77 Message.Result:=1; 78 end; 79 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved