PaintCAD для Windows - журнал разработки

Аватара пользователя
blackstrip
Админ
Сообщения: 1349
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: PaintCAD для Windows - журнал разработки

Сообщение blackstrip » Пн июл 13, 2026 8:55 pm

Доработка команды каркасного режима

Добавим в команду RW (render wireframe) толщину линий чтобы даже на больших разрешениях экрана их можно было разглядеть:

RW - включить/выключить каркасный рендер
Синтаксис: RW состояние (0/1), толщина

Толщина = 1:

Изображение

Толщина = 2:

Изображение

Толщина = 10:

Изображение

OpenGL рисует линии каркаса какими-то 3D-плоскостями, при больших толщинах концы линий пересекаются друг с другом и видно как они устроены)

Толщина больше 10 на моей Nvidia GeForce GTX 1650 не устанавливается. Гугл говорит об этом что:
По стандарту видеокарта и драйвер сами определяют максимальную ширину линии, и часто этот лимит (особенно для широких линий без сглаживания) равен всего 10 или даже 1 пикселю.
Ну тогда ладно.

Команда установки/сдвига опорной точки объекта

Чтобы объект помещать в нужное место пространства, вращать, масштабировать - нужно бы сначала указать его опорную точку. Тогда можно будет его вращать относительно этой точки, или масштабировать. Или, например, установить опорную точку на угол кубика, и дальше при перемещении кубика будет понятно что в указанные координаты мы перемещаем именно этот угол (в который установлена опорная точка).

Добавим команду установки или сдвига опорной точки:

OA - задать/сдвинуть опорную точку объекта (object anchor)
Синтаксис: OA #объект,x,y,z,отн(0/1)

Для каждого объекта помимо номеров треугольников, из которых он состоит, будет храниться такая опорная точка из трех координат X, Y, Z. По умолчанию для нового объекта, создаваемого командой O #объект, #треугольник1, #треугольник2, #треугольник3... она устанавливается в 0,0,0. Потом ее можно вручную поставить куда надо командой OA.

Установка опорной точки объекта

Например, поставим опорную точку в основании кубика по центру. Все его углы от точки 0,0,0 отдалены по XYZ на 1, а ось Y идет снизу вверх, поэтому опорная точка в основании по центру будет 0,-1,0. Флажок "отн(0/1)" поставим в 0 - значит мы просто указываем координаты, в которые нужно поставить опорную точку. В рендере от этого ничего не изменится, но Hippo запомнит эту точку и потом будет все делать с объектом относительно нее:

Изображение

Сдвиг опорной точки объекта

Иногда нужно сделать, например, поворот объекта, постепенно смещая центр поворота, чтобы объект болтался по необычной траектории.

Если поставить в команде OA флажок "отн(0/1)" в 1 - то указанные в команде координаты будут прибавляться к текущему положению опорной точки.

До этого (выше в разделе про добавление команды OA) мы установили опорную точку на дно кубика в середину (0, -1, 0). Теперь сдвинем ее на потолок кубика тоже в середину. Середина потолка это 0,1,0, поэтому точку надо сдвинуть на 2 по Y. Визуально это тоже, пока что, ничего не меняет в рендере, но после OA 1,0,2,0,1 опорная точка из (0,-1,0) сдвигается в (0+0,-1+2,0+0), т.е. в (0,1,0):

Изображение

Доработка команда создания новой сцены

Раньше была просто команда N без параметров. Но т.к. мы будем рендерить картинки или даже анимации, то надо где-то указывать размер растра. Впишем его эту команду:

N - новая пустая сцена (new empty scene)
Синтаксис: N ширина,высота

Т.к. рендерируемый растр может быть больше окна, и даже больше экрана, то вставим его в контейнер с полосами прокрутки. Получаем, например, при размере 300x250 пикселей:

Изображение

А если указать 600x500, то тоже рендерируется, но полученная картинка становится больше контейнера и появляются полосы прокрутки (прямо как в главном окне при рисовании большого рисунка):

Изображение

Можно еще развернуть окно на весь экран, тогда контейнер станет больше и можно просматривать без полос прокрутки бОльшие размеры сцен. Но для рендера FullHD 1920x1080, например, все равно контейнер нужен чтобы все уместилось на окне.

И теперь можно в начало скрипта поставить две команды - например, указать в них два размера растра с теми же пропорциями (первый это второй, поделенный на 5 по ширине и высоте):

Код: Выделить всё

N 384,216
N 1920,1080
И при построении сцены и расстановке объектов, проверке анимации и т.п. делать так:

Код: Выделить всё

N 384,216
//N 1920,1080
и будет рендерироваться маленький растр для предпросмотра. И даже маленькие кадры анимации для сборки мини-анимации/видео чтобы посмотреть все ли ок.

А потом, когда все готово, и надо рендерировать финальную красивую версию анимации/видео - делать так:

Код: Выделить всё

//N 384,216
N 1920,1080
и рендерировать полноразмерную версию =)

Ответить

Вернуться в «Разработка PC4W»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость