| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> delphi >> 講解Delphi下的OpenGL開發入門
 

講解Delphi下的OpenGL開發入門

2008-05-19 00:44:11  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  OpenGL最初是由Silicon圖形公司開發的底層圖形庫規範。你的系統中准確實現這個規範的部分,通常被稱爲OpenGL驅動,它允許你使用幾何集合(點,線,多邊形,圖像等等)來描述你希望表現的場景。讓肉眼觀察起來較爲舒適的中等規模場景,通常在毫秒級的速度上實現,這意味著該庫文件有足夠的能力來支持你創建一個生機勃勃的虛擬世界。

  OpenGL驅動一般以二進制庫文件的形式提供。它能夠動態的連接到你的程序中。在Windows平台上,它將是成爲DLL的形式(在你的系統目錄下檢查opengl.dll)。自從Delphi能夠使用任何DLL開始,它對OpenGL 3D編程的能力就像其他任何語言一樣容易了。本文將幫助你獲得在Delphi中進行OpenGL開發的有效知識。

  數學基礎

  OpenGL擁有強大的數學基礎,因此對它功能的限制完全取決于你的想象能力(譯者注:沒有做不到,只有想不到)。對于理解那些公理和引理,更好的是讓我們立刻認識一個簡單的3D坐標系統,它是3D編程中慣用的坐標系統。如下:

王朝网络


  你應該如何理解你的屏幕(藍色的方塊)在場景中的放置位置呢?發出四條射線並形成屏幕的那個點,是該想象空間中的視點(point of view)。OpenGL讓你調用兩個簡單的函數來定義這個場景

  glMatrixMode(GL_PROJECTION);

  glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);

  在這個調用的過程中的-0.1,0.1,-0.1,0.1定義了這個可視屏幕的左上角和右下角坐標;0.3指定視愕狡聊壞木嗬?就好象「近剪貼板」(near clipping plane))同時25.0指定「遠剪貼板」(far clipping plane)。任何近剪貼板前面的物體以及遠剪貼板後面的物體都將不可見。當然,你能夠任意擺弄這些數字,以使他們適合你需要的場景。

  從基本元素(primitive)到對象

  現在開始最有意思的部分:對象。OpenGL僅僅支持以下幾種基本幾何圖形:點,線和多邊形。沒有表面或者更高級的圖形(比如球狀圖形)能被作爲基本圖形元素繪制。但是它們能夠用多邊形完美的模仿出來。隨意看看現代3D遊戲,你會發現它們完全由三角形建立。因此,我們不會被此限制所約束。

  對象的繪制非常類似Pascal語言編程。每個塊都應該被begin-end包含著,更爲確切的說是glBegin()和glEnd()。如同下面的例子:

  const S=1.0; D=5.0;

  ...

  glBegin(GL_TRIANGLES);

  glVertex3f( -S, 0, D); glVertex3f(S, 0, D); glVertex3f(0, S, D);

  glEnd;

  這是個簡單的三角形。它距離你的視點有5個單位,自身高1個單位,寬2個單位。

  這是屏幕截圖:

王朝网络


  即使它看起來不象3D圖形,但它是我們的初始塊。在下面你可以看到這個例子的源代碼。

  在你開始鑽研代碼前,還有些話要說。每次OpenGL編程,都包含一些初始化輸出設備的OS設定(OS-specific)代碼。如果你使用Win32,你將需要設置像素格式以及建立顯示上下文環境脫離windows設備上下文環境。如果windows系統級編程你並不很在行,你可以把如下的代碼作爲模版使用。FormCreate中被調用函數的詳細信息可以參考幫助文檔。

  FILE: Tri.pas

  unit Tri;

  interface

  uses

  OpenGL, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, ExtCtrls, ComCtrls;

  type

  TForm1 = class(TForm)

  procedure FormCreate(Sender: TObject);

  procedure FormPaint(Sender: TObject);

  private

  procedure Draw; //Draws an OpenGL scene on request

  public

  end;

  var

  Form1: TForm1;

  implementation

  {$R *.DFM}

  procedure setupPixelFormat(DC:HDC);

  const

  pfd:TPIXELFORMATDESCRIPTOR = (

  nSize:sizeof(TPIXELFORMATDESCRIPTOR); // size

  nVersion:1; // version

  dwFlags:PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or

  PFD_DOUBLEBUFFER; // support double-buffering

  iPixelType:PFD_TYPE_RGBA; // color type

  cColorBits:24; // preferred color depth

  cRedBits:0; cRedShift:0; // color bits (ignored)

  cGreenBits:0; cGreenShift:0;

  cBlueBits:0; cBlueShift:0;

  cAlphaBits:0; cAlphaShift:0; // no alpha buffer

  cAccumBits: 0;

  cAccumRedBits: 0; // no accumulation buffer,

  cAccumGreenBits: 0; // accum bits (ignored)

  cAccumBlueBits: 0;

  cAccumAlphaBits: 0;

  cDepthBits:16; // depth buffer

  cStencilBits:0; // no stencil buffer

  cAuxBuffers:0; // no auxiliary buffers

  iLayerType:PFD_MAIN_PLANE; // main layer

  bReserved: 0;

  dwLayerMask: 0;

  dwVisibleMask: 0;

  dwDamageMask: 0; // no layer, visible, damage masks

  );

  var pixelFormat:integer;

  begin

  pixelFormat := ChoosePixelFormat(DC, @pfd);

  if (pixelFormat = 0) then

  exit;

  if (SetPixelFormat(DC, pixelFormat, @pfd) < TRUE) then

  exit;

  end;

  procedure GLInit;

  begin

  // set viewing projection

  glMatrixMode(GL_PROJECTION);

  glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);

  // position viewer

  glMatrixMode(GL_MODELVIEW);

  glEnable(GL_DEPTH_TEST);

  end;

  procedure TForm1.FormCreate(Sender: TObject);

  var DC:HDC;

  RC:HGLRC;

  i:integer;

  begin

  DC:=GetDC(Handle); //Actually, you can use any windowed control here

  SetupPixelFormat(DC);

  RC:=wglCreateContext(DC); //makes OpenGL window out of DC

  wglMakeCurrent(DC, RC); //makes OpenGL window active

  GLInit; //initialize OpenGL

  end;

  procedure TForm1.Draw;

  const S=1.0; D=5.0;

  begin

  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  glLoadIdentity;

  glTranslatef(0.0, 0.0, -12.0);

  glBegin(GL_TRIANGLES);

  glVertex3f( -S, 0, D); glVertex3f(S, 0, D); glVertex3f(0, S, D);

  glEnd;

  SwapBuffers(wglGetCurrentDC);

  end;

  procedure TForm1.FormPaint(Sender: TObject);

  begin

  Draw;

  end;

  end.

  FILE: Tri.dfm

  object Form1: TForm1

  BorderStyle = bsDialog

  Caption = \'BASIC OpenGL Program\'

  ClientHeight = 318

  ClientWidth = 373

  OnCreate = FormCreate

  OnPaint = FormPaint

  end

  3D曆險

  好了,讓我們開始真正的3D吧。將先前的代碼作爲框架,我們增加一些畫線的代碼建立一個帶陰影面的四面體。應該如何用基本圖形元素來構建呢?我們使用四個三角形。一個在底部,另外三個作爲側面。這裏就是生成他們的代碼:

  procedure TForm1.Draw;

  const D=1.5;

  H1=D/1.732;

  H2=D*1.732-H1; // D/H = tg(30) = 1/sqrt(3)

  HY=3.0;

  const //vertexes

  a1:TGLArrayf3=(-D, 0, -H1); //bootom left

  a2:TGLArrayf3=( D, 0, -H1); //bootom right

  a3:TGLArrayf3=( 0, 0, H2); //bootom back

  a4:TGLArrayf3=( 0, HY, 0); //top

  begin

  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  glLoadIdentity;

  glTranslatef(0.0, 0.0, -12.0);

  glBegin(GL_TRIANGLES);

  glVertex3fv(@a1); glVertex3fv(@a3); glVertex3fv(@a2);

  glVertex3fv(@a1); glVertex3fv(@a2); glVertex3fv(@a4);

  glVertex3fv(@a2); glVertex3fv(@a3); glVertex3fv(@a4);

  glVertex3fv(@a3); glVertex3fv(@a1); glVertex3fv(@a4);

  glEnd;

  SwapBuffers(wglGetCurrentDC);

  end;

  雖然看起來有點複雜,不過當你面對下面這張圖時,它就很容易理解了。

