[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
Результаты поиска
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Уже сделал возможность загружать текстуры из W3DT!!!
http://w4tweaks.ru/load/w3deditor_v2_3_by_alexbond/5-1-0-654


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Вылаживаю редактор карт v2.3

W3DEditor v2.3 by AlexBond

http://w4tweaks.ru/load/w3deditor_v2_3_by_alexbond/5-1-0-654

Из новых функций:

- стёрка для покселей при покраске.
- загрузка папки W3DT
- возможность многоразовой загрузки текстур в TextureView


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Вот что уже имеется =)
Прикрепления: 8416835.jpg (165.1 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
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
- новые иконки при ассоциации
- перетаскивание карты прямо на окно редактора


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Хорошо тогда дерзай =) вот тебе файлик Poxels.pas самый главный в редакторе почитай на ночь =)
Прикрепления: Poxels.pas (167.3 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Ассемблерные вставки были, так как я не знал про системные =) оказалось там тот же код!

В потоке делать? Не смеши меня =) Функции с покселем просчитываются микросекунды. Основные тормоза из-за графического вывода, а так все работает на максимальной оптимизации.

Да, не люблю я комменты писать, потому что прогу пишу для себя, а не чтобы кто-то в ней ковырялся =)

Самая сложная функция из всего модуля - GenListGL
Кстати она не совершенна!!! Lex-Serest если хочешь помочь проекту, может сможешь сделать так чтобы текстуры правильно отображались?

Дело в том, что когда поксель вытягивается по Layers и в зависимости от этого вытягиваются и текстуры... я эту зависимость не нашел... увы. Хорошо видно на карте

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

Вот картинки

Lex-Serest
Если согласен взяться, то я тебе предоставлю всю информацию которая потребуется.

Прикрепления: 1056398.jpg (192.0 Kb) · 6195329.jpg (258.8 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Я имел в виду вот это:

и

Судя по картинкам, в игре Height MAP не влияет на координаты.

Прикрепления: 4893416.png (239.4 Kb) · 2866646.jpg (330.0 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Статьи про текстурные координаты в OpenGL:

http://www.rsdn.ru/article/opengl/ogltut2.xml?print#EZOAG
http://www.codenet.ru/progr/opengl/3d.php#COORD


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Сделал полную Колоду Карт!!!

Прикрепления: 6741582.jpg (251.1 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (firsacho)
вот еще пару идей по новым функциям редактора
1) Очень не хватает возможности включения вида сверху... иногда чтобы сделать карту симметричной нужно делать камеру сверху и выставлять объекты по клеточкам. Но вручную это очень неудобно - приходиться долго крутить камеру пока все линии сетки не будут горизонтальными (без пикселей) - тогда можно уже утверждать что это вид сверху

Виды сделал все.

Возник вопрос: При смене вида Сетку поворачивать?
Делать ли горячие клавиши на Виды?

Добавлено позже

Сетка тоже будет поворачиваться.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Добавлена функция Delete. Удаляется выделеный поксель, вызывается кнопкой Delete!!!

Обдумываю функции Redo/Undo


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Как быть с удалением покселей? Вот я удалил поксель, потом нажал отмена поксель вернулся. Нажал повтор, поксель опять удалился... спрашивается удаление производится физическое, но создаем копию, если же возвращаем состояние копия уже будет содержать иной адрес.

Вот к примеру ситуация:

Имеется дерево из покселей.
Я к примеру удалил с начало 3-й элемент дерева привязанный ко второму по адресу,
Затем удалил второй элемент дерева привязанный к первому.
Захотел отменить два действия. Допустим второй элемент я воссоздаю из стека, но он принимает новый адрес, так как создается заново. Вторая отмена приведет к ошибке, так как адрес к которому нужно прикрепить воссозданный 3й элемент, уже изменился...

Короче гемор... а если я так удалю много... все адреса поменяются... Куда я буду прикреплять поксели из стека?

Еще, как я понял добавление состояние в стек нужно делать при каждом изменении. К примеру когда мы перемещаем мышью поксель, добавлять нужно или до начала перемещения или после. Тут проблема отловки этого события, ведь EditX на прямую пишет значения в Poxel и надо переделать этот компонент...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Как альтернатива - сохранение всего дерева. при каждом малейшем изменении...
Но опять же это не оптимизировано...

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

Может использовать Кодовые деревья? и сохранять поксель в стек с адресом вида ABNK, который означает
Ветвь A - Ветвь B - Ветвь - N - Ветвь K


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Изучаю статьи по Undo Redo
http://www.equin.co.uk/articles/undoarticle.htm
http://www.codeproject.com/KB/cs/undoredobuffer.aspx

http://www.rsdn.ru/article/dotnet/backforward.xml

http://www.codeproject.com/kb/docview/undo.aspx
http://www.codeproject.com/KB/atl/undomgr.aspx?target=undo


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Так... вопрос, что мы записываем в стек, когда изменяем лишь позицию? или положение одной точки, или координаты.

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Вот пример как действует 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


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Короче надо придумать структуру Состояний которое будет в стек записываться... иначе не получится....

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Итак, мысли следующие:

Сбор состояния. PushState(type,point)
Будет иметь два параметра - тип:
Pos, Size, Rot, Clip, TextCoord, Layers, Hmap, Color, Poxel

И ссылку на адрес этих переменных( @Tver)

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

Единственная проблема - удаления ветви из дерева. Ведь адрес тоже удалиться, а воссоздать тот же адрес нельзя. Поэтому поксель нужно прикреплять не к адресу, а как-то по другому... Пока еще не знаю как, но придумаю...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
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, причем они друг на друга ссылаются. Которые имеют уникальные адреса и обращаться к удаленному адресу я не могу...

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


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Undo и Redo работают!!! но с ошибками... после отладки всех ошибок angry выпущу новую версию редактора!!!

 
Поиск: