การเขียนเกมส์ 3 มิติ

Posted: มิถุนายน 18, 2010 in LESSON

หลังจากเราได้ทำความรู้จักกันไปบางส่วน ของ Irrlich Engine และ visual c++ 2008 แล้ว

สิ่งที่เราจะมาทำความรู้จักเป็นลำดับต่อไปคือ การเขียนเกมส์ 3 มิติ

การเขียนเกมส์ 3 มิติมีหลักใหญ่ๆ ดังนี้ คือ

  1. การเปิดเข้าสู่โหมดเกมส์ 3 มิติ
  2. การประมวลผลเกมส์ 3 มิติ
  3. การปิดโหมดเกมส์ 3 มิติ

3 ส่วนนี้ ถ้าไม่มีเราก็จะไม่มีเกมส์ 3 มิติกันนะจ๊ะ

เรามาศึกษา code ทีละส่วนกันดีกว่า

ส่วนแรก การเปิดเข้าสู้โหมดของเกมส์ 3 มิติ โค้ดดังนี้

เราจะเรียกฟังก์ชันในส่วนนี้ว่า ฟังกชัน init () มีหน้าที่สำหรับการจองหน่วยความจำที่ต้องการภายในเกมส์ เช่น การโหลดพวกโมเดลองค์ประกอบต่างๆภายในเกมส์

คำสั่งต่างๆ มีหน้าที่ดังนี้

  • memset(  &g_engine, NULL, sizeof(engine_t) ); ฟังก์ชัน memset() มีหน้าที่เซ็ทตัวแปรใน g_engine ให้มีค่าเท่ากับ NULL
  • g_engine.deviceType = video::EDT_DIRECT3D9; ทำหน้าที่กำหนด Driver ให้กับเกมส์ 3 มิติ โดยเลือกใช้ได้ดังนี้

  • g_engine.windowSize = core::dimension2d<s32>(800,500); ทำหน้าที่กำหนดความละเอียดของหน้าจอ เช่น 1024×768 หรือ 1680×1050
  • g_engine,bits = 16; คือส่วนที่บอกถึงระบบบิทของสีที่แสดงผลบนหน้าจอ

มาดูความแตกต่างของแต่ละแบบกันมั่ง

credit : http://www.adobe.com/education/instruction/webtech/CS2/unit_graphics1/gb_res_bitdepth_id.htm#bit

  • g_engine.fullscreen = 0; แสดงผลเต็มจอหรือหน้าต่างวินโดว์ ถ้าใส่ค่า 1 คือเต็มจอ
  • g_engine.reciever = &g_input; ทำหน้าที่ส่งตัวแปร input ที่ได้ประกาศไว้เข้าไปใน engine
  • setupEngine(&g_engine); มีหน้าที่เรียกคำสั่ง setupEngine เพื่อนำค่าตัวแปรนั้นไปประมวลผล
  • g_input,init(); มีหน้าที่เรียกคำสั่ง init จากตัวแปร g_input เพื่อทำงานในการเริ่มต้นของการประมวลผลการรับ input จาก keyboard และ mouse

จบส่วนแรกไปแล้วมาสู่ส่วนที่ 2 กันดีกว่า เยอะจริงๆอะ -*- (ขอบ่นเล็กๆ)

ส่วนที่ 2 การประมวลผลเกมส์ 3 มิติ

เรียก ฟังก์ชันนี้ว่า doframe() ในส่วนนี้ถือว่าสำคัญมากๆ เพราะว่าเป็นส่วนในการจัดการการแสดงผลของภาพในเกมส์ ระบบเสียง อะไรพวกนี้

ส่วนที่ 3 การปิดโหมดเกมส์ 3 มิติ

เรียกฟังก์ชันนี้ว่า ฟังก์ชัน deinit() ทำหน้าที่ในการคืนหน่วยความจำที่จองไว้ตอนเข้าโหมดเกมส์ 3 มิติ ในส่วนแรกนั่นเอง

เราจะเห็นคำสั่ง freeEngine( &g_engine); มีหน้าที่ในการคืนหน่วยความจำนั่นเอง

มาศึกษา code ส่วนอื่นๆอีกนิดนึง

ส่วนของ Header

ในส่วนนี้ จะมีหน้าที่ในการบอกให้โปรแกรมเรียกใช้ header file ของ windows.h , common.h และ MastEventReciever หากไม่เรียกโปรแกรมก็ไม่สามารถ build ได้นะจ๊ะ

ยังมีอีก 1 ส่วน

คำสั่งใน บรรทัดแรก มีเพื่อประกาศตัวแปรไว้เพื่อจัดการกับ engine 3 มิติ ในทุกๆโปรแกรมต้องประกาศตัวนี้เสมอนะจ๊ะ

คำสั่งในบรรทัดที่ 2 มีเพื่อประกาศตัวแปรไว้จัดการกับ input จาก keybpard และ mouse สำคัญเหมือนกับบรรทัดแรก คือต้องประกาศตัวนี้เสมอหากต้องการใช้ mouse และ keybaord

จบแล้ว สำหรับเนื้อหานี้ ในครั้งต่อไปเราจะมาเรียนรู้ เรื่องการโหลดโมเดลกัน โปรดติดตามกันด้วยนะคะ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s