王朝网络


  我們定義頂點a1 ? a4同時依據4個頂點位置建立指定的三角形。當你定義自己的三角形(或者其他的多邊形),請使用如下的規則:始終按照逆時針順序排列定點序號,就像你正在外部觀看側面一樣。通過這個規則,我們可以指定指定a1-a2-a4,a1-a3-a2(仰視),a2-a3-a4和a3-a1-a4。

  現在就替換Tri.pas中TForm1.Darw()部分,程序運行的效果不會體現出過多的變化。它看起來仍然不象三維圖形。這是因爲我們還沒有設定任何光源。

  LIGHTS! CAMERA! OPENGL!

  在OpenGL中光源模式有兩部分:光源自身(顔色,強度等等)和對象材質。材質,依次包括顔色,一些物理參數(比如不透明性光澤性)以及紋理。深入其中,這會是一個巨大的世界,我們將一步步地接近。

  定義一個光源相當容易。

  procedure GLInit;

  const

  light0_positi
 
 
 
上一篇《使用Delphi創建IIS虛擬目錄的方法》
下一篇《DELPHI中操作ACCESS技巧》
 
 
 
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

河南夫妻在溫嶺網絡直播“造人”內容涉黃被刑事拘留

夫妻網絡直播“造人”爆紅   1月9日,溫嶺城北派出所接到南京警方的協查通告,他們近期打掉了一個涉黃直播APP平台。而根據掌握的線索,其中有一對涉案的夫妻主播...

如何防止牆紙老化?牆紙變舊變黃怎麽辦?

如何防止牆紙老化? (1)選擇透氣性好的牆紙 市場上牆紙的材質分無紡布的、木纖維的、PVC的、玻璃纖維基材的、布面的等,相對而言,PVC材質的牆紙最不透氣...

鮮肌之謎非日本生産VS鮮肌之謎假日貨是謠言

觀點一:破日本銷售量的“鮮肌之謎” 非日本生産 近一段時間,淘寶上架了一款名爲“鮮肌之謎的” 鲑魚卵巢美容液,號稱是最近日本的一款推出的全新護膚品,産品本身所...

中國最美古詩詞精選摘抄

系腰裙(北宋詞人 張先) 惜霜蟾照夜雲天,朦胧影、畫勾闌。人情縱似長情月,算一年年。又能得、幾番圓。 欲寄西江題葉字,流不到、五亭前。東池始有荷新綠,尚小如...

關于女人的經典語句

關于女人的經典語句1、【做一個獨立的女人】 思想獨立:有主見、有自己的人生觀、價值觀。有上進心,永遠不放棄自己的理想,做一份自己喜愛的事業,擁有快樂和成就...

未來我們可以和性愛機器人結婚嗎?

你想體驗機器人性愛嗎?你想和性愛機器人結婚嗎?如果你想,機器人有拒絕你的權利嗎? 近日,第二屆“國際人類-機器人性愛研討會”大會在倫敦金史密斯大學落下帷幕。而...

全球最變態的十個地方

10.土耳其地下洞穴城市 變態指數:★★☆☆☆ 這是土耳其卡帕多西亞的一個著名景點,傳說是當年基督教徒們爲了躲避戰爭而在此修建。裏面曾住著20000人,...

科學家稱,人類死亡後意識將在另外一個宇宙中繼續存活

據英國《每日快報》報道,一位科學家兼理論家Robert Lanza博士宣稱,世界上並不存在人類死亡,死亡的只是身體。他認爲我們的意識借助我們體內的能量生存,而且...

《屏裏狐》片頭曲《我愛狐狸精》歌詞是什麽?

《我愛狐狸精》 - 劉馨棋   (電視劇《屏裏狐》主題曲)   作詞:金十三&李旦   作曲:劉嘉   狐狸精 狐狸仙   千年修...

 
 
 
  OpenGL最初是由Silicon圖形公司開發的底層圖形庫規範。你的系統中准確實現這個規範的部分,通常被稱爲OpenGL驅動,它允許你使用幾何集合(點,線,多邊形,圖像等等)來描述你希望表現的場景。讓肉眼觀察起來較爲舒適的中等規模場景,通常在毫秒級的速度上實現,這意味著該庫文件有足夠的能力來支持你創建一個生機勃勃的虛擬世界。   OpenGL驅動一般以二進制庫文件的形式提供。它能夠動態的連接到你的程序中。在Windows平台上,它將是成爲DLL的形式(在你的系統目錄下檢查opengl.dll)。自從Delphi能夠使用任何DLL開始,它對OpenGL 3D編程的能力就像其他任何語言一樣容易了。本文將幫助你獲得在Delphi中進行OpenGL開發的有效知識。   數學基礎   OpenGL擁有強大的數學基礎,因此對它功能的限制完全取決于你的想象能力(譯者注:沒有做不到,只有想不到)。對于理解那些公理和引理,更好的是讓我們立刻認識一個簡單的3D坐標系統,它是3D編程中慣用的坐標系統。如下:      [url=/bbs/detail_1440293.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1211129050727.jpg[/img][/url]   你應該如何理解你的屏幕(藍色的方塊)在場景中的放置位置呢?發出四條射線並形成屏幕的那個點,是該想象空間中的視點(point of view)。OpenGL讓你調用兩個簡單的函數來定義這個場景   glMatrixMode(GL_PROJECTION);   glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);   在這個調用的過程中的-0.1,0.1,-0.1,0.1定義了這個可視屏幕的左上角和右下角坐標;0.3指定視愕狡聊壞木嗬?就好象「近剪貼板」(near clipping plane))同時25.0指定「遠剪貼板」(far clipping plane)。任何近剪貼板前面的物體以及遠剪貼板後面的物體都將不可見。當然,你能夠任意擺弄這些數字,以使他們適合你需要的場景。   從基本元素(primitive)到對象   現在開始最有意思的部分:對象。OpenGL僅僅支持以下幾種基本幾何圖形:點,線和多邊形。沒有表面或者更高級的圖形(比如球狀圖形)能被作爲基本圖形元素繪制。但是它們能夠用多邊形完美的模仿出來。隨意看看現代3D遊戲,你會發現它們完全由三角形建立。因此,我們不會被此限制所約束。   對象的繪制非常類似Pascal語言編程。每個塊都應該被begin-end包含著,更爲確切的說是glBegin()和glEnd()。如同下面的例子:   const S=1.0; D=5.0;   ...   glBegin(GL_TRIANGLES);   glVertex3f( -S, 0, D); glVertex3f(S, 0, D); glVertex3f(0, S, D);   glEnd;   這是個簡單的三角形。它距離你的視點有5個單位,自身高1個單位,寬2個單位。   這是屏幕截圖:      [url=/bbs/detail_1440293.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1211129050961.jpg[/img][/url]   即使它看起來不象3D圖形,但它是我們的初始塊。在下面你可以看到這個例子的源代碼。   在你開始鑽研代碼前,還有些話要說。每次OpenGL編程,都包含一些初始化輸出設備的OS設定(OS-specific)代碼。如果你使用Win32,你將需要設置像素格式以及建立顯示上下文環境脫離windows設備上下文環境。如果windows系統級編程你並不很在行,你可以把如下的代碼作爲模版使用。FormCreate中被調用函數的詳細信息可以參考幫助文檔。   FILE: Tri.pas   unit Tri;   interface   uses   OpenGL, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   StdCtrls, ExtCtrls, ComCtrls;   type   TForm1 = class(TForm)   procedure FormCreate(Sender: TObject);   procedure FormPaint(Sender: TObject);   private   procedure Draw; //Draws an OpenGL scene on request   public   end;   var   Form1: TForm1;   implementation   {$R *.DFM}   procedure setupPixelFormat(DC:HDC);   const   pfd:TPIXELFORMATDESCRIPTOR = (   nSize:sizeof(TPIXELFORMATDESCRIPTOR); // size   nVersion:1; // version   dwFlags:PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or   PFD_DOUBLEBUFFER; // support double-buffering   iPixelType:PFD_TYPE_RGBA; // color type   cColorBits:24; // preferred color depth   cRedBits:0; cRedShift:0; // color bits (ignored)   cGreenBits:0; cGreenShift:0;   cBlueBits:0; cBlueShift:0;   cAlphaBits:0; cAlphaShift:0; // no alpha buffer   cAccumBits: 0;   cAccumRedBits: 0; // no accumulation buffer,   cAccumGreenBits: 0; // accum bits (ignored)   cAccumBlueBits: 0;   cAccumAlphaBits: 0;   cDepthBits:16; // depth buffer   cStencilBits:0; // no stencil buffer   cAuxBuffers:0; // no auxiliary buffers   iLayerType:PFD_MAIN_PLANE; // main layer   bReserved: 0;   dwLayerMask: 0;   dwVisibleMask: 0;   dwDamageMask: 0; // no layer, visible, damage masks   );   var pixelFormat:integer;   begin   pixelFormat := ChoosePixelFormat(DC, @pfd);   if (pixelFormat = 0) then   exit;   if (SetPixelFormat(DC, pixelFormat, @pfd) < TRUE) then   exit;   end;   procedure GLInit;   begin   // set viewing projection   glMatrixMode(GL_PROJECTION);   glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);   // position viewer   glMatrixMode(GL_MODELVIEW);   glEnable(GL_DEPTH_TEST);   end;   procedure TForm1.FormCreate(Sender: TObject);   var DC:HDC;   RC:HGLRC;   i:integer;   begin   DC:=GetDC(Handle); //Actually, you can use any windowed control here   SetupPixelFormat(DC);   RC:=wglCreateContext(DC); //makes OpenGL window out of DC   wglMakeCurrent(DC, RC); //makes OpenGL window active   GLInit; //initialize OpenGL   end;   procedure TForm1.Draw;   const S=1.0; D=5.0;   begin   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);   glLoadIdentity;   glTranslatef(0.0, 0.0, -12.0);   glBegin(GL_TRIANGLES);   glVertex3f( -S, 0, D); glVertex3f(S, 0, D); glVertex3f(0, S, D);   glEnd;   SwapBuffers(wglGetCurrentDC);   end;   procedure TForm1.FormPaint(Sender: TObject);   begin   Draw;   end;   end.   FILE: Tri.dfm   object Form1: TForm1   BorderStyle = bsDialog   Caption = \'BASIC OpenGL Program\'   ClientHeight = 318   ClientWidth = 373   OnCreate = FormCreate   OnPaint = FormPaint   end   3D曆險   好了,讓我們開始真正的3D吧。將先前的代碼作爲框架,我們增加一些畫線的代碼建立一個帶陰影面的四面體。應該如何用基本圖形元素來構建呢?我們使用四個三角形。一個在底部,另外三個作爲側面。這裏就是生成他們的代碼:   procedure TForm1.Draw;   const D=1.5;   H1=D/1.732;   H2=D*1.732-H1; // D/H = tg(30) = 1/sqrt(3)   HY=3.0;   const //vertexes   a1:TGLArrayf3=(-D, 0, -H1); //bootom left   a2:TGLArrayf3=( D, 0, -H1); //bootom right   a3:TGLArrayf3=( 0, 0, H2); //bootom back   a4:TGLArrayf3=( 0, HY, 0); //top   begin   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);   glLoadIdentity;   glTranslatef(0.0, 0.0, -12.0);   glBegin(GL_TRIANGLES);   glVertex3fv(@a1); glVertex3fv(@a3); glVertex3fv(@a2);   glVertex3fv(@a1); glVertex3fv(@a2); glVertex3fv(@a4);   glVertex3fv(@a2); glVertex3fv(@a3); glVertex3fv(@a4);   glVertex3fv(@a3); glVertex3fv(@a1); glVertex3fv(@a4);   glEnd;   SwapBuffers(wglGetCurrentDC);   end;   雖然看起來有點複雜,不過當你面對下面這張圖時,它就很容易理解了。      [url=/bbs/detail_1440293.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1211129051164.jpg[/img][/url]   我們定義頂點a1 ? a4同時依據4個頂點位置建立指定的三角形。當你定義自己的三角形(或者其他的多邊形),請使用如下的規則:始終按照逆時針順序排列定點序號,就像你正在外部觀看側面一樣。通過這個規則,我們可以指定指定a1-a2-a4,a1-a3-a2(仰視),a2-a3-a4和a3-a1-a4。   現在就替換Tri.pas中TForm1.Darw()部分,程序運行的效果不會體現出過多的變化。它看起來仍然不象三維圖形。這是因爲我們還沒有設定任何光源。   LIGHTS! CAMERA! OPENGL!   在OpenGL中光源模式有兩部分:光源自身(顔色,強度等等)和對象材質。材質,依次包括顔色,一些物理參數(比如不透明性光澤性)以及紋理。深入其中,這會是一個巨大的世界,我們將一步步地接近。   定義一個光源相當容易。   procedure GLInit;   const   light0_positi
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
小龍女彤彤之情溢皇都
龔潔
智能手機形象美女
崔潔彤
回家的路上----
中國一站(哈爾濱)
清明植物園的花。
桃花堤印象之豎版
 
>>返回首頁<<
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有