کتابخانه روبی برای ایجاد و رندر گرافیکهای 3D و توسعه بازیها
کتابخانه روبی 3D منبع باز برای ایجاد و رندر گرافیکها و صحنههای 3D در توسعه بازیها، شبیهسازیها و رباتیک با استفاده از رابط برنامهنویسی رایگان روبی.
کتابخانه Ray چیست؟
اگر شما یک توسعهدهنده Ruby هستید که به DSLهای زیبا علاقهمندید و طعم گرافیکهای مبتنی بر ترمینال را دارید، کتابخانه Ray یک جواهر منبع باز است که ارزش بررسی دارد. این کتابخانه توسط Mon-Ouie ایجاد شده و یک زبان دامنه‑خاص (DSL) برای ساخت گرافیکهای زیبا به صورت ASCII و ANSI مستقیماً در ترمینال شما ارائه میدهد. برخلاف کتابخانههای گرافیکی سنگین، Ray بر سادگی و بیانپذیری تأکید دارد و به شما امکان میدهد تا با حداقل کد، تصاویر را تعریف کنید. این کتابخانه از عملیات پرتوهای دو‑بعدی و سه‑بعدی پشتیبانی میکند و برای انواع مختلف برنامهها انعطافپذیر است. بیایید به برخی از ویژگیهای خاص این کتابخانه نگاهی بیندازیم. این کتابخانه از تنظیم ساده بازی/پنجره (DSL)، ایجاد و مدیریت صحنهها، رسم اشکال دو‑بعدی رایج و متن، ایجاد اشکال هندسی پایه، ساخت ریاضیات برداری، پشتیبانی از ماتریسهای تبدیل سفارشی، رندرینگ خارج از صفحه و غیره پشتیبانی میکند.
Ray یک DSL در Ruby برای رسم گرافیکهای ترمینال است که به شما امکان تعریف اشکال، رنگها، گرادیانها و چیدمانها را با استفاده از سینتکس اعلامی میدهد. ایده اصلی این است که ترمینال را بهعنوان یک بوم در نظر بگیرید و عناصر گرافیکی ساختار یافتهای بسازید که میتوانند مانند ویجتهای UI ترکیب شوند. میتوانید آن را مانند HTML و CSS برای ترمینال خود تصور کنید. این کتابخانه از کدهای Escape ANSI و کاراکترهای Unicode برای رندر کردن تصاویر پیچیده بهره میبرد. Ray میتواند گرافیکها را با استفاده از کاراکترهای Unicode و نمادهای کشیدن جعبه (box‑drawing) رندر کند، که برای ایجاد چیدمانهای تیز و تمیز در محیطهای ترمینال ضروری هستند. Ray یک کتابخانهٔ کوچک و دلپذیر Ruby است که روح مینیمالیسم و بیانگری را بهدست میآورد. اگرچه ممکن است جایگزین فریمورکهای کامل TUI (رابط کاربری ترمینال) مانند curses یا tty نشود، اما در نمونهسازی سریع چیدمان، قالببندی خروجی زیبا و ارائهٔ روشی سرگرمکننده و متناسب با Ruby برای ساخت تصاویر ترمینال برتری دارد.
شروع کار با Ray
سادهترین راه برای نصب نسخهٔ پایدار Ray استفاده از RubyGem است. لطفاً برای نصب روان، دستور زیر را اجرا کنید.
نصب Ray از طریق RubyGem
gem 'ray', github: 'Mon-Ouie/ray' میتوانید کتابخانهٔ مشترک کامپایلشده را از مخزن گیتهاب دانلود کنید.
نمایش پایه Raycasting از طریق کتابخانه Ruby
کتابخانهٔ Ray برای روبی، ریاضیات قدرتمند سهبعدی و قابلیتهای ریکستینگ را در بستهای زیبا به توسعهدهندگان روبی ارائه میدهد. ریکستینگ برای تشخیص تقاطعهای بین پرتوها و اشیاء در فضای دو‑بعدی یا سهبعدی ضروری است. کتابخانهٔ Ray روشی ساده برای پرتاب پرتوها و بازیابی دادههای برخورد فراهم میکند. در اینجا یک مثال بسیار مفید آورده شده است که نشان میدهد چگونه میتوان تجسم پایهٔ ریکستینگ را با استفاده از کتابخانهٔ روبی انجام داد.
چگونه تجسم پایه 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 محاسبه کنیم؟؟
# 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
رسم جعبه با حاشیههای یونیکد
کتابخانه Ray 3D کار را برای توسعهدهندگان نرمافزار آسان میکند تا جعبهها را با رسم یونیکد در برنامههای Ruby ترسیم کنند. جعبهها خروجی ترمینال شما را ساختارمندتر میسازند. Ray از کاراکترهای رسم جعبه یونیکد برای ایجاد حاشیههای زیبا استفاده میکند. متد box محتوای شما را در یک حاشیه منظم با استفاده از کاراکترهایی مانند ┌ ─ ┐ و └ ┘ میپیچد، همانطور که در مثال کد زیر نشان داده شده است.
چگونه محتوا را در یک جعبه مرتب با حاشیه با استفاده از کتابخانه Ruby بپیچیم؟
Ray.draw(width: 50, height: 8) do
box do
text "Welcome to Ray UI!" do
align :center
end
end
end