Результаты поиска
|
|
Сообщений: 1042
|
Опубликовано: 18.07.2010, 11:28:41
Уже сделал возможность загружать текстуры из W3DT!!! http://w4tweaks.ru/load/w3deditor_v2_3_by_alexbond/5-1-0-654
|
|
|
|
Сообщений: 1042
|
Опубликовано: 18.07.2010, 12:56:55
Вылаживаю редактор карт v2.3 W3DEditor v2.3 by AlexBond http://w4tweaks.ru/load/w3deditor_v2_3_by_alexbond/5-1-0-654 Из новых функций: - стёрка для покселей при покраске. - загрузка папки W3DT - возможность многоразовой загрузки текстур в TextureView
|
|
|
|
Сообщений: 1042
|
Опубликовано: 18.07.2010, 15:18:51
Вот что уже имеется =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 18.07.2010, 22:25:33
Quote (Lex-Serest) А исходники будут выкладоваться хотя бы старых версий?) ты в них не поймешь ничерта =) Новое обновление: http://w4tweaks.ru/load/w3dmapeditor_v2_3_by_alexbond/5-1-0-657 Из новых функций: - новое имя редактора, официальное W3DMapEditor (ранее возникала путаница между w3dEditor и W3dMapEdit) - стёрка для покселей при покраске. - загрузка текстур из папки W3DT для W4MapLauncher'а - возможность многоразовой загрузки текстур в TextureView - корректное открытие пути для текстурных листов (*.txt) - ассоциация с файлами *.xan и *.xom - новые иконки при ассоциации - перетаскивание карты прямо на окно редактора
|
|
|
|
Сообщений: 1042
|
Опубликовано: 18.07.2010, 23:53:11
Хорошо тогда дерзай =) вот тебе файлик Poxels.pas самый главный в редакторе почитай на ночь =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 20.07.2010, 00:42:57
Ассемблерные вставки были, так как я не знал про системные =) оказалось там тот же код! В потоке делать? Не смеши меня =) Функции с покселем просчитываются микросекунды. Основные тормоза из-за графического вывода, а так все работает на максимальной оптимизации. Да, не люблю я комменты писать, потому что прогу пишу для себя, а не чтобы кто-то в ней ковырялся =) Самая сложная функция из всего модуля - GenListGL Кстати она не совершенна!!! Lex-Serest если хочешь помочь проекту, может сможешь сделать так чтобы текстуры правильно отображались? Дело в том, что когда поксель вытягивается по Layers и в зависимости от этого вытягиваются и текстуры... я эту зависимость не нашел... увы. Хорошо видно на карте А еще один глюк Если открыть карту Underground.xom в редакторе, то видно что не все стыки совпадают... эту проблему я тоже не решил... Вот картинки Lex-Serest Если согласен взяться, то я тебе предоставлю всю информацию которая потребуется.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 20.07.2010, 22:04:54
Я имел в виду вот это: и Судя по картинкам, в игре Height MAP не влияет на координаты.
|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 21.07.2010, 03:45:57
Сделал полную Колоду Карт!!!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.07.2010, 22:06:05
Quote (firsacho) вот еще пару идей по новым функциям редактора 1) Очень не хватает возможности включения вида сверху... иногда чтобы сделать карту симметричной нужно делать камеру сверху и выставлять объекты по клеточкам. Но вручную это очень неудобно - приходиться долго крутить камеру пока все линии сетки не будут горизонтальными (без пикселей) - тогда можно уже утверждать что это вид сверху Виды сделал все. Возник вопрос: При смене вида Сетку поворачивать? Делать ли горячие клавиши на Виды? Добавлено позже Сетка тоже будет поворачиваться.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.07.2010, 23:23:55
Добавлена функция Delete. Удаляется выделеный поксель, вызывается кнопкой Delete!!! Обдумываю функции Redo/Undo
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.07.2010, 21:07:36
Как быть с удалением покселей? Вот я удалил поксель, потом нажал отмена поксель вернулся. Нажал повтор, поксель опять удалился... спрашивается удаление производится физическое, но создаем копию, если же возвращаем состояние копия уже будет содержать иной адрес. Вот к примеру ситуация: Имеется дерево из покселей. Я к примеру удалил с начало 3-й элемент дерева привязанный ко второму по адресу, Затем удалил второй элемент дерева привязанный к первому. Захотел отменить два действия. Допустим второй элемент я воссоздаю из стека, но он принимает новый адрес, так как создается заново. Вторая отмена приведет к ошибке, так как адрес к которому нужно прикрепить воссозданный 3й элемент, уже изменился... Короче гемор... а если я так удалю много... все адреса поменяются... Куда я буду прикреплять поксели из стека? Еще, как я понял добавление состояние в стек нужно делать при каждом изменении. К примеру когда мы перемещаем мышью поксель, добавлять нужно или до начала перемещения или после. Тут проблема отловки этого события, ведь EditX на прямую пишет значения в Poxel и надо переделать этот компонент...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.07.2010, 21:50:38
Как альтернатива - сохранение всего дерева. при каждом малейшем изменении... Но опять же это не оптимизировано... Тогда еще версия - выборочное сохранение... но тут опять загвоздка... если сразу сохранял лишь поксель то он был приклеен к какому-то адресу, а потом всю карту... при восстановлении опять адреса спутаются... Может использовать Кодовые деревья? и сохранять поксель в стек с адресом вида ABNK, который означает Ветвь A - Ветвь B - Ветвь - N - Ветвь K
|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.07.2010, 01:45:41
Так... вопрос, что мы записываем в стек, когда изменяем лишь позицию? или положение одной точки, или координаты.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.07.2010, 22:04:24
Вот пример как действует 3DSMAX MacroRecodred Code actionMan.executeAction 0 "40472" -- MAX Script: MAXScript Listener select $Cylinder01 macros.run "Objects Primitives" "Cylinder" Cylinder smooth:on heightsegs:5 capsegs:1 sides:18 height:16.6061 radius:35.2207 mapcoords:on pos:[-24.0269,-15.1289,0] isSelected:on Cylinder smooth:on heightsegs:5 capsegs:1 sides:18 height:12.9038 radius:5.82835 mapcoords:on pos:[-28.6992,-74.3184,0] isSelected:on max select select $Torus01 select $Cylinder02 select $Cylinder01 select $Box01 select $Cylinder03 actionMan.executeAction 0 "40020" -- Edit: Delete Objects max delete select $Torus01 actionMan.executeAction 0 "40020" -- Edit: Delete Objects max delete select $Cylinder02 actionMan.executeAction 0 "40020" -- Edit: Delete Objects max delete select $Cylinder01 actionMan.executeAction 0 "40020" -- Edit: Delete Objects max delete select $Box01 actionMan.executeAction 0 "40020" -- Edit: Delete Objects max delete
или вот: Code select $Sphere01 max tool zoomextents max tool zoomextents all max modify mode macros.run "Modifier Stack" "Convert_to_Mesh" subobjectLevel = 1 modPanel.setCurrentObject $Sphere01.baseObject select $Sphere01.baseObject.verts[#{101}] max move toolMode.coordsys #view move $Sphere01.verts[#{101}] [-9.71286,-11.2686,0] move $Sphere01.verts[#{101}] [0,0,8.71245] max rotate subobjectLevel = 0 modPanel.setCurrentObject $Sphere01.baseObject $Sphere01.rotation = quat 0.747506 -0.166976 0.04144 0.641589 max scale $Sphere01.scale = [1,1.36294,1] max move $Sphere01.pos = [42.4191,-24.5008,120.968] clearSelection() select $Sphere01 actionMan.executeAction 0 "40020" -- Edit: Delete Objects max delete
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.07.2010, 22:38:01
Короче надо придумать структуру Состояний которое будет в стек записываться... иначе не получится....
|
|
|
|
Сообщений: 1042
|
Опубликовано: 26.07.2010, 12:39:58
Итак, мысли следующие: Сбор состояния. PushState(type,point) Будет иметь два параметра - тип: Pos, Size, Rot, Clip, TextCoord, Layers, Hmap, Color, Poxel И ссылку на адрес этих переменных( @Tver) Буфер состояний будет хранить лишь копии этих структур, но не поксель. Поксель будет записываться в память лишь при удаления или перестройки. В итоге нажав отмена, я воссоздаю поксель, а потом провожу над ним все изменения. Единственная проблема - удаления ветви из дерева. Ведь адрес тоже удалиться, а воссоздать тот же адрес нельзя. Поэтому поксель нужно прикреплять не к адресу, а как-то по другому... Пока еще не знаю как, но придумаю...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 01.08.2010, 11:36:08
Redo и Undo работают, для всех изменений с покселем, лимита нет! Одна проблема... причем большая... Нужно придумать, как сохранять состояние при удалении и создании покселя. В стеках у меня хранятся данные следующего вида: Code type TPushType=(PT_Select, PT_Delete, PT_Pos,PT_Size,PT_Rot,PT_Clip,PT_Name,PT_EBS,PT_TextCoord, PT_Surface,PT_TextCode,PT_Layers,PT_HMAP,PT_Poxel);
TStackCell = class PushType:TPushType; Vector:TVector; Str:String; TextCoord: array[1..16] of GLfloat; Layers1: ALayer; Layers2: ALayer; HMapVals: THmap; Surcface: array [1..3] of Integer; PoxelsTextCode: array of Cardinal; Poxel:TPoxel; Next:TStackCell; end; Проблема в том, что я не знаю как обращаться к удаленному покселю... Ведь адрес и ветвь у него изменяться, при восстановлении... К примеру в 3DSMAX выделяют командой Select $Object01. У меня же выделяется одновременно и ветвь покселя в дереве TTreeNode, и сам поксель TPoxel, причем они друг на друга ссылаются. Которые имеют уникальные адреса и обращаться к удаленному адресу я не могу... Нужно создать уникальный идентификатор, который будет сохраняться при копировании, и по нему обращаться к покселю...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 02.08.2010, 21:43:50
Undo и Redo работают!!! но с ошибками... после отладки всех ошибок выпущу новую версию редактора!!!
|
|
|
|