ThaiGameDevX - Thai Game Developers eXchange Forums
27 September 2017, 08:38:26 AM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: หากมาครั้งแรก เชิญอ่าน ประกาศเจตนารมณ์ของ ThaiGameDevX และ กติกา ข้อตกลงในการใช้เว็บบอร์ด ครับ
 
   Home   Help Search Calendar Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: FAQ: เริ่มต้นเขียน OpenGL ทำไงดี  (Read 20946 times)
0 Members and 1 Guest are viewing this topic.
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« on: 03 September 2005, 02:15:35 PM »

 Cheesy อืม เอาเป็นว่า กระทู้นี้ ยกให้สำหรับคุณๆ ที่รู้แล้วว่าชีวิตนี้คุณต้องใช้ OpenGL แน่ๆ อย่างน้อย 1 ครั้ง
คุณพอที่จะรู้ว่า OpenGL มันคืออะไร และเอาไว้ทำอะไรได้บ้าง แต่คุณไม่รู้ว่าจะเริ่มต้นกะมันยังไง

ก่อนอื่นผมแนะนำให้หาซื้อ 3D card
ซึ่งราคาไม่จำเป็นต้องแพงมาก ไม่จำเป็นจะต้องเป็นรุ่นใหม่ล่าสุด เพียงแต่สนับสนุนการใช้งาน OpenGL แบบ H/W
เต็มรูปแบบ มันก็มีอยู่ 2 ยี่ห้อหลักๆ คือ nVidia Geforce .nnnn. กับ ATi Radeon .nnnn. และ chip graphics ยี่ห้อ Intel (build-in on-board) นั่นก็ใช้ได้ครับ

จากนั้นก็ลง Driver ให้ถูกต้อง
ซึ่งคนที่ไม่ได้ใช้ การ์ดที่สนับสนุน OpenGL แบบ H/W หรือไม่ได้ลง Driver ก็จะบอกว่า เอ ทำไม OpenGL มันวิ่งช้าอืดกว่า Direct3D แล้วก็จะเกิดอคติจากความไม่รู้ มานั่งเถียงเรื่องอะไรดีกว่าอะไร สู้เอาเวลาไปศึกษาให้ถ่องแท้ก่อนมานั่งวิจารณ์ไม่ดีกว่าหรือ� Roll Eyes

อย่าลืมลง DirectX SDK ด้วยนะครับ เพราะ OpenGL สนับสนุนเฉพาะภาพเท่านั้น ส่วนเสียงจะมี OpenAL* สนับสนุน แต่โดยทั่วไปจะใช้ DirectX ในส่วนของ DirectSound ซะมากกว่า

จากนั้นก็ไปลองหาเกมมาเล่น
เกมที่ใช้ OpenGL นะครับ เพื่อเป็นการลองของ ว่ามัน work มันใช้ได้ เล่นจน game over แล้วก็เลิกครับ� มาทำงานต่อ (อย่าค้างหน้าจอเกมไว้นานเดี๋ยวคนอื่นเค้ารู้หมดว่าฝีมือเกมห่วย Grin)

ได้เวลาลงคอมไพเลอร์แล้วครับ
ถ้ายังไม่ได้ลง หาคอมไพเลอร์เหมาะๆ มาลง ใช้ได้หมดทั้งค่าย Microsoft, Borland, Sun ใช้ได้เกือบๆ ทุกภาษา
จากนั้นก็จัดการอะไรให้เรียบร้อยครับ เช่น ลองคอมไพล์ดู ลองหัดเขียนโปรแกรมอื่นๆ ดูให้คล่องก่อนค่อยมาเล่น OpenGL (TIP: พยายามอย่าเอาปัญหา มากกว่า 1 อย่างมารวมกัน เช่น เขียนโปรแกรมไม่เป็น+วาดภาพทำไง+3D คำนวนยังไง+ฯลฯ ชีวิตคุณจะไม่ไปไหนแน่ๆ พยายามแก้ปัญหาทีละอย่างครับ )
หลังจากเขียนโปรแกรมขั้นพื้นฐานได้แล้ว ไปขั้นต่อไปเลยครับ

ไปหา source ของ tutorial มาลองเล่นดู
ไปเอามาลง เอามาคอมไพล์ สั่งรัน ดูสิว่ามันทำงานได้ไหม พยายามลองโปรแกรมง่ายๆ ก่อน เพื่อที่คุณจะได้ปรับเปลี่ยนได้ง่าย
( ไม่ใช่เอาโปรแกรม source เกมแจกฟรี เช่น qwack หรือ mod มาลง แล้วก็นั่งปวดหัวกะอัลกอริทึม มะลึกกึกกึ๋ย ประมาณว่าอยากโชว์เพื่อนว่าเจ๋งเขียนเองหมดเลย� พอเพื่อนถามว่าทำไง อ๋อ .. สั่งคอมไพล์เองกะมือนะนี่ .. ไม่ช่ายๆ� Grin )
ในขั้นนี้ คุณต้องการแค่ source code ที่อ่านเข้าใจได้ง่ายๆ และอาจจะมี comment เยอะๆ หน่อย
แนะนำให้ไป search หาใน internet**
หรือดูที่ web ที่นิยม เช่น http://nehe.gamedev.net/ เป็นต้น

ท่องเอาไว้ว่าโลกนี้ไม่มีอะไรง่าย
คาถานี้จำให้แม่น ทุกอย่างถ้ามันทำได้ง่ายๆ ทุกคนก็เป็นเซียน เป็นจ้าวโปรแกรมเมอร์กันหมด โลกนี้ไม่มีทางลัดครับ
ลงทุนหน่อย ไปหาซื้อหนังสือ reference 1 เล่ม สอนเขียน 1 เล่ม รวมสองเล่ม ( อย่าบอกว่ามันแพง มันคือการลงทุนทางความรู้ เพราะว่าถ้าคุณอ่านจบแล้วไปทำงานได้ตังค์เยอะกว่าค่าหนังสือนี่หลายเท่า� Wink )
เล่มแรกที่ผมใช้คือ
OpenGL SuperBible
http://www.starstonesoftware.com/OpenGL/

และผมแนะนำให้อ่าน red book กับ blue book
http://www.opengl.org/documentation/red_book_1.0/
http://www.opengl.org/documentation/blue_book_1.0/
2เล่มนี้เป็นคัมภีร์ มาตรฐาน อ่านให้ละเอียดทั้ง 2 เล่มครับ

จากนั้นก็ลองไล่ดูใน resources ซึ่งหลายๆ คนจะพบว่าคำถามที่ตัวเองติดขัดอยู่ส่วนใหญ่จะอยู่ในนี้ครับ
http://www.opengl.org/resources/index.html

วิชา OpenGL ขั้นพื้นฐานมีอะไรบ้าง
ให้มาตรวัดแบบนี้
ขั้น 1. เขียนสร้างโมเดลเองได้จาก glbegin glend glvertex สั่ง lighting ได้ เข้าใจระบบการคำนวน 3 มิติ ระบบแสง
ขั้น 2. เขียนเรียก texture ได้ เข้าใจระบบ texture การทำ offscreen , หรือ render-to-texture
ขั้น 3. ลองสร้างฉากเยอะๆ ใส่ texture เยอะๆ ใส่ลูกเล่น effect ต่างๆ ที่พอจะมีให้ใช้ เช่น blending material alphaclip clipplane stencil shadow ฯลฯ
ขั้น 4. ลองท่องยุทธจักรดูครับ ไปดูว่าคนอื่นๆ ใช้วิชา OpenGL ทำอะไรได้บ้าง พยายาม นึกดูว่าเค้าใช้คำสั่งอะไร แล้วได้ผลอย่างไร แล้วก็ลองทำดู ได้ผลหรือไม่ได้ยังไง ก็ได้ประสบการณ์ครับ
ขั้น 5. ลองหาวิธี import model ดูจากไฟล์ 3D มาตรฐานแล้ว ลองสร้างเกมง่ายๆ สักเกมดีไหมครับ

ถึงตอนนี้คุณจะได้วิชา OpenGL ขั้นพื้นฐานแล้วครับ
เรียนในมหาวิทยาลัย 1 คอร์ส ส่วนใหญ่คุณจะได้ขั้น 3 คนส่วนใหญ่ก็ใช้เวลาครึ่งปีครับ
กว่าจะถึงขั้น 5 รวมๆ แล้วจะปีนึง
ศึกษาให้เยอะๆ พยายามเล่นกับมันเยอะๆ ครับ ความเข้าใจ ไม่ใช่การท่องจำ� Wink
หลายคนอาจท้อแท้ คาถาจำให้แม่น ไปดูด้านบน
.. ขั้น advance ยังรออยู่นะ !� �;D


OpenAL*
search หาใน internet**
เอาไว้ต่อวันหลังนะครับ .. เรื่องมันยาว

« Last Edit: 04 September 2005, 02:38:41 PM by yod » Logged

..
นายตาหวาน (Mr.Tawan)
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +61/-36
Offline Offline

Gender: Male
Posts: 1,591


