Войти
ФлеймФорумПроЭкты

3D редактор (7 стр)

Страницы: 16 7 8 913 Следующая »
#90
9:38, 21 мар. 2020

3dhater
> то есть можно обойтись и без неё?
разумеется. Тебе нужна нормаль либо в мировом пространстве (Model), либо в screenspace (ModelView)


#91
10:03, 21 мар. 2020

Aroch
> разумеется. Тебе нужна нормаль либо в мировом пространстве (Model), либо в screenspace (ModelView)

Я как-то не сильно над этим задумывался. Теперь убедился на практике в чём разница.
Спасибо за помощь 👍

#92
(Правка: 22 мар. 2020, 22:23) 14:24, 21 мар. 2020

Добавил показ сетки.
コメント 2020-03-21 140714 | 3D редактор

Буду делать кнопки, те что слева.
Выше, думаю, будут идти режимы выделения, и трансформации.
[выбор по списку] кнопка уже есть
[просто выбор]
[перемещение]
[вращение]
[масштаб]
[что-то разделяющее]
[режим показа: материал]
[материал и сетка]
[просто сетка]

Не знаю в какой это последовательности разместить.
Нужно ещё добавить выбор, локально ли крутить выбранные объекты, или относительно общей опорной точки. Чтобы эта кнопка была под рукой, но не слишком, чтобы случайно не нажать.

Ещё есть вопрос о хранении мешей в памяти, когда они активны или нет.
Например, если модель рисуется без сетки, то сетки нет в памяти. Нажимаем на кнопку [показ сетки] и сетка создаётся. Будет ли это нервировать если будут дёргания при переключениях? Или оставить, подумаешь, 1.5 - 2 гб памяти займёт высокополигональная модель. Сейчас почти у всех минимум 8 гб стоит.

Размер программы с этой бугати : 1.457 гб.


Возможно, стоит добавить assimp и сделать плагины на его основе.
Плагины использующие библиотеки будут иметь приставку в своём имени.
Например, FI_png - плагин для загрузки png который использует freeimage


добавил assimp  и сделал плагин для загрузки 3ds
хрен пойми как там устроены нормали, лучше при создании указать на её генерацию. Всё равно придётся делать.

Без редактирования сетки генерацию гладкой нормали пока не сделать... Ну или это будет гораздо сложнее.


Всю жизнь я делал коммиты только после больших изменений, и подписывал просто Update.
Как я понимаю это не верный путь. Нужно фиксировать каждое изменение, и описывать это более детально.


Вчера программа просто так закрылась (я нажал импорт, выбрал файл, открылось окошко imgui с настройками импорта, курсор начал приближаться к кнопке Import, и вылет). При 60% занятость ОЗУ. В этот момент компилировалась assimp.dll
Нужно настроить программу на отлов исключений со всех возможных мест.


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


Я обнаружил серьёзный баг связанный с развёртыванием вьюпорта во всю область.
Всё работало как надо, и вдруг он просто сломался.


Обновлять ввод должен главный вьюпорт... а я дал это задание активному.
Зато обнаружил ещё один баг.

Если через меню развернуть вьюпорт во всю область то вьюпорт станетразмером 800 на 600 как при старте программы.... почему?

По крайней мере, активно нажимая на Alt+W в различных вьюпортах никаких багов больше не обнаружил.


Вроде починил.

#93
(Правка: 23 мар. 2020, 12:38) 23:51, 22 мар. 2020

Настроил горячие клавиши для выбора режима рисования (с сеткой, без сетки, всё вместе)....в том числе F3 и F4 как в 3Ds Max
Готовы кнопки для режима, хрен пойми как назвать, короче режима выбора (просто выбор, выбор и перемещение и т.д.)
コメント 2020-03-22 233820 | 3D редактор

Гизмо будут из 3д моделей. Ранее 3д модели были только кончики на гизмо. Все реакции высчитывались математически. Сейчас же сделаю просто, гизмо будут браться лучём пересекающим их треугольники.

Так-же нужно сделать ввод трансформации через окошечко (F12 у 3Ds Max). Наверное это будет первее.

Ещё есть недоработка. В ортографических вьюпортах, вид не масштабируется при нажатии на горячую клавишу или пункт меню. И ещё он не масштабируется когда изменяется размер окна или вьюпорта.


Также обнаружил логическую ошибку в системе горячих клавиш. В тех комбинациях, которые используют момент нажатия на клавишу (не release, а press, одиночный сигнал). Попробую исправить...😣



>логическую ошибку в системе горячих клавиш
отремонтировал
#94
(Правка: 19:08) 17:04, 23 мар. 2020

Вращение через окошечко трансформации в 3ds max не очень понятно.
Там две группы значений.
Различие в том что в первой, вроде по оси икс, объект наклоняется только в своей плоскости...ну например если это самолёт, то изменяя это значение он будет поднимать или отпускать нос, и так в любом положении, остальные две оси крутят объект как через гизмо.
Другая группа значений крутят объект как через гизмо.

Я сделаю так, чтобы в одной группе кнопок объект крутился как через гизмо, а в другой группе кнопок он будет крутиться по своим осям (как в примерах с самолётом).

#95
(Правка: 25 мар. 2020, 20:18) 17:40, 24 мар. 2020

Шейдеры создавались прямо в библиотеке движка... Сделал по нормальному, можно создать из программы. В движочке лежат только стандартные.

Гизмо для перемещения будет таким
コメント 2020-03-24 173232 | 3D редактор
Вроде элементарный, стрелки показывают положительное направление, перемещение по плоскости это квадратики, по центру будет квадрат в 2Д.

добавил окошечко для перемещения по значениям. теперь можно делать перемещение удерживая стрелки гизмо.


Попробую сделать рисование в другое окно.


Не получилось.

#96
(Правка: 23:55) 23:04, 25 мар. 2020

Интересно, покрасить ли стрелки в обычные цвета или так будет нормально когда они белые.
Быть может сделать их более бледными, не белыми, когда они не под курсором... ...мне надоели эти стрелки с чисто красным синим и зелёным цветами.


Так-же пытался сделать рисование в другое окно.
Вручную рисовать можно, но как сделать чтобы рисовался imgui не знаю (что-то не рисует он там...).

#97
0:55, 26 мар. 2020

3dhater
> мне надоели эти стрелки с чисто красным синим и зелёным цветами.
лаконичная без ничего лишнего гизмо имхо лучше, она не должна отвлекать. Минусы твоей гизмо:
1) слишком большая
2) области для перемещения не доступны под специфическими углами.

когда я делал у себя, получилось такое:

+ Показать

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

#98
11:50, 26 мар. 2020

Нехочу делать чью-то копию.

Много движений.
Это гизмо - простая 3д модель
2 | 3D редактор

Можно изменить\заменить.

#99
12:06, 26 мар. 2020

3dhater
> Нехочу делать чью-то копию.
так или иначе будет копия, это как с телефонами :) Нужно думать прежде всего об удобстве использования.

#100
(Правка: 16:02) 16:01, 26 мар. 2020

Я обнаружил что вызов

wglMakeCurrent(m_dc, m_renderingContext);

через коллбэк из wndproc или после wndproc, когда идёт pollEvent (вначале каждого фрейма)

вызывает охренительное переполнение памяти...

но если просто поставить wglMakeCurrent в цикле рисования, то ничего не переполняется.

Проблема не только в wglMakeCurrent, но и в других вещах OpenGL.

Значит надо отключить перерисовку при изменении размера окна. У меня нет идей как сделать чтобы работало.

#101
(Правка: 0:51) 0:39, 27 мар. 2020

Я задавался вопросом, как сделать очередь с приоритетом. Искал в гугле, есть всякие реализации.

А ведь проще было сделать массив массивов

enum class AppEventPriority : kk32u
{
  _high,
  _medium,
  _low
};

...

boost::circular_buffer<AppEvent> m_appEvents[3] = 
{ 
  boost::circular_buffer<AppEvent>(10),
  boost::circular_buffer<AppEvent>(10),
  boost::circular_buffer<AppEvent>(10)
};

...

void Application::addAppEvent( const AppEvent& e, AppEventPriority p )
{
    switch(p)
    {
    case AppEventPriority::_high:
        m_appEvents[0].push_back( e );
        break;
    case AppEventPriority::_medium:
        m_appEvents[1].push_back( e );
        break;
    case AppEventPriority::_low:
        m_appEvents[2].push_back( e );
        break;
    }
}

Теперь можно делать реагирование гизмо на мышку, перемещение и т.д.

#102
(Правка: 14:31) 13:52, 27 мар. 2020

3dhater
> Я обнаружил что вызов
>
> wglMakeCurrent(m_dc, m_renderingContext);
>
> через коллбэк из wndproc или после wndproc, когда идёт pollEvent (вначале
> каждого фрейма)
>
> вызывает охренительное переполнение памяти...
>
> но если просто поставить wglMakeCurrent в цикле рисования, то ничего не
> переполняется.
>
> Проблема не только в wglMakeCurrent, но и в других вещах OpenGL.
>
> Значит надо отключить перерисовку при изменении размера окна. У меня нет идей
> как сделать чтобы работало.

Удивительно, если переместить окно к ПРАВОМУ боку монитора, окно займёт половину его части, и уже при изменении размера рамки (ЛЕВАЯ СТОРОНА), содержимое будет перерисовываться и безовсяких коллбэков и прочих, при этом, память возрастает до 600 мб, дальше не хочет, и когда перестали тянуть рамку, память постепенно освобождается.

...пфф да просто за левую рамку если тянуть то всё будет перерисовываться...

....при изменении размера окна перетягиванием левым или верхним бордером приходит WM_MOVE сообщение, в котором я вызывал коллбэк с перерисовкой.


перерисовка теперь делается в

case WM_ERASEBKGND:

память увеличивается, но потом быстрее освобождается.

#103
15:14, 27 мар. 2020

Есть некоторые вещи которые я просто пропускаю, они удобные, но не слишком критичные, их можно отложить на потом.

В случае с трансформацией объектов, я сделаю так, чтобы объект перемещался или вращался почти в точности с перемещением курсора мышки.

Для этого мне поможет функция нахождения точки на плоскости.

#104
15:18, 27 мар. 2020

3dhater
> вращался почти в точности с
> перемещением курсора мышки.
но курсор мыши в 2d, а модель в 3d пространстве. Тебе придётся задействовать что-то ещё.

Страницы: 16 7 8 913 Следующая »
ФлеймФорумПроЭкты