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

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

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

Сообщение blackstrip » Ср дек 21, 2022 10:17 pm

Бета 1.5.2.1351 доступна по ссылке http://blackstrip.ru/paintcad.exe
(а также через меню "Помощь" - "Проверить обновления")

Изменения:

Новые функции:
- просмотр мозаики: в меню "Эффекты (E)" добавлен пункт "Залить выделение картинкой", позволяющий указать картинку с элементом из папки через стандартный диалог открытия файлов с предпросмотром картинок

Дополнительно к соседней функции заливки выделенной области элементом мозаики с определенным номером - эта функция заливает выделенную область номером по имени выбранного файла. Можно сразу увидеть все элементы мозаики в папке, сколько их штук и даже что внутри каждого (если у вас современная Windows с отображением эскизов вместо значков файлов).

Изображение

В частности, в Windows 10 в диалоговом окне вместо значков видны картинки ("эскизы"). При выборе картинки - ее увеличенное изображение появится справа в диалоговом окне в области предпросмотра. Чтобы посмотреть выбранную картинку в масштабе 1:1 можно нажать на кнопку с листком и лупой над областью - тогда появится окно "preview".

Изображение

В Windows 98 эскизов еще не придумали. При выборе картинки как и в Windows 10 справа видно ее увеличенное изображение, по кнопке с листком и лупой - изображение без масштаба (1:1).

Изображение

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

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

Сообщение blackstrip » Пн янв 23, 2023 1:27 am

Выпущена версия 1.5.2.1352

Скачать:
По прямой ссылке (14,2 Мбайт)
RAR: http://blackstrip.ru/pcw.rar
ZIP: http://blackstrip.ru/pcw.zip
SFX-EXE: http://blackstrip.ru/pcw.exe

Изображение

Основные изменения:

1) Редактор мозаики теперь отображает номер элемента мозаики под курсором, меняет размер отображаемых номеров элементов мозаики в зависимости от размеров самих элементов (чтоб номер влезал в мелкие элементы), а также показывает курсор и выделение даже при выключенных деталях.

Изображение

Также теперь можно заливать выделенный фрагмент мозаики указывая картинку из папки (с предпросмотром всех возможных картинок), а не просто по номеру картинки или перебором всех номеров по Z/X-клавишам.

Изображение

2) В программируемый редактор картинок/анимаций Scriptaint добавлен вывод эмодзи-значков шрифтом Segoe UI Emoji. Пример вывода эмодзи добавлен в стандартный шаблон нового скрипта картинки.

Изображение

3) Генератор ASCII-артов инструмента Текст дополнен новым методом "Черно-белый + Зернистый 5-цветный", смешивающим 5-цветную псевдографику и черно-белые точки в зависимости от перепада яркостей пикселей на исходной картинке.




4) Генератор мелодий Muzz теперь научился сочинять песни в четырех жанрах (рок, поп, хип-хоп и регги), а также менять громкость нот в партиях мелодии, аккомпанемента и барабанов. Добавлено много вариантов аккомпанемента (включая простые на 1-2 нотах), а также много вариантов барабанного боя для новых жанров. Сохраняемые в MID-файлы мелодии теперь проигрываются в корректном темпе на Android-устройствах.

Изображение

Примеры новых сгенерированных мелодий:

Рок
http://blackstrip.ru/tmp/pcw152/rockmus1.mid
http://blackstrip.ru/tmp/pcw152/rockmus2.mid
http://blackstrip.ru/tmp/pcw152/rockmus3.mid
http://blackstrip.ru/tmp/pcw152/rockmus4.mid
http://blackstrip.ru/tmp/pcw152/rockmus5.mid
http://blackstrip.ru/tmp/pcw152/rockmus6.mid

Поп
http://blackstrip.ru/tmp/pcw152/popmus1.mid
http://blackstrip.ru/tmp/pcw152/popmus2.mid
http://blackstrip.ru/tmp/pcw152/popmus3.mid
http://blackstrip.ru/tmp/pcw152/popmus4.mid
http://blackstrip.ru/tmp/pcw152/popmus5.mid
http://blackstrip.ru/tmp/pcw152/popmus6.mid

Хип-хоп
http://blackstrip.ru/tmp/pcw152/hiphop1.mid
http://blackstrip.ru/tmp/pcw152/hiphop2.mid
http://blackstrip.ru/tmp/pcw152/hiphop3.mid
http://blackstrip.ru/tmp/pcw152/hiphop4.mid
http://blackstrip.ru/tmp/pcw152/hiphop5.mid
http://blackstrip.ru/tmp/pcw152/hiphop6.mid

Регги
http://blackstrip.ru/tmp/pcw152/reggae1.mid
http://blackstrip.ru/tmp/pcw152/reggae2.mid
http://blackstrip.ru/tmp/pcw152/reggae3.mid
http://blackstrip.ru/tmp/pcw152/reggae4.mid
http://blackstrip.ru/tmp/pcw152/reggae5.mid
http://blackstrip.ru/tmp/pcw152/reggae6.mid

5) Мини-браузер Bro и IRC-чат Retro теперь могут отображаться не только на полный экран, но и в окошке. А запуск паинткада с ключами -bro или -retro показывает только окошко браузера/чата, не показывая другие окна паинткада. При закрытии такого окошка весь паинткад автоматически закрывается (т.е. можно запустить паинткад с ключом -bro или -retro как будто отдельную программу-чат или программу-браузер).

Изображение

Полное описание изменений:
РазвернутьПоказать
Интерфейс:
- окно "О программе": добавлены кнопки перехода на форум PaintCAD 4Windows, telegram канал, youtube канал, facebook группу и openvk группу BlackStrip Studios с новостями и видео о компьютерном/мобильном паинткаде и другом софте/играх
- главное окно: при изменении размера окна панель статуса теперь растягивает пятую ячейку
- просмотр мозаики: при размере элементов мозаики меньше 20 пикселей по высоте размер шрифта номера элемента уменьшается (но не ниже 5)
- просмотр мозаики: курсор теперь виден даже при выключенных "Деталях (D)"
- просмотр мозаики: выделение теперь видно даже при выключенных "Деталях (D)"

Новые функции:
- меню в окне инструмента "Текст": в генератор ASCII-артов добавлен новый метод генерации "Черно-белый + Зернистый 5-цветный", использующий "Черно-белый 2-цветный" метод генерации на резких границах и "Зернистый 5-цветный" метод на плавных границах рисунка
- Scriptaint: в шаблон скрипта "DIV (пример картинки)" добавлены две строки с выводом цветных эмодзи-значков
- в меню "Настройки": добавлено подменю "Bro/Retro" с настройками браузера Bro и IRC-чата Retro
- в меню "Настройки"-"Bro/Retro" перемещены настройки браузера Bro из Общих настроек
- в меню "Настройки"-"Bro/Retro": добавлена опция "Полноэкранный режим Bro/Retro", по умолчанию выключена (браузер и чат показываются в отдельном модальном окне), при включении опции браузер Bro и чат Retro показываются на полный экран (как раньше). В оконном режиме окно можно растягивать/сжимать до любого размера
- браузер Bro и IRC-чат Retro: при запуске паинткада с ключами -bro или -retro - показывается только окно браузера/IRC-чата, а при его закрытии - паинткад также мгновенно закрывается. Теперь можно запустить паинткад ради только чата или браузера
- окно настройки IRC-чата Retro: добавлена новая опция "Режим экрана", позволяет выбрать оконный или полноэкранный режим работы (переключает автоматически соответствующую опцию в меню "Настройки"-"Bro/Retro"-"Полноэкранный режим Bro/Retro" перед показом окна IRC-чата)
- окно настройки IRC-чата Retro: выбор сервера по Ctrl+1 - Ctrl+6 теперь также автоматически выбирает порт под кодировку Windows-1251
- браузер Bro и IRC-чат Retro: теперь в оконном режиме клавишей F2 можно развернуть окно на весь экран и свернуть обратно (как в других окнах паинткада)
- настройки Muzz: базовый размер увеличен до 16, добавлены размеры мелодии с 9/16 до 16/16
- настройки Muzz: добавлен выбор жанра музыки: рок, поп, хип-хоп, регги или случайный выбор жанра, жанры отличаются наборами барабанных ритмов и диапазоном возможного темпа мелодии
- настройки Muzz: добавлена настройка "Варьируемый аккомпанемент" (выключена по умолчанию), случайным образом назначающая различные стили аккомпанемента вступлению, куплету и припеву генерируемых мелодий
- настройки Muzz: добавлена настройка "Варьируемая громкость" (включена по умолчанию), случайным образом назначающая различные громкости нотам мелодии, аккомпанемента и барабанов
- настройки Muzz: добавлен выбор устройства для вывода MIDI
- Muzz: в генерируемых мелодиях случайно выбирается распределение громкости барабаны<аккомпанемент<мелодия (барабаны тише всех, так было раньше) или мелодия<аккомпанемент<барабаны (барабаны самые громкие)
- главное окно: последняя ячейка панели статуса теперь отображает для Muzz не только настроение мелодии (мажор, норм, минор), но и жанр мелодии (рок, поп, хип-хоп, регги)
- окно Muzz: добавлен флажок "Дублировать аккомпанемент на октаву вверх (DAU)", управляемый командой скрипта DAU0/DAU1, позволяющий каждую ноту аккомпанемента играть двумя нотами - текущей и нотой на октаву выше, выбирается случайным образом для вступления/куплета/припева при генерации
- Muzz: теперь размер песен по умолчанию выставлен в 16/16 (вместо случайного)
- просмотр мозаики: номер элемента под курсором теперь также отображается в левом верхнем углу окна
- просмотр мозаики: в меню "Эффекты (E)" добавлен пункт "Залить выделение картинкой", позволяющий указать картинку с элементом из папки через стандартный диалог открытия файлов с предпросмотром картинок

Исправления ошибок:
- Muzz: при отключенных в настройках барабанах они больше не будут появляться в мелодиях
- окно всех меню: добавлена проверка на наличие курсора в пределах показываемых пунктов и автопромотка меню до места, где курсор виден
- Muzz: теперь сохранение в MID-файл создает не 3, а 4 дорожки в файле, в первую записывается только информация о темпе (как положено по MIDI-стандарту), а в три других - мелодия, аккомпанемент, барабаны
- Muzz: сохраненные MID-мелодии теперь проигрываются на Android в нормальном темпе (для этого в сохраненных файлах количество тиков на четвертную ноту и дельта-времена были увеличены в 12 раз)
- просмотр очереди кадров: исправлена ошибка некорректного выбора текущей папки окна загрузки файлов в качестве рабочей папки для вставки/перемещения кадров (когда просматриваем очередь кадров из папки очереди, а вставляем/перемещаем файлы в последней папке, использованной окном открытия файлов, а не в папке очереди)

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

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

Сообщение blackstrip » Вс фев 05, 2023 11:36 pm

Подробности об изменениях генератора музыки Muzz в PaintCAD 4Windows 1.5.2.1352 на Хабрахабре: https://habr.com/ru/post/712878/

Сгенерированная MIDI-музыка из поста о выпуске версии 1.5.2 на Youtube:








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

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

Сообщение blackstrip » Чт сен 14, 2023 9:37 pm

Бета 1.5.3.1355 доступна по ссылке http://blackstrip.ru/paintcad.exe
(а также через меню "Помощь" - "Проверить обновления")

Изменения:

Исправления ошибок:
- разбор PCF шрифта на BMP буквы: исправлена редкая ошибка создания BMP с мусорными пикселями вместо изображения символа

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

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

Сообщение blackstrip » Сб май 25, 2024 10:07 am

Бета 1.5.3.1358 доступна по ссылке http://blackstrip.ru/paintcad.exe
(а также через меню "Помощь" - "Проверить обновления")

Изображение

Изменения:
Новые функции:
- Scriptaint: команда "Развернуть текст (F4)" теперь имеет третий режим - полностью скрытое поле текста, а также текстовых строк и полосы прогресса над ним

Исправления ошибок:
- Scriptaint: съемка кадров и их сохранение (включая сохранение из скрипта) теперь дополнительно ждут 100 мс чтобы поле с программным кодом до конца скрылось и не попало в кадр

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

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

Сообщение blackstrip » Пн ноя 04, 2024 4:26 am

Разработка PaintCAD 4Windows - 3D редактор Hippo

В меню Экстра есть несколько заблокированных заготовок на будущее. Одна из них - 3D редактор Hippo.
Изображение

Сначала для этого редактора писался софтверный 3d движок, рисующий в трехмерном пространстве точки, линии, треугольники, с каркасным отображением а ля wireframe. Классно, конечно, но в Windows есть встроенные движки OpenGL и DirectX для отрисовки 3D, с освещением, текстурами и т.д.

Почитав старые сайты про OpenGL 1.0 (без шейдеров) в Delphi 7 удалось прикрутить к паинткаду встроенный в Delphi 7 модуль opengl без каких-либо сторонних движков. Переписав софтверный движок 3D редактора в управление этим старым OpenGL удалось заставить его работать +)

Тестовая отдельная прога (для проверки как работает этот самый дельфийский opengl 1.0) с текстурированием кубика картинкой из файла нормально так его рисует:
Изображение

Интерфейс программирования Hippo скопирован с встроенного в PaintCAD 4Windows звукового редактора Qmpot (даже кнопка Ввод нот осталась, позже трансформируется в одну из функций). В 3D редакторе Hippo будет как в Qmpot модуль для программирования 3D моделей с самого низшего уровня - от точек и треугольников до объектов.

Будет примерно что-то типа такого как в коде ниже:
- создаем новую сцену (командой N),
- красим фон (BC),
- создаем камеру (C) и устанавливаем ее активной (SC),
- ставим в сцене до 8 источников света (здесь 4 источника света) через L - позиция источника света c регулируемым w-параметром (направленный свет из бесконечности w = 0, свет вблизи (точечный) w=1 или что-то промежуточное), цвета источника света фоновый (LCA), диффузного рассеяния (LCD) и цвет бликов (LCS),
- включаем источники света через команду LS,
- а дальше создаем объекты - в этом примере это восемь точек-углов кубика по команде D номер точки, x, y, z (от слова dot - точка), из них собираем 12 треугольников по команде T номер треугольника, точка1, точка2, точка3 (от слова triangle - треугольник, по 2 треугольника на сторону кубика), а из треугольников собираем объект через команду 0 номер объекта, все номера треугольников через запятую (от слова object - объект). Можно собрать и что-то другое, засунув, таким образом, все треугольники этого чего-то в объект.

Код кубика с 4 источниками света вокруг него:
//введите сюда HIP-команды
N
BC 48,111,160

C 1,0,0,5,0,0,0,0,0
SC 1

L 1,-5,0,-5,0
LCA 1,0,0,0,255
LCD 1,255,0,0,255
LCS 1,255,255,255,255

L 2,-5,0,5,0
LCA 2,0,0,0,255
LCD 2,0,255,0,255
LCS 2,255,255,255,255

L 3,5,0,5,0
LCA 3,0,0,0,255
LCD 3,0,0,255,255
LCS 3,255,255,255,255

L 4,5,0,-5,0
LCA 4,0,0,0,255
LCD 4,128,128,0,255
LCS 4,255,255,255,255

LS 1,1
LS 2,1
LS 3,1
LS 4,1

D 1,-1,-1,1
D 2,-1,-1,-1
D 3,-1,1,-1
D 4,-1,1,1
D 5,1,-1,1
D 6,1,-1,-1
D 7,1,1,-1
D 8,1,1,1
T 1,1,2,3
T 2,1,3,4
T 3,4,3,7
T 4,4,7,8
T 5,8,7,6
T 6,8,6,5
T 7,5,6,2
T 8,5,2,1
T 9,6,7,3
T 10,6,3,2
T 11,8,5,1
T 12,8,1,4
O 1,1,2,3,4,5,6,7,8,9,10,11,12

X
Код рисует вот такой кубик (вообще-то камера смотрит на кубик спереди из точки x=0,y=0,z=5 в точку x=0,y=0,z=0, был после построения скриптом докручен мышкой до ракурса с видом с угла):
Изображение

Будет масса и других команд на автоматизированное создание более сложных объектов - параллелепипеды, сферы, цилиндры, плоскости и т.д. и управление их точками, установкой опорной точки, раскрашивание цветами и/или текстурирование из внешних файлов с изображениями, копирование объектов, расположение объекта в 3D-пространстве, поворот, масштабирование и различные трансформации объекта относительно опорной точки, управление пространственным курсором (как конкретное "установить курсор в точку x,y,z", так и относительное "сдвинуть курсор на x,y,z относительно текущего положения"), помещение объекта в место расположения курсора, экспорт рисунка из paintcad в скрипт для 3D редактора Hippo, рисующий этот самый рисунок вокселями в 3D-пространстве), загрузка объектов из внешних файлов моделей, сохранение получившейся сцены в модель (как минимум в obj-формате, описывающим как раз точки (вершины), треугольники, нормали, расположения координат текстур на вершинах), рендер нескольких кадров для создания 3D-анимации. Как в Qmpot сделан вызов подпрограмм (через команды CALL имя_строки и RET).

Также планируется реализовать рисование подобно пиксельному как в паинткаде, но оно будет уже воксельное 3D-курсором и в 3D-пространстве. Получится такой мини-3D-паинткад.

Самое простое применение - отрендеренную сцену можно командой в скрипте или просто мышкой покрутить для нужного ракурса и экспортировать в паинткад в виде картинки, получится настоящее рисование в 3D (с дорисовкой в паинткаде если нужно). Посложней применение - создание 3D-моделек и сцен.
Еще одно назначение 3D-редактора HippoПоказать
В перспективе таким редактором можно будет рисовать модели для MMORPG Basis (viewtopic.php?t=616)или для других 3D-игр вместо сторонних редакторов =)
Продолжение следует...

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

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

Сообщение blackstrip » Вс июн 21, 2026 8:36 pm

Продолжаем разработку 3D-редактора Hippo из состава экстра-утилит PaintCAD 4Windows.

На данный момент в скриптовой части Hippo следующие команды (пока только самые элементарные):

N - новая сцена
Синтаксис: N (без параметров)

BC - установить цвет фона
Синтаксис: BС r,g,b

С - создать камеру
Синтаксис: C #камера,x,y,z,xt,yt,zt,t,p
где
x,y,z - точка в пространстве, где находится камера
xt,yt,zt - точка-цель в пространстве, на которую смотрит камера
t - (не реализовано, но параметр есть) tilt, наклон камеры в градусах
p - (не реализовано, но параметр есть) perspective, параметр "силы" перспективы

SC - выбрать текущую камеру
Синтаксис: SC #камера

D - добавить точку
Синтаксис: D #точка,x,y,z

T - собрать треугольник из трех точек
Синтаксис: T #треугольник,#точка1,#точка2,#точка3

O - собрать объект из треугольников
Синтаксис: O #объект,#треуг1,#треуг2,#треуг3,...

L - указать позицию/направление света
Синтаксис: L #источник(1-8),x,y,z,точечный(0/1)

LCA - указать фоновый цвет света (ambient)
Синтаксис: LCA #источник(1-8),r,g,b,a

LCD - указать цвет рассеяния света (diffuse)
Синтаксис: LCD #источник(1-8),r,g,b,a

LCS - указать цвет бликов от света (specular)
Синтаксис: LCS #источник(1-8),r,g,b,a

LS - включить/выключить источник света
Синтаксис: LS #источник(1-8),состояние(0/1)

G - переход на строку
Синтаксис: G номер_строки

X - завершить выполнение
Синтаксис: X (без параметров)

CALL - вызов процедуры по имени строки
Синтаксис: CALL имя_строки

RET - возврат из процедуры
Синтаксис: RET (без параметров)

Добавим две свежие команды:

TC - задать цвета точек треугольника
Синтаксис: TC #треугольник,r,g,b,r,g,b,r,g,b

TF - закрасить треугольник цветом
Синтаксис: TF #треугольник,r,g,b

Белый куб из 12 треугольников (6 сторон по 2 треугольника на каждой). Верхние треугольники (под номерами 3 и 4) - один покрашен целиком в желтый цвет командой TF, а каждая точка второго треугольника покрашена в индивидуальный цвет командой TC, образуя градиенты между ними:

Изображение

Треугольники нумеруются с 1 и далее. Если задать в командах TC и TF номер 0 - то цвет будет сохранен и применяться ко всем создаваемым в дальнейшем треугольникам в сцене (чтобы каждый индивидуально не раскрашивать можно было).

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

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

Сообщение blackstrip » Ср июл 01, 2026 9:41 pm

Добавляем в Hippo прозрачность и отрисовку треугольников, стоящих к зрителю задом

В OpenGL цвета можно задать и с альфа-каналом прозрачности. Подправим две команды заливки треугольника цветом целиком и по отдельным точкам. Теперь они такие:

TC - задать цвета точек треугольника
Синтаксис: TC #треугольник,r,g,b,a,r,g,b,a,r,g,b,a

TF - закрасить треугольник цветом
Синтаксис: TF #треугольник,r,g,b,a

И для рендера прозрачности добавим еще две новые команды:

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

RB - включить/выключить рендер задних граней
Синтаксис: RB состояние (0/1)

Работает все это вот так:

Наш старый кубик, у которого из 12 треугольников третий и четвертый раскрашены. Справа в начало скрипта добавлены команды RA и RB, обе с нулем, т.е. прозрачность выключена и рендер треугольников "сзади" тоже выключен:

Изображение

Кубик если собирать, пропуская раскрашенные 3 и 4 треугольники - то у него должна отвалиться верхняя крышка.

Выкидываем их из команды создания объекта O 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 (я создал новую, закомментировав старую рядом, чтоб вернуться потом к кубику с крышкой). Получаем команду: O 1, 1, 2, 5, 6, 7, 8, 9, 10, 11, 12

Крышка, действительно, убирается из сцены - но под ней пусто:

Изображение

Это потому что "сзади" треугольники сейчас не рендерируются OpenGL-ем. У каждого треугольника есть "перед" и "зад". По-хорошему, каждый видимый, не закрытый другими треугольниками, треугольник нашей модельки должен смотреть на нас передом (хоть вбок повернутый, но смотреть на нас). Как вот на этой картинке - на треугольнике нормаль смотрит вверх, а на сфере - наружу из сферы:

Изображение

По нормалям рассчитывается, например, освещенность каждого треугольника, когда известно с какой стороны падает свет - то треугольники светлеют или темнеют (и окрашиваются в цвет источника света) в зависимости от направления своей нормали.

Нормали сохраняются в файл 3D-модели и при загрузке в другом 3D-редакторе или 3D-игре сразу могут использоваться после загрузки файла при отрисовке модели на экране. Точнее - будут сохраняться. Пока что экспорта в файл 3D-модели в Hippo нет.
Кстати, нормалей у треугольника аж три - от каждой из его трех точек. По-хорошему надо рассчитывать нормаль по нескольким разнонаправленным треугольникам, стыкующимся в точке своими углами. Но пока что сделаем для каждого треугольника свою персональную нормаль, такая моделька будет на вид немного угловая, зато считать легче, т.к. не нужно узнавать какие еще треугольники в этой точке есть) А расчет усредненных нормалей оставим на будущее.
Нормали в Hippo рассчитываются автоматически, если точки треугольника d1, d2, d3 задать в команду T #номер_треугольника, d1, d2, d3 таком порядке, чтобы точки втроем располагались друг относительно друга против часовой стрелки, то нормаль будет смотреть на нас (и треугольник будет смотреть на нас).

И у кубика все треугольники смотрят наружу. А внутрь кубика не смотрит ни один - и OpenGL их всех поэтому успешно рисует пока кубик был целый, и совсем не рисует когда мы смотрим на кубик изнутри, сняв с него крышку.

Включаем новую команду для рендера треугольников "сзади" RB 1 - и теперь треугольники рендерятся и спереди, и сзади, и получается коробка без крышки, но со стенками и дном:

Изображение

Цвета всех треугольников кубика сделаем теперь полупрозрачными - альфа-канал зададим равный 128 (а это середина из возможного диапазона 0 - 255). Если все команды стащить в одно место - получаем:

Изображение

Треугольник с номером 0 - это все треугольники, которые будут созданы - будут белые полупрозрачные. А потом перед созданием кубика - отдельно 3 и 4 треугольник (верх кубика) раскрашиваем как раньше, но полупрозрачными цветами с альфа-каналом 128 (TC команда длинная, в скриншот вся не влезла).

Попробуем разные варианты рендера:

1) RA 0, RB 0 - не рендерируем альфу, не рисуем треугольники, стоящие к нам задом. Обычный кубик с раскрашенными треугольниками на крышке:

Изображение

2) RA 1, RB 0 - рендерируем альфу, но не рисуем треугольники, стоящие к нам задом. Смотрящие на нас треугольники стали полупрозрачными, но за ними ничего нет (все треугольники за ними стоят к нам задом и не рисуются):

Изображение

3) RA 1, RB 1 - рендерируем альфу и рисуем треугольники, стоящие к нам задом. Смотрящие на нас треугольники стали полупрозрачными, за ними видны остальные треугольники, стоящие к нам спиной, но рисующиеся т.к. мы просим их рисоваться командой RB 1:

Изображение
Кстати, отрисовка полупрозрачных моделей в OpenGL - это отдельное мучение. Сначала надо отрисовать все непрозрачные треугольники. А потом отдельно отрисовать все полупрозрачные, при этом сначала рисовать самые дальние от камеры, потом поближе, и т.д. до самых близких. В движок Hippo был прописан этот алгоритм и вроде бы все полупрозрачное рисуется корректно) А если порядок отрисовки не соблюсти, то будет фигня с наложением одних полупрозрачных треугольников на другие, и нереалистично прорисованный результат.
Проверка правильности нормалей всех треугольников

Если испортить, например, 12-й треугольник кубика и записать его точки в обратном порядке - вместо 8, 4, 1 написать 8, 1, 4 - то его нормаль отвернется от нас, т.е. треугольник тоже повернется к нам спиной.

Если при этом рендерить сцену с выключенной отрисовкой треугольников сзади (командой RB 0) - то этот треугольник пропадет из модельки. И будет ясно что нормаль у него не в ту сторону:

Изображение

Так с помощью команды RB 0 можно проверять правильность нормалей (т.е. правильность порядка запихивания точек в треугольники) при ручном поточечно-потреугольном создании лоуполи-моделек в Hippo.

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

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

Сообщение blackstrip » Чт июл 09, 2026 11:46 pm

Фиксируем массивы точек и треугольников

До этого в Hippo в процессе выполнения скрипта отдельно создавалась коллекция точек, потом их свойства (координаты) копировались внутрь создаваемых треугольников.

А коллекция треугольников с их координатами точек и цветами точек копировались внутрь объекта.

И если бы после создания объекта изменить координаты одной из точек - то ничего бы не произошло, т.к. внутри объекта были копии точек и копии треугольников из них.

Теперь зажмем жестко эти коллекции (массивы) и будем хранить только индексы.

Теперь треугольник - три индекса точек из массива созданных точек. Объект - набор индексов треугольников из массива треугольников, у каждого из которых три индекса точек из массива точек.

Теперь даже если после создания объекта передвинуть одну из его исходных точек - изменится треугольник, и изменится объект.

Так будет легче понять что происходит, и будет легче сделать экспорт в 3D-модель формата OBJ, внутри которой как раз и записываются точки, из них треугольники и их нормали, и из них объекты.

Подменяем точки после создания объекта

Пока еще в команды скриптового языка Hippo не добавлены команды изменения позиций точек (перемещения и пр.) - пока что позицию любой точки можно поменять, пересоздав ее командой D номер_точки, x, y, z.

Если точка подменена на другую с другими координатами, то все треугольники, в которые она входит, повернутся в какую-то другую сторону. Добавим в команду D проверку на существование создаваемой точки. И если точка уже есть - то поищем в треугольниках все треугольники, в которые она входит, и пересчитаем их нормали на новые (нормаль и есть угол поворота треугольника в пространстве по всем трем осям) чтобы освещение пересчиталось корректно.

Проверим, как пересчитываются нормали и перерисовывается освещение. Сделаем свет побледнее - оставим вместо двух только один источник света, светящий под углом на правую-нижнюю грань кубика и на его верх.

Был кубик такой:

Изображение

Добавим после создания объекта команды создания 4 точек в основании кубика, растащив их от центра (были оттащены на 1 от центра, а будут на 3, кубик превратится в объемную трапецию). Эти команды на предыдущем скриншоте уже введены, но закомментированы и не работают. Раскомментируем их и получаются новые, наклоненные боковые поверхности и их цвет меняется - значит нормали пересчитываются на новые корректно, а уже созданные объекты корректно слушаются изменения позиции точек:

Изображение

Совершенствуем команду RB вывода задних граней

Сейчас она рисует либо только передние грани (если указать ей 0 как параметр) или передние+задние (если указать ей 1).

Иногда хочется посмотреть только задние грани. Добавим эту возможность. Теперь:

1) RB 0 - рисует только передние грани

Изображение

2) RB 1 - рисует передние+задние грани

Изображение

3) RB 2 - рисует только задние грани

Изображение

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

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

Сообщение blackstrip » Вс июл 12, 2026 11:59 am

Каркасный (wireframe) рендер

OpenGL умеет рисовать не только закрашенные треугольники, но и только их границы.

Добавим команду RW (render wireframe):

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

Если в скрипт вписана команда RW 0 - то все рисуется как обычно, с заливкой треугольников цветами/текстурами. Возьмем трапецию из предыдущего поста:

Изображение

Выставляем команду RW 1 - включается каркасный рендер. Дальше все зависит от команды рендера задних граней RB:

RW 1, RB 0 - в каркасном рендере рисуются только передние треугольники (которые смотрят на нас):

Изображение

RW 1, RB 2 - в каркасном рендере рисуются только задние треугольники (которые смотрят от нас):

Изображение

RW 1, RB 1 - в каркасном рендере рисуются все треугольники (передние+задние). Это самый сложный для восприятия рендер, задние и передние треугольники накладываются друг на друга и почти ничего не понятно и не разобрать что где, особенно на сложных моделях (пока не покрутишь модельку мышкой на экране):

Изображение

ИИ умеют составлять HIP-скрипты =)

Если перплексити попросить:
пусть команда D номер_точки, x, y, z задает точку в пространстве в координатах x,y,z, а команда T номер_треугольника, номер_точки1, номер_точки2, номер_точки3 задает треугольник из точек. А еще команда O номер_объекта, номер_треугольника1, номер_треугольника2, ... создает объект из треугольников. Напиши этими командами создание объекта номер 1, состоящего из 32 треугольников, образующих сферу (координаты точек посчитай сам, пусть радиус сферы будет 1)
То он создает команды точек, треугольников и сборки объекта =) Правда, он захотел сделать 20 треугольников. Но вот что получилось:

Изображение

Проблема с правильным порядком отрисовки полупрозрачных треугольников

Если у пирамиды включить полупрозрачность, то треугольник на задней стенке окрашивается не в тот цвет:

Изображение

Отладка показала что из-за того, что паинткад рассчитывает, что гигантский треугольник в основании трапеции - ближе чем маленький на ее боку. И отрисовывает их не в том порядке (надо сначала дальние, потом ближние), что дает неправильный цвет. На деле-то, конечно, приподнятый маленький расположен перед большим в основании.

Паинткад рассчитывает дальность треугольника от камеры по расстоянию до центра треугольника - и, действительно, из геометрии центр гигантского ближе к камере, чем центр маленького приподнятого:

Изображение

Этой проблеме в интернете посвящены тысячи сайтов. Особенные глюки полупрозрачности будут с пересекающимися треугольниками. И решение одно - дробить треугольники на более мелкие. Есть всякие умные алгоритмы типа https://en.wikipedia.org/wiki/Binary_space_partitioning

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

В будущем в Hippo появится команда дробления треугольников (глупого дробления, просто на три части как Tesselate в 3DS Max), посмотрим потом к чему это приведет и улучшит ли отрисовку. По идее, должно улучшить, т.к. все треугольники станут мелкими, и их сравнение по дальности станет корректным (и их станет много, что плохо для создания моделей, но хорошо если просто хотим построить сцену и отрендерить 3D картинку с нормальной, более-менее корректно-отрисовывающейся прозрачностью моделей в кадре).

А пока, вроде бы, лучше считать не просто по расстоянию до центра, а по усредненному расстоянию до первой, второй и третьей точки треугольника. Теперь так рассчитывается "дальность" треугольника в Hippo для отрисовки полупрозрачных моделей. Но проблема, пока что, так и не решена и остается для решения в будущем.

Ответить

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

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

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