« Reply #1 on: 04 September 2005, 02:30:16 AM »

Edit : ถ้าแก้แล้วเดี๋ยวผมจะลบนะครับ (จะลองดูด้วยว่าลบกระทู้ได้มั้ย)
« Last Edit: 04 September 2005, 11:05:11 PM by นายตาหวาน » Logged

Are you feeling fine?
眠れない夜には君の幻が...
She said, "Loving you made me happy everyday"
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #2 on: 04 September 2005, 02:39:28 PM »

เอ่อ IBM ไม่มีชิพการ์ดจอเน้อ
เข้าใจว่าเป็น Intel (พวก 855/915 น่ะครับ)

Cheesy

ครับ คุณตาหวานท้วงมาถูกต้องนะคร้าบ (ไปแก้แล้วครับ) ^^'
Logged

..
bug
Newbie
*

จำนวน ชม/ไม่พอใจ: +1/-0
Offline Offline

Posts: 8


« Reply #3 on: 20 September 2005, 11:05:00 PM »

OpenGL นี้เป็น engine ตัวนึงใช่มั้ยครับ เหมือนกับ cdx รึเปล่า แล้ว download ได้ที่ไหนครับ
ลองเข้าไปดูๆ ใน link ที่ให้ไว้ก็ไม่ถนัดภาษาอังกฤษด้วย

ขอบคุณล่วงหน้าครับ Smiley

Logged
EndoBee
Approved Member
Full Member
*

จำนวน ชม/ไม่พอใจ: +15/-0
Offline Offline

Posts: 187


« Reply #4 on: 21 September 2005, 08:12:00 AM »

 OpenGL เป็น API ครับ เป็นระดับต่ำกว่า Engine (ต่ำกว่าในที่นี้หมายถึงทำงานในระดับล่างกว่า ลึกซึ่งกว่า
ในโลกนี้ มี API ที่นิยมสูงสุดอยู่ 2 ตัว คือ DirectX กับ OpenGL)
OpenGL จริงๆมีอยู่ใน VC++ อยู่แล้วนะครับ ถ้าคุณใช้ VC++ ไม่ต้องหามาลง(ตัวอื่นผมไม่ทราบ)

link ภาษาไทยคงยาก รองฝึกอ่านๆดูเถอะครับ สักเดือนก็ชิน
Logged
bug
Newbie
*

จำนวน ชม/ไม่พอใจ: +1/-0
Offline Offline

Posts: 8


« Reply #5 on: 21 September 2005, 10:11:30 AM »

เข้าใจแล้วครับ ขอบคุณครับ
Logged
visualC++
Guest
« Reply #6 on: 18 October 2005, 08:05:07 PM »

หนูไม่เคยใช้ OpenGL เลยค่ะ ใช้แต่ DirectX ที่คุณ bug บอกว่า มีอยู่ใน VC++ นั้น งงค่ะ  จะไปอ่านที่ไหนหรอค่ะ ที่ Help หรอค่ะ ตอบหน่อยนะค่ะ
Logged
Azimuth
Guest
« Reply #7 on: 17 December 2005, 01:49:34 AM »

ผมกำลังทำอยู่ครับ  เว็บภาษาไทย
Logged
langisser
Newbie
*

จำนวน ชม/ไม่พอใจ: +0/-0
Offline Offline

Posts: 4


« Reply #8 on: 21 January 2006, 08:38:51 AM »

กำลังหัดเขียนเลยครับ แต่ว่าทำไงให้ VC++2005 มันใช้ opengl ได้ครับ ทุกวันนี้ใช้ VC++6.0
Logged
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #9 on: 21 January 2006, 03:04:37 PM »

ตามนี้เลยครับ
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=01
Logged

..
langisser
Newbie
*

จำนวน ชม/ไม่พอใจ: +0/-0
Offline Offline

Posts: 4


« Reply #10 on: 26 January 2006, 12:48:52 PM »

ผมก็เอามาจากนั้นเช่นกันครับ มันสามารถทำได้ใน VC++6.0 แต่ใน VC++2005 มันไม่ยอม load library ครับ (ใน VC++2005 ผมไม่เห็น folder GL เลยด้วยซ้ำ)
ทำไงดีๆ อยากใช้ VC++ 2005 ครับ มันค่อนข้างสะดวกดี
« Last Edit: 26 January 2006, 01:51:42 PM by langisser » Logged
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #11 on: 26 January 2006, 06:26:57 PM »

เท่าที่ดูนะครับ

(1)
"Did you even follow the installation instructions for vc++ 2005 express? Because it does state that in order to develop win32 applications you need the microsoft platform sdk."
http://www.gamedev.net/community/forums/topic.asp?topic_id=366985&whichpage=1&#2418093

(2)
http://www.garagegames.com/index.php?sec=mg&mod=resource&page=view&qid=5957

(3)
http://www.pantip.com/tech/developer/topic/DM2006333/DM2006333.html

สรุปว่าควรไปที่
http://msdn.microsoft.com/vstudio/express/visualc/download/
ลองลง platform SDK ดูครับ

ถ้าไม่ได้ก็ลอง setup เอง
http://www.comp.nus.edu.sg/~qinchuan/compinfo/openglsetup.htm

ผมไม่ได้ใช้ VC นะ .. ก็ไม่แน่ใจเหมือนกันว่าจะได้หรือไม่ได้อย่างไร
ถ้าได้ช่วยบอกวิธี setup ด้วยนะครับ Smiley
Logged

..
Azimuth
Guest
« Reply #12 on: 29 January 2006, 10:09:55 PM »

ผมลองใช้ Compiler   ของ   GNU  ก็เป็นทางเลือกที่ดีน่ะครับ )
Logged
l3lacklistt
Newbie
*

จำนวน ชม/ไม่พอใจ: +0/-1
Offline Offline

Posts: 44


« Reply #13 on: 15 May 2008, 12:59:30 AM »


 เพราะ OpenGL สนับสนุนเฉพาะภาพเท่านั้น ส่วนเสียงจะมี OpenALสนับสนุน แต่โดยทั่วไปจะใช้ DirectX ในส่วนของ DirectSound ซะมากกว่า

แบบนี้ก็คือ  เขียน OpenGL แล้ว ก็ต้องเขียน OpenAL ด้วยหรือครับ ?  พี่yod.
« Last Edit: 15 May 2008, 01:01:03 AM by l3lacklistt » Logged
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #14 on: 15 May 2008, 01:49:20 AM »

ไม่จำเป็นครับ

openAL ออกแบบมาให้ใช้ยุ่งยากมาก  (ไม่รู้มันคิดยังไงของมัน) และ OpenAL ไม่เกี่ยวข้องกับ OpenGL คนสร้างคนละคน

ผมใช้ของ directsound + 3d +EAX หน่ะครับ เขียนง่ายกว่าเยอะ
Logged

..
นายตาหวาน (Mr.Tawan)
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +61/-36
Offline Offline

Gender: Male
Posts: 1,591


« Reply #15 on: 15 May 2008, 07:07:45 AM »

ผมใช้ OpenGL + SDL น่ะครับ Smiley
Logged

Are you feeling fine?
眠れない夜には君の幻が...
She said, "Loving you made me happy everyday"
pit
Jr. Member
**

จำนวน ชม/ไม่พอใจ: +6/-0
Offline Offline

Posts: 85


« Reply #16 on: 15 May 2008, 09:39:56 AM »

ขอโทษด้วยถ้าออกนอกประเด็นนะ

แต่ขอ comment เรื่อง openal นิดหน่อย สิ่งที่ผมต้องการคือ พลังในการ cross-platform
ซึ่งที่จะ comment ก็คือ openal ถ้าจะเขียนเกมบน mac, xbox (คิดว่า PS3 ก็ด้วย) ก็ใช้ openal
platform พวกนี้ ไม่มีทางเลือกเลย openal สถานเดียว

เผื่อจะเป็นทางเลือกหนึ่งหน่ะครับ
Logged
teedev
Approved Member
Newbie
*

จำนวน ชม/ไม่พอใจ: +1/-1
Offline Offline

Posts: 14


« Reply #17 on: 16 July 2008, 04:08:33 AM »

ผมเคย OpenGL + IrrKlang ครับ เคยทำเล่นๆครับ
Logged
teckth
Guest
« Reply #18 on: 25 February 2010, 07:21:06 AM »

thanks
Logged
Torio
Newbie
*

จำนวน ชม/ไม่พอใจ: +1/-0
Offline Offline

Gender: Male
Posts: 24



« Reply #19 on: 26 February 2010, 02:25:43 AM »

ในความคิดของผมการใช้ OpenGL + DirectAudio นั้นค่อนข้างแปลกๆ นะ (จะใช้ก็ไม่ผิดครับ OpenGL ก็ไม่ว่า DirectX SDK ก็ไม่ว่า ใครๆ ก็ไม่ว่า) เนื่องจาก DirectAudio เป้นส่วนประกอบหนึ่งใน DirectX SDK ซึ่งตัวมันเองก็มีส่วนประกอบที่สามารถทำงานได้เหมือน OpenGL นั้นคือ Direct3D อยู่แล้ว ในเมื่อคุณใช้ DirectAudio แล้วทำไมไม่ใช้ Direct3D ไปด้วยเลย จะได้ไม่ต้องเสียเวลามาศึกษา API หลายๆ ตัวให้เสียเวลา

OpenGL เป็น API ที่ออกแบบมาดีครับ (ถ้าไม่ดีจริง Direct3D ก็คงไม่นำหลักการดังกล่าวมาใช้หรอกครับ) แต่เนื่องจากมันพยายามสร้างความเข้ากันได้กับเวอร์ชันเก่าๆ ทำให้เกิดความสับสนของผู้ใช้อย่างมากเช่น ในการสร้าง Object 3D นั้นคุณมีวิธีในการอัด Vertex ลงไปใน pipeline ตั้งหลายวิธี (immediate mode , Vertex array, Vertex object) ซึ่งจะทำให้มือใหม่สับสนมาก ว่าควรใช้วิธีไหนดี ในขณะที่ Direct3D บังคับให้คุณต้องสร้าง Vertex Buffer อย่างเดียวทำให้ไม่เกิดความสับสน แต่วิธีการของ OpenGL ทำให้คุณมีความยืดหยุ่นมากกว่า

OpenGL ไม่มี Library ช่วยเหลือครับต่างกับ DirectX ซึ่งมีไลบรารี D3DX (GLUT ไม่ค่อยจะเอาทำยาได้เลยครับ) มาช่วยเหลือทำให้การใช้งานเป็นไปได้อย่างรวดเร็ว แต่ถึงกระนั้นมันก็เป็นการดีเป็นอย่างมากที่คุณจะสามารถเรียนรู้หลักการทาง 3D ได้อย่างถ่องแท้ (ถ้าไม่กระอักเลือดจากการศึกษาหลักการดังกล่าวเสียก่อน)

ใครบอกว่า OpenGL cross platform ได้ผมขอเถียงครับ เพราะบางส่วนของ OpenGL ก็ยังไม่สามารถ Cross platfrom ได้  ส่วนนั้นคือส่วนของโคดสร้าง Device context (หรือใครจะเถียง) ซึ่งขึ้นอยู่กับระบบปฏิบัติการนั้นๆ (WGL -> Windows | XGL -> Linux เป็นต้น)

SDL เป็น Library อีกตัวที่น่าสนใจมากครับทำงานร่วมกับ OpenGL ได้อย่างไม่มีปัญหา และเป็นกาวที่มาอุดรอยรั่วของ OpenGL เมื่อเทียบกับ DirectX (ที่แฟนๆประกาศ ว่า DX มีส่วนประกอบครบครันในการสร้างเกม ในขณะที่ OpenGL เป็นแค่ API ทางด้าน Graphic เท่านั้น)
มีอีกเยอะครับ แต่ตอนนี้ขี้เกียจเขียน -_-;
« Last Edit: 26 February 2010, 02:34:35 AM by Torio » Logged
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #20 on: 26 February 2010, 01:13:46 PM »

ในความคิดของผมการใช้ OpenGL + DirectAudio นั้นค่อนข้างแปลกๆ นะ (จะใช้ก็ไม่ผิดครับ OpenGL ก็ไม่ว่า DirectX SDK ก็ไม่ว่า ใครๆ ก็ไม่ว่า) เนื่องจาก DirectAudio เป้นส่วนประกอบหนึ่งใน DirectX SDK ซึ่งตัวมันเองก็มีส่วนประกอบที่สามารถทำงานได้เหมือน OpenGL นั้นคือ Direct3D อยู่แล้ว ในเมื่อคุณใช้ DirectAudio แล้วทำไมไม่ใช้ Direct3D ไปด้วยเลย จะได้ไม่ต้องเสียเวลามาศึกษา API หลายๆ ตัวให้เสียเวลา

ยินดีที่ได้แลกเปลี่ยนความคิดเห็นนะครับ ที่ผมเขียนนี่เฉพาะ OpenGL นานมาแล้ว
ใครอยากใช้อะไรก็ใช้ไป ตามแต่วิจารณญาณของแต่ละคน ไม่ได้บังคับนะครับ
อะไรลองแล้วที่ว่าดี ก็บอกว่าดี อะไรลองแล้วไม่ work ก็บอกไป

วัตถุประสงค์ก็ไม่ได้จะไปเปรียบเทียบกับอะไร
แล้วผมก็เขียนแค่ OpenGL ในฐานะ Graphics API ไม่ได้พูดถึง Sound API ซักนิด
พอดีมีคนถามมาก็ตอบให้
ถ้าบอกว่าเสียเวลาศึกษา DirectAudio (Sound API) แล้ว จะเขียน Direct3D (Graphics API) ได้ด้วย ผมคิดก็ว่าไม่จริงนะ
ยังไงก็ต้องศึกษา API อย่างน้อย 2 ตัว อยู่ดีนะครับ

หลายคนคิดว่าศึกษา API หลายตัวเสียเวลาไหม ตอนแรกคงใช่ แต่ตอนหลังก็จะเห็นว่ามันก็มีไม่กี่ตัวหรอกที่ให้ศึกษา อย่างมากก็ 10 ตัว


OpenGL เป็น API ที่ออกแบบมาดีครับ (ถ้าไม่ดีจริง Direct3D ก็คงไม่นำหลักการดังกล่าวมาใช้หรอกครับ) แต่เนื่องจากมันพยายามสร้างความเข้ากันได้กับเวอร์ชันเก่าๆ ทำให้เกิดความสับสนของผู้ใช้อย่างมากเช่น ในการสร้าง Object 3D นั้นคุณมีวิธีในการอัด Vertex ลงไปใน pipeline ตั้งหลายวิธี (immediate mode , Vertex array, Vertex object) ซึ่งจะทำให้มือใหม่สับสนมาก ว่าควรใช้วิธีไหนดี ในขณะที่ Direct3D บังคับให้คุณต้องสร้าง Vertex Buffer อย่างเดียวทำให้ไม่เกิดความสับสน แต่วิธีการของ OpenGL ทำให้คุณมีความยืดหยุ่นมากกว่า

การเข้ากันได้กับของเดิม คือจุดแข็งของ OpenGL ซึ่ง code ที่เขียนไปแล้ว 10 ปีที่แล้ว ก็ยังเอามา reuse ได้ โดยไม่แก้โปรแกรม หรือ ต้องรื้อโครงสร้างของ data structure ทิ้ง
ผมเริ่มใช้ OpenGL ครั้งแรกประมาณปี 2000-2001 ใช้ opengl super bible, red book
ดูกระทู้ โพสต์เมื่อ 2005-9 ใครจะเริ่มต้นตอนนี้  2010-2 ก็ยังใช้ได้อยู่เหมือนเดิมนะครับ (ทั้ง blue,red book และ nehe )

ตอนนี้มีใครที่ยังสามารถเอา (ไม่ถึง 10 ปี) code DirectX7 API  มาใช้กับ DirectX11 API ได้บ้างครับ ?

ส่วน เรื่องของ Vertex ใน Direct3D ก็มี(หรือเคยมี) ทั้ง ใส่แบบธรรมดา หรือ ใส่เป็นก้อน เหมือนกัน
เรื่องของการใส่เป็นก้อน ก็ทำให้หลายคนบ่นใน GLES 1.1 นะครับ เพราะขาดความคล่องตัว


OpenGL ไม่มี Library ช่วยเหลือครับต่างกับ DirectX ซึ่งมีไลบรารี D3DX (GLUT ไม่ค่อยจะเอาทำยาได้เลยครับ) มาช่วยเหลือทำให้การใช้งานเป็นไปได้อย่างรวดเร็ว แต่ถึงกระนั้นมันก็เป็นการดีเป็นอย่างมากที่คุณจะสามารถเรียนรู้หลักการทาง 3D ได้อย่างถ่องแท้ (ถ้าไม่กระอักเลือดจากการศึกษาหลักการดังกล่าวเสียก่อน)

OpenGL เป็น API ครับ
ส่วน Glut,Glu,Glew ไม่ใช่
เป็น custom made (software based) ที่มีคนอื่นสร้างมาใช้ประกอบ พอหลายคนนิยมใช้ก็เอามาเป็นมาตรฐานไป

OpenGL ไม่มี Library ช่วยเหลือ ก็ดีสิครับ เขียนกันเอง จะได้รู้กันไปว่าใครแน่จริง (ล้อเล่นหน่ะ)
ตอนนี้มี Collada ออกมาแล้วครับ http://www.khronos.org/collada
วิ่งบน GLES2.0

ใครบอกว่า OpenGL cross platform ได้ผมขอเถียงครับ เพราะบางส่วนของ OpenGL ก็ยังไม่สามารถ Cross platfrom ได้  ส่วนนั้นคือส่วนของโคดสร้าง Device context (หรือใครจะเถียง) ซึ่งขึ้นอยู่กับระบบปฏิบัติการนั้นๆ (WGL -> Windows | XGL -> Linux เป็นต้น)

OpenGL API (เน้นว่า API) Cross Platform เพราะว่า  ไม่ได้มีแต่ Platform MS ที่วิ่งได้นี่ครับ

ส่วนของสร้าง Device Context Buffer เช่น Glut, WGL,XGL นั้นต้องยึดตาม OS อยู่แล้ว จะไปเทียบกับอย่างอื่นไม่ได้

เพราะ Direct3D ทำงาน บน Win32 ตระกูล Windows, WinMobile, XBOX เท่านั้น ไม่ได้วิ่งบน Linux ด้วย
ก็เลยไม่ได้เห็นการ create idevice แบบอื่น .. บน Linux ไม่มี COM+ นะครับ

ที่ยึดตามใน OS และ platform อื่นๆ เพราะ วิธีสร้าง buffer ไม่เหมือนกันนะครับ buffer จำเป็นต้องติดต่อกับ H/W โดยตรง
ทางสถาปัตยกรรมของ PC จะแยกส่วนระหว่าง video memory กับ application memory
ส่วนเครื่อง Silicon Graphics ใช้ memory ก้อนเดียวกัน
แล้วอย่าลืมว่า Linux ไม่ได้ทำงานบน intel/AMD CPU ที่มี instruction set เหมือนกันนะครับ มียี่ห้ออื่นๆ อีกหลายตัว ที่สั่งงานแบบแปลกๆ
วิธีส่งข้อมูลไม่เหมือนกัน 
กระทั่ง Mobile/Handheld OS/Platform ก็มีอีกหลาย เช่น SymbianOS (เขียน C บนนั้นเป็นอะไรที่โหดจริงๆ), Brew, J2ME, iPhone, Andriod, DoCoMo, NDS, บลาๆ การสร้างหน้าจอสั่งไม่เหมือนกัน
ทำให้วิธี setup ไม่เหมือนกัน

ถ้าคุณใช้ OpenGL|ES 1.1/2.0 (standard ใหม่) เห็นว่ามี EGL ที่ได้ข้าม platform ทั้ง Windows(PowerVR), iPhone และ Android
แต่ก่อนจะใช้ EGL ก็ต้องเรียกตาม step ของ platform นั้นอยู่ดีนะครับ


SDL เป็น Library อีกตัวที่น่าสนใจมากครับทำงานร่วมกับ OpenGL ได้อย่างไม่มีปัญหา และเป็นกาวที่มาอุดรอยรั่วของ OpenGL เมื่อเทียบกับ DirectX (ที่แฟนๆประกาศ ว่า DX มีส่วนประกอบครบครันในการสร้างเกม ในขณะที่ OpenGL เป็นแค่ API ทางด้าน Graphic เท่านั้น)
มีอีกเยอะครับ แต่ตอนนี้ขี้เกียจเขียน -_-;


น่าสนใจครับ ลองเขียนมาบ้างสิครับ จะได้อ่านกัน
« Last Edit: 26 February 2010, 01:36:35 PM by yod » Logged

..
Torio
Newbie
*

จำนวน ชม/ไม่พอใจ: +1/-0
Offline Offline

Gender: Male
Posts: 24



« Reply #21 on: 26 February 2010, 11:20:15 PM »

ผมไม่ได้เขียนในลักษณะว่าใครดีกว่าใครนะครับ เพียงอธิบายให้เห็นมุมมองต่างๆ ของ API ทั้งสองเท่านั้นเพียงแต่เน้นอธิบายไปที่ DX เสียมากก็เพราะเห็นว่า ละในฐานที่เข้าใจ OpenGL อยู่แล้ว
API ทั้งสองมีความสามารถสูสีกันครับเพียงแต่ว่ามันมี จุดดีจุดด้อยที่แตกต่างกัน เนื่องจากสถาปัตยกรรมที่แตกต่างกัน อย่างไรก็ตามผลลัพธ์มันก็คล้ายๆ กันนะ ผมเองก็เคยใช้ API ทั้งสองมาค่อนข้างหนักครับทำให้พอรู้จุดดีจุดด้อย
ปัจจุบันนี้ผมหันมาใช้ OpenGL ค่อนข้างจะมากกว่า DX คงเป็นเพราะอีแก่ที่บ้าน (ผมหมายถึงคอมพิวเตอร์นะครับ) รองรับ DX ได้ไม่ค่อยดีเท่าไหร่ DX ค่อนข้างจุกจิกจู้จี้ครับในการเลือก Hardware โดยเฉพาะระดับล่าง
SDL + OpenGL นั้นค่อนข้างสะดวกครับ ลำพัง SDL เองไม่สามารถสร้างงานด้าน 3 มิติได้เลยแต่จุดดีของมันคือการสร้าง Device context และมีส่วนประกอบอื่นๆ ทั้งด้านเสียง การรับอินพุท เน็ทเวอครวมอาด้วย ตัว SDL เองนั้น Cross-platform อย่างเต็มตัวดังนั้น OpenGL และ SDL จึงเป็นคู่หูที่เข้ากันได้แบบ ปี่กับขลุ่ยทีเดียว
Logged
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #22 on: 27 February 2010, 12:16:36 AM »

