คุณสามารถอ่าน readme เป็นภาษาอังกฤษได้โดยคลิกที่นี่
Minirt เป็นโครงการที่แนะนำให้คุณรู้จักกับโลกที่น่าหลงใหลของ Raytracing ด้วยโครงการนี้คุณจะได้เรียนรู้ที่จะแสดงภาพที่สร้างโดยคอมพิวเตอร์โดยใช้เทคนิคการส่งแสงพื้นฐาน ค้นพบว่าภาพที่เหมือนจริงถูกสร้างขึ้นตั้งแต่เริ่มต้น!
นี่คือภาพบางส่วนที่แสดงด้วย minirt :
![]() | ![]() |
|---|---|
![]() | ![]() |
ภาพเหล่านี้แสดงสิ่งที่คุณสามารถทำได้ด้วยโครงการและให้คุณทราบว่าผลลัพธ์สุดท้ายจะเป็นอย่างไร!
Minirt เป็นโครงการ raytracing ที่อนุญาตให้คุณ:
อ่านต่อเพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการกำหนดค่าและใช้ minirt รวมถึงวิธีกำหนดแผนที่สูตรสี่แยกและวิธีการควบคุมกล้องและแป้นพิมพ์
แผนที่กำหนดองค์ประกอบที่จะปรากฏในภาพของคุณ ที่นี่เราแสดงวิธีกำหนดค่าองค์ประกอบแต่ละประเภท:
นี่คือตัวอย่างของวิธีการกำหนดองค์ประกอบบนแผนที่:
A 0.3 255,255,255 (Luz de ambiente: intensidad, color)
C 0,1,-10 0,0,1 70 (Cámara: posición, vector de dirección, FOV)
L 0,10,-10 0.7 255,255,255 (Luz: posición, intensidad, color)
pl 0,0,0 0,1,0 100,100,100 (Plano: posición, vector normal, color)
sp 0,0,0 5 255,0,10 (Esfera: posición, radio, color)
cy 4,0,0 1,1,0 4 6 10,0,255 (Cilindro: posición, radio, altura, color)
กล้อง (c)
แสงสิ่งแวดล้อม (a)
แสง (l)
แผน (PL)
ทรงกลม (SP)
กระบอกสูบ (CY)
สูตรของทรงกลม 3D คือ:
[(x - h)^2 + (y - k)^2 + (z - l)^2 = r^2]
ที่ไหน:
สูตรนี้อธิบายคะแนนทั้งหมด ((x, y, z)) ที่อยู่ในระยะไกล (r) ของศูนย์กลาง ((h, k, l))
ภาพของทรงกลม:
ระนาบ 3 มิติถูกแสดงเป็น: [ax + by + cz + d = 0] โดยที่ ((a, b, c)) เป็นเวกเตอร์ปกติไปยังระนาบและ (d) คือระยะทางจากแหล่งกำเนิด
แผนภาพ: 
สำหรับกระบอกสูบ:
รูปทรงกระบอก: กระบอกสูบ
ในการแสดงภาพเราวาดรังสีจากกล้องผ่าน แต่ละพิกเซล จากนั้นเราตรวจสอบว่าสายฟ้าสี่แยกนั้นมีวัตถุในฉากหรือไม่ ที่นี่เราอธิบายว่ามันถูกคำนวณอย่างไร:
สำหรับทรงกลม:

สำหรับเครื่องบิน 3 มิติ:

สำหรับกระบอกสูบ:

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

ในโครงการเราใช้โครงสร้างข้อมูลหลายอย่างเพื่อจัดการข้อมูลฉากและการกำหนดค่ากล้อง ที่นี่เราอธิบายว่าพวกเขาจัดระเบียบอย่างไร:
t_info และ t_data ) t_info : โครงสร้างนี้เก็บข้อมูลเกี่ยวกับปริมาณขององค์ประกอบแต่ละประเภทในฉาก:
ambient_light : ปริมาณไฟสิ่งแวดล้อมcamera : จำนวนกล้องlights : ปริมาณของไฟplanes : จำนวนแผนspheres : จำนวนทรงกลมcylinders : จำนวนกระบอกสูบ t_data : โครงสร้างนี้มีข้อมูลทั้งหมดเกี่ยวกับภาพที่จะแสดงผล:
width และ height : ขนาดภาพ (กว้างและสูง)info : โครงสร้าง t_info รายละเอียดจำนวนของวัตถุแต่ละประเภทในฉากline : นับบรรทัดที่ประมวลผลlights , planes , spheres , cylinders : รายการที่มีวัตถุในฉาก รายการเหล่านี้เก็บข้อมูลของไฟแผนทรงกลมและกระบอกสูบตามลำดับcamera : ข้อมูลเกี่ยวกับกล้องambient_light : ข้อมูลเกี่ยวกับแสงสิ่งแวดล้อมt_camera )กล้องมีหน้าที่กำหนดมุมมองที่แสดงภาพ โครงสร้างของมันรวมถึง:
fov : Field of Vision (FOV) ของกล้องซึ่งกำหนดจำนวนที่สามารถมองเห็นได้จากกล้อง คุณค่าที่มากขึ้นหมายถึงการมองเห็นที่กว้างขึ้นcenter : เวกเตอร์ที่แสดงถึงตำแหน่งของศูนย์กลางของกล้องในอวกาศeuler : เวกเตอร์ที่มีมุมของออยเลอร์ใช้เพื่อแนะนำกล้องในพื้นที่ 3 มิติq : quaternion ที่ใช้เพื่อแสดงการหมุนของกล้อง 3 มิติ Quaternions มีประโยชน์ในการหลีกเลี่ยงปัญหาเกี่ยวกับการแก้ไขและการหมุน 3D ในโครงการคีย์บอร์ดจะอนุญาตให้กล้องควบคุมและปรับมุมมองของฉาก นี่คือคำอธิบายโดยละเอียดว่าแต่ละคีย์ทำงานอย่างไรและทำไมเราถึงใช้เทคนิคบางอย่างสำหรับการจัดการกล้อง
W Keys, A, S, D: พวกเขาใช้เพื่อย้ายกล้องในทิศทางที่แตกต่างกัน:
ปุ่มเหล่านี้ปรับเปลี่ยน ศูนย์กลาง ของกล้องซึ่งเป็นจุดที่กล้องกำลังดูฉาก การย้ายศูนย์กลางของกล้องจะเปลี่ยนตำแหน่งของกล้องในอวกาศโดยไม่หมุน
Space Key: ยกระดับกล้องขึ้น
Key Shift: ลดกล้องลง
ปุ่มลูกศรด้านบน (up_k) และด้านล่าง (down_k): พวกเขาปรับความเอียงในแนวตั้งของกล้อง:
ปุ่มลูกศรซ้าย (ซ้าย _k) และขวา (ขวา _k): พวกเขาปรับการหมุนแนวนอนของกล้อง:
คีย์เหล่านี้ปรับเปลี่ยน มุมของออยเลอร์ ซึ่งเป็นมุมที่กำหนดว่ากล้องนั้นมุ่งเน้นไปที่อวกาศอย่างไร มุมของออยเลอร์ใช้ในการปรับความเอียงและการหมุนของกล้องอย่างง่าย
มุมอคติ
โครงการนี้ได้รับการออกแบบให้เข้ากันได้กับทั้ง Linux และ MacOS และการกำหนดค่าเฉพาะได้ถูกนำไปใช้เพื่อให้แน่ใจว่าทำงานได้โดยไม่มีปัญหาในระบบปฏิบัติการทั้งสอง
ในโครงการที่จัดการกราฟิกและรายการของผู้ใช้เช่นคีย์เป็นเรื่องปกติสำหรับรหัสที่เกี่ยวข้องกับแต่ละคีย์จะแตกต่างกันไปตามระบบปฏิบัติการ เพื่อจัดการกับความแตกต่างเหล่านี้:
ตัวอย่างเช่น:
โครงการใช้ Minilibx (MLX) ซึ่งเป็นไลบรารีแสงสำหรับการเขียนโปรแกรมกราฟิก 2D ออกแบบมาเป็นพิเศษสำหรับสภาพแวดล้อม UNIX เช่น Linux และ MacOS อย่างไรก็ตามเนื่องจากความแตกต่างระหว่างระบบปฏิบัติการจึงจำเป็นต้องกำหนดค่าไลบรารีและเส้นทางของสิ่งเหล่านี้อย่างเหมาะสมเพื่อให้โครงการรวบรวมอย่างถูกต้องในทั้งสองระบบ
การตรวจจับระบบปฏิบัติการ :
การกำหนดค่าห้องสมุด :
การรวบรวมแบบปรับตัว :
วิธีการนี้ทำให้มั่นใจได้ว่าโครงการไม่เพียง แต่พกพาระหว่างระบบปฏิบัติการที่แตกต่างกัน แต่ยังยังคงปรับให้เหมาะสมและเข้ากันได้กับลักษณะเฉพาะของแต่ละสภาพแวดล้อม
เพื่อแสดงให้เห็นว่าโครงการทำงานอย่างไรในทางปฏิบัติเราได้เตรียมชุดวิดีโอที่แสดงแง่มุมต่าง ๆ และฟังก์ชันการทำงานของโปรแกรมในการดำเนินการ วิดีโอเหล่านี้ปก:
วิดีโอคือ x4 ที่ความละเอียด 800x400
คลิปเหล่านี้จะช่วยให้คุณมีวิสัยทัศน์ที่ชัดเจนเกี่ยวกับวิธีการใช้โปรแกรมและสิ่งที่คุณคาดหวังในแง่ของประสิทธิภาพและการสร้างภาพข้อมูล
หากคุณต้องการมีส่วนร่วมในโครงการ:
ที่นี่
ที่นี่
◦อีเมล ffornes-: [email protected]
◦อีเมล gmacias-: [email protected]