Results 1 to 3 of 3

Thread: OpenGL คืออะไรค่ะ

  1. #1
    Junior Member
    Join Date
    Dec 2006
    Posts
    0


    OpenGL คืออะไรค่ะ

    คือเห็นบ่อยๆเวลาเล่นเกมส์ ไม่ทราบว่าคล้ายๆกับ พวห directx หรือเปล่าค่ะถ้าใช่ แล้วมันต่างกันยัง

  2. #2
    Administrator asylu3's Avatar
    Join Date
    Jun 2000
    Location
    Thailand
    Posts
    3,557


    Re: OpenGL คืออะไรค่ะ

    OpenGL MCD และ ICD
    OpenGL เป็น Graphic API ที่เป็นทั้ง 2D/3D ครับ การทำงาน จะขอแยกเป็นสองส่วน อันดับแรกคือ ทาง hardware ที่ต้อง support OpenGL และ hardware จะทำงานได้ ต้องทำงานผ่าน OpenGL ICD (ซึ่งจะมากับ driver ของการ์ด -- บางตัวก็จะเป็นแค่ MCD) อีกส่วน ก็คือ WGL หรือ Environment ของ Win32 ที่จะเป็นตัวกลาง ระหว่างโปรแกรม และ hardware เพื่อให้ระบบ สามารถใช้ OpenGL ได้อย่างถูกต้อง
    OpenGL คือ API 2D/3D ที่สามารถย้ายโอนระบบได้อย่างอิสระ นั่นหมายถึงว่า ระบบ API ตัวนี้ จะไม่อิงกับระบบ Windows, Mac หรือระบบใด ๆ -- "OpenGL is a fully portable 2D/3D graphics API so it is not tied directly to any particular system"
    ภายใต้ระบบปฏิบัติการหนึ่ง ๆ จะมีสิ่งที่เรียกว่า "system bindings" ที่ทำหน้าที่ เป็นตัวประสานระหว่างโปรแกรม OpenGL กับระบบปฏิบัติการ โดยตัวประสานตัวนี้ จะยึดกับ library ที่เรียกว่า GLX ซึ่งพัฒนาโดย SGI
    แต่ภายใต้สภาวะแวดล้อมของ Windows (Win32) ตัวประสานนี้จะเรียกว่า WGL (อ่านว่า วิกเกิ้ล) ซึ่งพัฒนาโดย Microsoft
    จะเห็นได้ว่า โดยแก่นแท้ของ OpenGL code นั้น จะสามารถย้ายระบบได้โดยอิสระ แต่ส่วนตัวประสาน (GLX, WLX) นั้น จะต้องมีการแก้ไขไป ตามแต่นระบบที่ใช้ (เช่น Mac, Linux หรือ PC)
    ในแต่ละระบบปฏิบัติการนั้น จะมี driver interface ที่ต่างกันออกไป (driver ที่ทำให้ OpenGL สื่อสารกับ OS ได้) โดยภายใด้สภาวะของ Win32 นั้น จะมี driver interface อยู่ 2 แบบคือ
    1. ICD (Installable Client Driver)
    2. MCD (Mini Client Driver)



    คำว่า full ICD นั้นหมายถึง driver OpenGL สมบูรณ์แบบ (Complete OpenGL driver implementation) ที่รองรับ OpenGL ทั้งหมด และสามารถทำงานร่วมกับส่วนอื่น ๆ ของ driver นั้นได้ (standard driver interface mechanism)
    เมื่อ driver OpenGL ถูกเรียกว่า ICD นั่นก็หมายความว่า driver ตัวนี้ จะเชื่อมโยงกับการทำงานของ Microsoft ICD interface ซึ่งทำให้โปรแกรมใด ๆ ก็ตามที่เชื่อมโยงกับ OPENGL32.LIB ใช้ OPENGL32.DLL และ WGL จะสามารถทำงานร่วมกับ driver ICD นี้ได้อย่างไร้ปัญหาโดยสิ้นเชิง
    โปรแกรมดังกล่าวได้แก่
    1.โปรแกรมงานออกแบบ (Modeling / Creative Content Creation)
    2. CAD / CAM
    3. Developer Toolkits & Libraries, Game Engines, 3D APIs
    4. Games
    5. VRML Authoring & Viewing
    6. Utilities; Screen Savers, Benchmarks
    7. Simulations & Visualizations
    8. Scientific, Data Analysis & Geographic Mapping
    แต่เนื่องจากว่า WGL ถูกออกแบบมานานมากแล้ว ตัวประสาน WGL จึงเข้าใจการทำงานแบบการ์ดตัวเดียวเท่านั้น ดังนั้น WGL ไม่ได้ถูกออกแบบมา ให้รองรับการ์ดเร่งความเร็ว 3D เดี่ยว ๆ อย่าง Voodoo, Voodoo 2 ซึ่งนี่ก็หมายความว่า 3Dfx จะไม่สามารถ เขียน ICD สำหรับ Voodoo, Voodoo 2 ได้ ลองคิดดูว่า ถ้าในเครื่องมี TNT และ Voodoo2 อยู่ *แล้ว* ทั้งคู่มี ICD คำถามคือ โปรแกรมจะเลือกใช้ ICD ตัวไหน? แต่อย่างไรก็ตาม นี่ไม่ใช่ปัญหาหลัก เพราะในเครื่องเครื่องหนึ่ง สามารถมี ICD ได้เพียงหนึ่งเดียวเท่านั้น (เฉพาะ primary card)
    *ทั้งนี้ Direct3D ไม่ประสบปัญหานี้ เนื่องจาก Microsoft ได้ออกแบบให้ Direct3D สามารถรองรับอุปกรณ์ หลาย ๆ ตัวได้ และ WGL สามารถแก้ไขให้รองรับได้เช่นกัน แต่ Microsoft ไม่แก้ (แล้วใครจะแก้ให้)



    และจากเหตุผลที่ว่า ICD สามารถมีได้เพียงหนึ่งเท่านั้น 3Dfx จึงสามารถออกแค่ *FULL OpenGL DRIVER* สำหรับ Voodoo2 ได้เท่านั้น แต่ driver นี้ ไม่สามารถเรียกเป็น ICD ได้
    Full OpenGL driver สำหรับ Voodoo และ Voodoo 2 นั้นเราเรียกว่า "Standalone Driver"
    Standalone Driver คือ driver ที่รองรับ OpenGL แต่ไม่รองรับกลไกการเชื่อมต่อ ICD driver ของ Microsoft (Microsoft ICD driver interface mechanism) ทั้งนี้เนื่องจากปัญหาด้านเทคนิคของ WGL เอง -- A full OpenGL implementation that does not use the Microsoft ICD driver interface mechanism because of technical inadequacies within WGL.
    ที่เหลือจากนี้ยังมี "minidriver" ซึ่งอาจจะดูคล้าย ๆ กับ "standalone driver"
    MiniDriver คือ driver ที่รองรับ *บางส่วน* ของ OpenGL ซึ่งถูกออกแบบมาให้ใช้เฉพาะชุดคำสั่งที่ OpenGL เรียกใช้ อย่างในเกม GLQuake และ Quake2 -- A partial OpenGL implementation designed to support only those OpenGL calls
    ข้อแตกต่างระหว่าง standalone กับ minidriver คือ StandAlone จะเป็น full OpenGL ซึ่งสามารถใช้งานได้ กับเกม OpenGL ส่วน MiniDriver จะมีแแค่บางส่วนของ OpenGL ซึ่งสามารถใช้งานได้กับเฉพาะกับเกม บางเกม ทีเ่รียกใช้ชุดคำสั่งที่มีใน MiniDriver เท่านั้น
    **driver ของ 3Dfx เป็น StandAlone full OpenGL driver แต่ไม่ใช่ ICD**



    สรุป
    ICD driver เป็น driver OpenGL ที่ครบถ้วนและสมบูรณ์ และก็ยังรองรับกลไกการเชื่อมต่อ ICD ของ Microsoft ส่วน StandAlone driver นั้น รองรับ OpenGL ครบถ้วน แต่ไม่ได้ใช้กลไกการเชื่อมต่อของ Microsoft ในการติดต่อกับระบบปฏิบัติการ และท้ายสุด MCD driver เป็น driver ที่รองรับ OpenGL แค่บางส่วน -- An ICD driver is a complete & full OpenGL driver that supports the Microsoft ICD interface mechanism. A full Standalone driver also supports the full OpenGL pipeline but does not use the Microsoft mechanism for linking to the OS. An MCD driver only takes care of some parts of the OpenGL pipeline

    ในขณะนี้ Microsoft ยังไม่มี OpenGL 1.2 ICD แต่อย่างไรก็ตาม การ์ดเร่งความเร็วสามารถใช้ ความสามารถของ OpenGL 1.2 ได้ ผ่านทางส่วนขยายของ OpenGL (standard OpenGL extension mechanism)
    สำหรับผู้ที่มีการ์ดเร่ง 3D รุ่นเก่า ๆ ที่ไม่มี OpenGL ICD แต่รองรับ DirectX6 ก็สามารถใช้คุณสมบัติ ของ OpenGL ได้ โดยผ่านทางโปรแกรม SciTech GLDirect หรือ AltSoftware Mesa DirectX 6 Driver ซึ่งโปรแกรมทั้งสองตัวนี้ จะทำให้โปรแกรม 3D ที่ใช้ OpenGL ทำงานผ่าน driver Direct3D ของ Microsoft ได้

  3. #3
    Senior Member
    Join Date
    Sep 2003
    Location
    Thailand
    Posts
    136


    Re: OpenGL คืออะไรค่ะ

    อนุมานว่า ไม่รู้อะไรเกี่ยวกับ OpenGL นะครับ

    ในสมัยแรก ๆ ที่เราเขียนโปรแกรมให้แสดงภาพกราฟิกบนจอภาพ เราต้องการเขียน เ้ส้นตรง วงกลม วงรี การระบายสีโพลีกอน(รูปหลายเหลี่ยม) การย้ายวัตถุ หมุนวัตถุ ย่อ/ขยายวัตถุ หรือสะท้อนวัตถุ เราจะต้องเขียนโปรแกรมเอง

    มาพิจารณาที่เพียงการวาดเส้นตรง มีอัลกอริทึมที่เกิดจากการวิจัยคือ
    1. วิธี DDA (Differential Digital Analyser)
    2. วิธี Bresenham Line Algorithm

    แต่ละแบบมีข้อดีข้อเสียต่างกัน เป็นการพัฒนาของเก่าให้ดีขึ้น อัลกอริทึม Bresenham เขีนเส้นตรงได้เร็ว เพราะใช้เพียงการบวกและการคูณด้วยสอง (ซึ่งเป็นเพียงเลื่อนบิตไปทางซ้าย) จึงเร็วกว่าแบบ DDA

    ในขณะที่ยังมีหัวข้ออื่น ๆ ซึ่งมีรายละเอียดอย่างมาก !!
    ดังนั้นจึงได้มีการสร้าง กราฟิกไลบรารี่ เพื่อเป็นคำสั่งในการเขียนโปรแกรมด้านกราฟิก เช่น วาดเส้นตรง วาดวงกลม วงรี และที่ได้กล่าวไปในตอนต้น

    บริษัท Silicon Graphics ได้สร้าง OpenGL (เรียกว่า Open Graphics Library) เป็นระบบเปิดครับ

    ต่อมาไมโครซอฟต์ได้สร้าง DirectX ซึ่งเป็นกราฟิกไลบรารี่เช่นเดียวกัน แต่คนละมาตรฐาน

    ปัจจุบันมีการ์ดเร่งความเร็วสามมิติ ได้นำชุดคำสั่งของ OpenGL ไปเก็บไว้ในตัวการ์ด เพื่อให้การทำงานเร็ว

Similar Threads

  1. .Jar คืออะไรค่ะ
    By ar3s in forum Java
    Replies: 4
    Last Post: 05-07-2010, 08:51 PM
  2. need help with openGL
    By keepack in forum Game Programming & Computer Graphics
    Replies: 2
    Last Post: 27-08-2008, 06:44 PM
  3. flash mail คืออะไรค่ะ
    By plearn in forum Newbie / Starter Hacker
    Replies: 0
    Last Post: 14-11-2006, 09:28 PM
  4. OpenGL tutorial
    By asylu3 in forum Game Programming & Computer Graphics
    Replies: 0
    Last Post: 30-10-2004, 01:39 AM
  5. ATL คืออะไรค่ะ
    By ar3s in forum C/C++,C#,VC++,MFC,Win32
    Replies: 1
    Last Post: 21-05-2004, 06:31 PM

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •