Ruby-библиотека для создания и рендеринга 3D графики и разработки игр
Открытая Ruby 3D библиотека для создания и рендеринга 3D графики и сцен в разработке игр, симуляциях и робототехнике с помощью бесплатного Ruby API.
Что такое Ray Library?
Если вы разработчик Ruby, любящий элегантные DSL и интересующийся графикой в терминале, библиотека Ray — это открытый гем, который стоит изучить. Созданная Mon-Ouie, Ray предлагает предметно-ориентированный язык (DSL) для создания красивой ASCII и ANSI графики прямо в вашем терминале. В отличие от более тяжёлых графических библиотек, Ray делает упор на простоту и выразительность, позволяя определять визуальные элементы с минимальным количеством кода. Библиотека поддерживает как 2D, так и 3D операции с лучами, что делает её универсальной для различных типов приложений. Давайте рассмотрим некоторые конкретные возможности, предлагаемые библиотекой. Она поддерживает упрощённую настройку игры/окна (DSL), создание и управление сценами, рисование обычных 2D фигур и текста, создание базовых геометрических фигур, построение векторной математики, поддержку пользовательских матриц преобразования, рендеринг вне экрана и многое другое.
Ray — это DSL на Ruby для рисования графики в терминале, позволяющая определять формы, цвета, градиенты и макеты с помощью декларативного синтаксиса. Основная идея состоит в том, чтобы рассматривать терминал как холст и создавать структурированные графические элементы, которые можно комбинировать как UI‑виджеты. Представьте себе HTML и CSS для вашего терминала. Ray использует ANSI‑коды и символы Unicode для отображения сложных визуальных элементов. Ray может рендерить графику с помощью символов Unicode и символов рисования рамок, что необходимо для создания чётких и чистых макетов в терминальных средах. Ray — это приятная небольшая библиотека Ruby, воплощающая дух минимализма и выразительности. Хотя она не заменит полноценные фреймворки TUI (Terminal User Interface), такие как curses или tty, Ray отлично подходит для быстрого прототипирования макетов, красивого форматирования вывода и предоставления весёлого, идиоматичного Ruby‑подхода к построению терминальной визуализации.
Начало работы с Ray
Самый простой способ установить стабильную версию Ray — использовать RubyGem. Пожалуйста, используйте следующую команду для беспроблемной установки.
Установите Ray через RubyGem
gem 'ray', github: 'Mon-Ouie/ray' Вы можете скачать скомпилированную общую библиотеку из репозитория Github.
Базовая визуализация лучевого трассирования через Ruby Library
Библиотека Ray для Ruby предоставляет мощные возможности 3D‑математики и лучевого трассирования разработчикам Ruby в элегантном пакете. Лучевое трассирование необходимо для обнаружения пересечений лучей и объектов в 2D‑ или 3D‑пространстве. Библиотека Ray предлагает простой способ бросать лучи и получать данные о столкновениях. Ниже приведён очень полезный пример, демонстрирующий, как выполнить базовую визуализацию лучевого трассирования с использованием Ruby‑библиотеки.
Как выполнить базовую визуализацию лучевого трассирования с использованием 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. Библиотека включает функции вычисления отражения и преломления лучей, которые полезны для световых эффектов, зеркал и оптических симуляций. Ниже приведён простой пример, показывающий, как разработчики могут рассчитывать отражение лучей с использованием 3D‑библиотеки 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 предоставляет полную поддержку выравнивания 2D и 3D элементов внутри Ruby‑приложений. Она предлагает простые методы для выравнивания и позиционирования элементов: методы align, padding и margin дают разработчикам контроль над макетом, аналогично CSS‑моделям коробок. Ниже приведён простой пример, показывающий, как получить несколько строк, выровненных по обоим краям холста с помощью команд Ruby.
Как получить несколько строк, выровненных по обеим сторонам холста с помощью Ruby API?
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