แหล่งข้อมูลเพื่อช่วยศึกษาเครื่องยนต์ Quake 3 [ปิด]


14

มีแหล่งข้อมูลที่ดี (คู่มือการใช้งานแบบฝึกหัดและอื่น ๆ ) เพื่อเริ่มศึกษารหัสของ Quake 3 เอ็นจิ้นเกินตัวรหัสหรือไม่?

ฉันสนใจมากที่รู้ว่าโครงสร้างสำหรับวัตถุประสงค์ทางการศึกษาและอาจมีการปรับเปลี่ยนบ้าง

คำตอบ:


13

ดังนั้นคุณควรเริ่มต้นด้วยการมองหาที่บทความวิกิพีเดียในid ไฮเทค 3 ซึ่งสามารถเติมเต็มได้ด้วยการสรุปการพูดคุย GDC ของ Brian Hook และของโบราณในบล็อกElement 61 นอกจากนั้นคุณจะต้องสำรวจหาบทเรียนเกี่ยวกับ mod เก่า ๆ ที่คุณสามารถลองและสร้างสิ่งที่เกิดขึ้น

ฉันขอแนะนำให้เริ่มต้นจากการเปิดตัวแหล่งที่มาดั้งเดิมจาก id แทนที่จะเป็น ioquake3 หรืออะไรก็ได้ที่คุณต้องการเพื่อดูบริบทของสิ่งที่เกิดขึ้นจริง ๆ (วิธีจัดการอินพุตและควบคุมภายในเอ็นจิ้น มีการใช้โครงสร้าง ฯลฯ )

ประเด็นสำคัญบางประการที่ช่วยฉันเมื่อฉันทำงานกับมัน:

  • มีเซิร์ฟเวอร์เสมอ อาจมีลูกค้าลอจิกนั่งอยู่ด้านบนของการจัดการกรอบ
  • อินพุตจะถูกนำไปยังคอนโซลก่อนหากสนใจจากนั้นไปยัง GUI จากนั้นเข้าสู่เกมที่เหมาะสม
  • เอ็นจิ้นนั้นแยกออกจากกัน (ยาก!) จากตรรกะของเกมโดยใช้ฟังก์ชั่นกับดัก ดู (ถ้าหน่วยความจำทำหน้าที่) เกม cgame และแสดงโครงการเพื่อค้นหารหัสเครื่องยนต์จริง
  • ตรรกะของเกมสามารถเขียนได้ทั้งหมดเพื่อให้ทำงานในเครื่องเสมือน Quake 3 เมื่อ modding และใช้ dll พื้นเมืองคุณจะต้องเรียกใช้เกมquake3.exe +set sv_pure 0 +set vm_game 0 +set vm_cgame 0 +set vm_ui 0เพื่อให้เอ็นจิ้นสามารถเรียกใช้เนทีฟโค้ดแทนโค้ด VM
  • UI สำหรับระบบเมนูนั้นเป็นโครงสร้างที่แปลกประหลาดชั่วร้ายและบิดเบี้ยว มันจะใช้งานได้เมื่อคุณไขปริศนาออก แต่นั่นอาจทำให้คุณลองผิดลองถูก จำไว้ว่ามันเป็นกอง
  • หากคุณกำลังเขียนโค้ดใน. dll พื้นเมืองคุณสามารถจัดสรรหน่วยความจำเขียนใน C ++ หรืออะไรก็ตามที่ลอยอยู่บนเรือของคุณ คุณสามารถใช้ STL ได้เช่นกัน - ไม่มีเหตุผลใดที่จะปฏิบัติตามสำนวน C อย่างเคร่งครัดยกเว้นว่าคุณติดต่อกับเครื่องยนต์โดยตรง

สิ่งที่ฉันทำไว้กับเพื่อนร่วมงาน:

  • อินเตอร์เฟสบรรทัดคำสั่งแบบง่ายเพื่อเรียกใช้คำสั่งเชลล์จากคอนโซลและดัมพ์สตรีม stdout / stderr กลับไปที่คอนโซล (คอนโซล Quake)
  • ส่วนต่อประสานกับฐานข้อมูล SQL เพื่อดึงและแสดงระเบียน
  • Windowing ที่มีความยืดหยุ่นและชุดเครื่องมือสำหรับการสร้างการแสดงผลที่ยืดหยุ่นบน HUD ไคลเอ็นต์ (โดยใช้แผนภูมิแท่ง, กล่องข้อความ, กล่องภาพ, เมนูบริบท, หน้าต่างที่ปรับขนาดได้เป็นต้น)
  • จรวดช้า :)

โดยส่วนตัวแล้วฉันพบว่าเครื่องยนต์เป็นการผสมผสานที่ยอดเยี่ยมของสิ่งที่ชาญฉลาดที่ทำในรูปแบบที่โง่เง่าทำสิ่งที่โง่ในรูปแบบที่ชาญฉลาดและทำสิ่งที่ชาญฉลาดด้วยวิธีที่ชาญฉลาดจริงๆ มันเป็นตัวอย่างที่ดีของวิธีการมีโมดุลและการออกแบบโครงสร้างที่ดีในโครงการ C ขนาดกลาง

สุดท้ายอย่ารู้สึกแย่ถ้าใช้เวลาสักพักก็จะเคลิ้มไป ฉันอาจต้องใช้เวลาหนึ่งเดือนกว่าจะได้รู้ว่าจะหาสิ่งที่ฉันกำลังมองหาในเครื่องยนต์; หากสิ่งอื่นล้มเหลวให้เริ่มต้นที่แอปพลิเคชั่น init และเพียงแค่เจาะลึกเข้าไปในฟังก์ชั่นโดยแสดงความคิดเห็นด้วยตัวคุณเองว่าเป็นป้ายบอกทาง จอแสดงผลของฉันครอบคลุมอยู่ในสีชมพูโพสต์ - อิทโน้ตด้วยชื่อฟังก์ชันหมายเลขบรรทัดและคำอธิบายสั้น ๆ เกี่ยวกับสิ่งที่พวกเขาทำ



1

อย่างแน่นอน

http://en.wikipedia.org/wiki/Quake_engineเป็นภาพรวมที่ดีว่ามีอะไรบ้าง แต่คุณสามารถดูรายละเอียดสถาปัตยกรรมได้อย่างรวดเร็วผ่านการอ้างอิง

ฉันขอแนะนำหนังสือสองเล่มเกี่ยวกับสถาปัตยกรรมเอ็นจิ้นเกมซึ่งอาจสอดคล้องกับสิ่งที่คุณกำลังมองหามากขึ้น ในขณะที่ไม่เจาะจง Quake พวกเขาเข้าไปในรายละเอียดของการออกแบบเครื่องยนต์และวิ่งขนานไปกับแง่มุมต่าง ๆ ของเครื่องยนต์ Quake:

  • สถาปัตยกรรมโปรแกรมเกม 3D - 978-0122290640
  • การเขียนโปรแกรมเกม 3D - 978-1592003518

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.