ספריית Ruby ליצירה והצגת גרפיקה תלת-ממדית ופיתוח משחקים
ספריית Ruby קוד פתוח לתלת-ממד ליצירה והצגת גרפיקה תלת-ממדית וסצנות בפיתוח משחקים, סימולציות ורובוטיקה באמצעות API חינמי של Ruby.
מהי ספריית Ray ?
אם אתה מפתח Ruby עם אהבה ל-DSL אלגנטיים וטעם לגרפיקה מבוססת מסוף, ספריית Ray היא ג'ם קוד פתוח שכדאי לבדוק. נוצרה על ידי Mon-Ouie, Ray מציעה שפה ספציפית לתחום (DSL) לבניית גרפיקה יפה של ASCII ו-ANSI ישירות במסוף שלך. בניגוד לספריות גרפיקה כבדות, Ray מדגישה פשטות והבעה, ומאפשרת לך להגדיר ויזואליות עם קוד מינימלי. הספרייה תומכת בפעולות קרן דו-ממדיות ותלת-ממדיות, מה שהופך אותה למגוונת עבור סוגי יישומים שונים. בואו נצלול לתוך כמה מהתכונות הספציפיות שהספרייה מציעה. היא תומכת בהקמת משחק/חלון מפושט (DSL), יצירת וניהול סצנות, ציור צורות 2D נפוצות וטקסט, יצירת צורות גאומטריות בסיסיות, יצירת מתמטיקה וקטורית, תמיכה במטריצות שינוי מותאמות, תמיכה ברינדור מחוץ למסך ועוד.
Ray הוא DSL של Ruby לציור גרפיקה במסוף, המאפשר לך להגדיר צורות, צבעים, גרדיאנטים ופריסות באמצעות תחביר דקלרטיבי. הרעיון המרכזי הוא להתייחס למסוף כקנבס ולבנות אלמנטים גרפיים מובנים שניתן להרכיב כמו ווידג'טים של ממשק משתמש. חשבו על זה כמו HTML ו‑CSS עבור המסוף שלכם. הוא מנצל קודי escape של ANSI ותווי Unicode כדי להציג ויזואליות מורכבת. Ray יכול להציג גרפיקה באמצעות תווי Unicode וסמלי ציור קופסאות, שהם חיוניים ליצירת פריסות חדות ונקיות בסביבות מסוף. Ray הוא ספרייה קטנה ונעימה של Ruby הלוכדת את רוח המינימליזם והביטוי. למרות שהיא לא מחליפה מסגרות TUI (Terminal User Interface) מלאות כמו curses או tty, היא מצטיינת בתכנון מהיר של פריסות, עיצוב פלט יפה, ומספקת דרך מהנה, באידיאומטיקה של Ruby, לבנות ויזואליות במסוף.
התחלה עם Ray
הדרך הקלה ביותר להתקנת גרסת ה‑stable של Ray היא באמצעות RubyGem. אנא השתמשו בפקודה הבאה להתקנה חלקה.
התקן את Ray באמצעות RubyGem
gem 'ray', github: 'Mon-Ouie/ray' אתה יכול להוריד את הספרייה המשותפת המורכבת מ-GitHub מאגר.
הדמיה בסיסית של Raycasting באמצעות ספריית Ruby
ספריית Ray Ruby מביאה מתמטיקה תלת‑ממדית חזקה ויכולות רייקאסטינג למפתחי Ruby בחבילה אלגנטית. רייקאסטינג הוא חיוני לזיהוי חיתוכים בין קרניים לעצמים במרחב דו‑ממדי או תלת‑ממדי. ספריית Ray מספקת דרך פשוטה לשגר קרניים ולקבל נתוני התנגשות. הנה דוגמה מאוד שימושית שמדגימה כיצד לבצע ויזואליזציה בסיסית של רייקאסטינג באמצעות ספריית Ruby.
איך לבצע ויזואליזציה בסיסית של Raycasting באמצעות Ruby?
require 'ray'
require 'ruby2d'
# Set up 2D window
set title: "Raycasting Demo", width: 800, height: 600
# Create a ray from center pointing at mouse
ray = Ray::Ray.new(origin: [400, 300], direction: [1, 0])
# Target circle
target = Circle.new(x: 500, y: 300, radius: 30, color: 'red')
update do
# Update ray direction toward mouse
ray.direction = [Window.mouse_x - 400, Window.mouse_y - 300].normalize
# Check intersection
if ray.intersect_circle(target.position, target.radius)
target.color = 'lime'
else
target.color = 'red'
end
end
show
חישובי השתקפות ושבירה
ספריית Ray בקוד פתוח סיפקה תמיכה מלאה בחישובי השתקפות ושבירה בתוך יישומי Ruby. הספרייה כוללת פונקציות לחישוב השתקפויות ושבירות של קרניים, המשמשות לאפקטי תאורה, מראות וסימולציות אופטיות. הנה דוגמה פשוטה שמדגימה למפתחי תוכנה כיצד לחשב השתקפות של קרן באמצעות ספריית Ruby תלת‑ממדית.
איך לחשב השתקפות קרן באמצעות ספריית Ruby??
# Incident ray (light direction)
incident = Ray::Vector[1, -1, 0].normalize
# Surface normal
normal = [0, 1, 0]
# Calculate reflection
reflected = incident.reflect(normal)
puts "Reflected direction: #{reflected}"
יישור ומיקום
ספריית הקוד הפתוח 3D Ray סיפקה תמיכה מלאה בהתאמת אלמנטים דו‑ממדיים ותלת‑ממדיים בתוך יישומי Ruby. היא מציעה שיטות פשוטות ליישור ומיקום אלמנטים: שיטות align, padding ו‑margin נותנות למפתחים שליטה על הפריסה, בדומה למודלים של תיבות CSS. הדוגמה הפשוטה הבאה מראה כיצד לקבל מספר שורות, מיושרות לשני קצות הקנבס באמצעות פקודות Ruby.
איך לקבל קווים מרובים, מיושרים לשני קצות הקנבס באמצעות API של Ruby?
Ray.draw(width: 40, height: 10) do
text "Left aligned" do
align :left
end
text "Right aligned" do
align :right
end
end
ציור קופסאות עם גבולות Unicode
ספריית Ray 3D מקלה על מפתחי תוכנה לצייר תיבות עם ציור Unicode בתוך יישומי Ruby. תיבות משפרות את מבנה הפלט של המסוף שלך. Ray משתמשת בתווי ציור תיבות Unicode ליצירת גבולות אלגנטיים. שיטת box עוטפת את התוכן שלך בגבול מסודר באמצעות תווים כגון ┌ ─ ┐ ו‑└ ┘ כפי שמוצג בדוגמת הקוד הבאה.
איך לעטוף תוכן בתיבה מסודרת עם גבול באמצעות ספריית Ruby?
Ray.draw(width: 50, height: 8) do
box do
text "Welcome to Ray UI!" do
align :center
end
end
end