ผมพยายามบอกอะไรบางอย่าง ไม่แน่ใจว่าหนนี้บอกไปแล้วใครจะเห็นบ้าง
Language, API, Extension, Framework, Platform, OS, Architecture, Machine
ไม่ใช่สิ่งเดียวกัน แต่มันเกี่ยวข้องกันอยู่

SDL เป็น Framework ซึ่งตัว Framework เอง ออกแบบให้ Cross Platform ได้

ดังนั้น code ที่ใส่ลงไปบน SDL จึง Cross Platform ได้
แต่ก็เหมือนกันกับอย่างอื่นคือต้องมี Compiler Directive ไว้ดักบ้าง

เหมือนกับ XNA Framework ที่ Cross ระหว่าง Win32 กับ XBOX และ Zune ซึ่ง
ข้ามไปได้แต่ก็มี Compiler Directive ดักไว้เหมือนกัน

ส่วนเรื่องของ input จาก SDL นั้นจะว่าดีก็ดี คือรับได้แต่ standard input (keyboard+mouse)
ถ้าเอา SDL ไปลง Device อื่น เช่น Joypad 32 ปุ่ม หรือ Accelerometer ของ iPhone ก็ต้องเขียนเองอยู่ดีครับ

ผมไม่ยึดติดอะไรนะครับ เพราะว่า เล่นหลายตัวตั้งแต่ WinG,DirectX3,7,9, OpenGL (บน SGI, Win98, J2ME)  XNA
Sound ก็เล่นทั้ง SoundBlaster SDK, OpenAL, DirectSound, XACT(http://en.wikipedia.org/wiki/Cross-platform_Audio_Creation_Tool) ไม่ได้เล่นเฉยๆ นะครับ ทุกตัวต้องมีเหตุให้ทำออกมาเป็นงานจนเสร็จ

โบราณเค้าว่า นักดาบที่ดี ต้องทิ้งดาบในมือครับ

คุยกันมีเนื้อหาสาระแบบนี้ ยินดีครับ
แต่คงไม่ตอบต่อแล้วครับ เพราะช่วงนี้งานยุ่งมาก จนถึงปลายเดือนมีนาคม
« Last Edit: 27 February 2010, 12:18:42 AM by yod » Logged

..
Torio
Newbie
*

จำนวน ชม/ไม่พอใจ: +1/-0
Offline Offline

Gender: Male
Posts: 24



« Reply #23 on: 27 February 2010, 01:33:27 AM »

ยินดีเช่นกันครับ หวังว่าวันหลังคงจะมีโอกาสดีๆ อีก (ถ้าผมไม่โดนโจรใต้ยิงตายเสียก่อน)
Logged
xepherozh
Guest
« Reply #24 on: 19 March 2010, 04:06:19 AM »


และผมแนะนำให้อ่าน red book กับ blue book
http://www.opengl.org/documentation/red_book_1.0/
http://www.opengl.org/documentation/blue_book_1.0/
2เล่มนี้เป็นคัมภีร์ มาตรฐาน อ่านให้ละเอียดทั้ง 2 เล่มครับ


คือ ลิ้งค์เสียน่ะคับ ลบกวนอัพแก้ไขทีคับป๋ม
Logged
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #25 on: 19 March 2010, 07:09:11 AM »


และผมแนะนำให้อ่าน red book กับ blue book
http://www.opengl.org/documentation/red_book_1.0/
http://www.opengl.org/documentation/blue_book_1.0/
2เล่มนี้เป็นคัมภีร์ มาตรฐาน อ่านให้ละเอียดทั้ง 2 เล่มครับ


คือ ลิ้งค์เสียน่ะคับ ลบกวนอัพแก้ไขทีคับป๋ม

ไม่ใช่เจ้าของ server จะได้อัพแก้ลิงค์เสียได้

ไปที่ http://www.google.com
แล้วพิมพ์ opengl blue book
ดีไหมครับ
Logged

..
Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!