[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
Результаты поиска
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Нафига тебе модель трогать? Цвет червя это Ximage картинка!!! Текстура!

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Все должны с чего-то начинать.

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Ну вы ребят даёте... Сейчас я вам отвечу =)

Quote (Unaited_Ru)
хм... могут если червь отравлен или пришелец
но ведь модели рук заменяются то должно заменятся и тело червя только как?

Модели рук не заменяются, руки подлежат анимации, анимация это обязательно кости (XBone) с прописанными весомыми привязками по вершинам (Vertex). Т.е. если мы хотим заменить анимированую модель, мы должны заменяя модель, также заменить ее skin, определяемый XWeightSet, где для каждой точки (Vertex) модели имеется коэффициент привязки ко ВСЕМ костям!!!
Красят червя в зеленый цвет простой сменой освещения.
Изменить цвет червя можно так же при помощи XColor4ubSet в которой содержатся цвета для каждой точки (vertex) модели. Кстати так небо красится =)

Quote (Unaited_Ru)
Alex826, руки не содержат анимации, они заменяют стандартные и прикрепляются к скелету червя что содержит их анимацию
Войтек руки изменял

Как раз каждая модель в папке Character c именем Hand имеет полный скелет и skin с XWeightSet, поэтому заменить ее можно лишь соблюдая этот параметр.

Quote (Unaited_Ru)
а когда червяк отравлен то он становится зеленым, что воздействует на шкуру?
-это графический ТГА, который натягивается на червя
-это ХОМ файл содержащий анимацию перекраски в зеленый цвет
-этот цвет прописан в твиках или скриптах
что из этого правильнее?

Это цвет освещения который прописан в скриптах.
Где хранятся эти цвета и как их врубать динамически я не знаю, не копал.

Прикрепления: 6505791.png (64.2 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Думаешь у меня небыло таких Умников на сайте? =) И какие они карты делали... ЖУТЬ ПРОСТО.
Но в картах этих были ИДЕИ!!! И не плохие, я их все (почти) использовал при создании PNM правда пришлось доводить до ума все карты, т.е. делать Капитальный Ремейк =)
Зато какие результаты!!!


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

Code

global Filename
global XMat = 1
global tpos = 258
global trot = 259
global tsca = 2308
global tvis = 4352
global p_x = 0
global p_y = 256
global p_z = 512

function WriteVector file p =
(
WriteFloat file p.x
WriteFloat file p.y
WriteFloat file p.z     
)

function WriteMatrix file trmatrix =
(
WriteVector file trmatrix.row1
WriteVector file trmatrix.row2
WriteVector file trmatrix.row3
WriteVector file trmatrix.row4
)

function WriteColor file clr =
(
WriteByte file (clr.r as Integer)
WriteByte file (clr.g as Integer)
WriteByte file (clr.b as Integer)
)

function WriteColor2 file clr =
(
WriteByte file (clr.x*255 as Integer)
WriteByte file (clr.y*255 as Integer)
WriteByte file (clr.z*255 as Integer)
)

function ReadColor file =     
(
return color (ReadByte file #unsigned)(ReadByte file #unsigned)(ReadByte file #unsigned)      
)

function ReadBool file = (ReadByte file)>0

function LoadXAnim file =
(
      animname = ReadString file     
      print animname     
--  deleteKeys     
      maxkey = 0
      num = ReadShort file     
      for a = 1 to num do
       (
       objname = ReadString file
       PRSType = ReadShort file
       XYZType = ReadShort file
       s = "$"+ objname
          obj = execute (s)
       print obj
       print XYZType
       controller = bezier_float()       
          
       case PRSType of
       (
       tpos :     
       (
       obj.pos.controller = Position_XYZ()
        case XYZType of
        (
        p_x: obj.pos.controller.x_position.controller = controller                
        p_y: obj.pos.controller.y_position.controller = controller        
        p_z: obj.pos.controller.z_position.controller = controller        
        )     
       )
       trot :     
       (
       obj.rotation.controller = Euler_XYZ()
        case XYZType of
        (
        p_x: obj.rotation.controller.x_rotation.controller = controller                
        p_y: obj.rotation.controller.y_rotation.controller = controller        
        p_z: obj.rotation.controller.z_rotation.controller = controller        
        )     
       )       
       tsca :
       (
       obj.scale.controller = ScaleXYZ()
        case XYZType of
        (
        p_x: obj.scale.controller.x_scale.controller = controller                
        p_y: obj.scale.controller.y_scale.controller = controller        
        p_z: obj.scale.controller.z_scale.controller = controller        
        )     
       )       
       tvis : obj.material.opacity = controller                
      )     

       keys = ReadShort file
       for b = 1 to keys do
       (
       key = addNewKey controller 1000f
           
      --    key.inTangentType = #custom
      --    key.outTangentType = #custom
       inTangent = ReadFloat file
       inTangentLength = ReadFloat file
       outTangent = ReadFloat file
       outTangentLength = ReadFloat file
       ktime =  ReadFloat file
       value =  ReadFloat file
           
       format "[%; %; %; %; %; %]" inTangent inTangentLength outTangent outTangentLength ktime value     
       tmul = 100
      --    key.inTangent = inTangent -- / tmul     
      --    key.inTangentLength =  inTangentLength     
      --    key.outTangent = outTangent -- / tmul     
      --    key.outTangentLength =  outTangentLength
       key.time = ktime * tmul
       if maxkey<key.time then maxkey = key.time     
      case PRSType  of (
      tpos: key.value = value     
      trot: key.value = value/pi*180
      tsca: key.value = value*100     
          )       
       print key
         -- format "[%; %; %; %]\n" key.inTangent key.inTangentLength key.outTangent key.outTangentLength      

       )     
       )
      animationRange = interval 0 maxkey
)

function ReadXNode file =     
(  -- begin node
      local xtype = ReadString file     
      print xtype
          
      if (xtype=="XN") then (
        local XGroup = dummy name:"XNone" boxsize: [1,1,1]      
           return XGroup       
      )
          
      local xomname = ReadString file     
      print xomname

      matrixtype = ReadByte file
      case matrixtype of
      (
      1:(
      local trmatix = matrix3 [ReadFloat file, ReadFloat file, ReadFloat file] \
      [ReadFloat file, ReadFloat file, ReadFloat file] \
      [ReadFloat file, ReadFloat file, ReadFloat file] \
      [ReadFloat file, ReadFloat file, ReadFloat file]
      )
      2:(
      local pos = point3 (ReadFloat file) (ReadFloat file) (ReadFloat file)     
      local rot = eulerToQuat (eulerAngles (radToDeg(ReadFloat file)) (radToDeg(ReadFloat file)) (radToDeg(ReadFloat file)))     
      local size = point3 (ReadFloat file) (ReadFloat file) (ReadFloat file)     
      trmatix = (rotate (scaleMatrix size) rot) * (transMatrix pos)
      )
      )
      local a
          
      if (xtype=="GO") do (
       --    ObjectX = mesh name:xomname vertices:#() faces:#()     
        local childs = ReadShort file
         
        -- child #1
        xomnameSH = ReadString file     
        xtypeSH = ReadString file     
        ismatrixSH = ReadBool file
       ---    numfaceSH = ReadShort file      
        childsSH = ReadShort file
            
        ObjectX = (ReadXNode file)
        ObjectX.name = xomname     
            
           for a = 2 to childsSH do attach ObjectX (ReadXNode file)
            
        ObjectX.material.name = xomname + "_shader"     
        meditMaterials[XMat] = ObjectX.material
        XMat += 1     
           for a = 2 to childs do (ReadXNode file).parent = ObjectX     
            
        ObjectX.transform = trmatix     
           return ObjectX     
         )
             
         if (xtype=="BG") do (
         local childs = ReadShort file
         local XBone = bone name:xomname     
         -- child #1 BO
         for a = 2 to childs do in XBone (ReadXNode file)

         if matrixtype>0 do
           XBone.transform = trmatix      
         return XBone       
      )
          
     --    "GS"(
     --    )
         if (xtype=="SS") or (xtype=="SH") do     
      ( -- obj
      local numface = ReadShort file  -- faces
      print numface        
       local vert_array = #()
       local face_array = #()     
           
       for a = 1 to numface do     
           append face_array [(ReadShort file)+1,(ReadShort file)+1,(ReadShort file)+1]     
          
      local num = ReadShort file  -- vertex
       for a = 1 to num do     
          append vert_array [ReadFloat file, ReadFloat file, ReadFloat file]     
         
       local m = mesh name:xomname vertices:vert_array faces:face_array     
          
       isnormal = ReadBool file
       if isnormal do
       (
        for a = 1 to num do     
         (
            nvect = point3 (ReadFloat file) (ReadFloat file) (ReadFloat file)
         setNormal m a nvect         
         )
       )
            
      iscolor = ReadBool file
      if iscolor do (
            for a = 1 to num do     
        (
        clr = ReadColor file
         meshop.setVertColor m 0 a clr
       --    format "%. %\n" a clr
        )     
       --    m.showVertexColors true
        )

      istextcoord = ReadBool file
      if istextcoord do      
      (
       --set UV
       setNumTVerts m num
       for i = 1 to num do (setTVert m i [(ReadFloat file),(ReadFloat file),0])
       buildTVFaces m false
       for i = 1 to numface do (setTVFace m i face_array [i])     
      )      
      ismat = ReadBool file
      if ismat then
       (
       newmat = Standardmaterial name: (ReadString file)
       newmat.adTextureLock = off
       newmat.ambient = ReadColor file
       newmat.diffuse = ReadColor file
       newmat.specular = ReadColor file
       newmat.specularLevel = 100
       newmat.useSelfIllumColor = on
       newmat.selfIllumColor = ReadColor file
       -- twoSided                    
       )
      else
       (
       newmat = Standardmaterial prefix:"XMaterial"     
       newmat.diffuse = color 255 255 255
       )
          
      newmat.diffuseMap = RGB_Multiply ()
          
      istexture = ReadBool file     
      if istexture do
       (
       textname = (getFilenamePath FileName) + ReadString file     
         --  textname = ReadString file     
       newmat.diffuseMap.map1 = Bitmaptexture fileName:textname
       if newmat.diffuseMap.map1.alphasource == 0 do     
        (
        newmat.opacityMap = Bitmaptexture fileName:textname
        newmat.opacityMap.monoOutput = 1
        newmat.twoSided = on
        )
       )
           
      if iscolor do (     
       newmat.diffuseMap.map2 = Vertex_Color ()
       if (getVertColor m 1) == black do     
         newmat.diffuseMap.map2Enabled = off
       )
           
      showTextureMap newmat on     
      m.material = newmat
          
      if (xtype == "SS") do (
          
       theSkin = Skin()
       Max Modify Mode
       modPanel.setCurrentObject m
       addModifier m theSkin
           
       local k = ReadShort file  -- bones
       for a = 1 to k do (
             boneobj = getNodeByName (ReadString file)
         print boneobj
         skinOps.addbone theSkin boneobj 1
         )
       completeRedraw ()
       for a = 1 to num do      
         for b = 1 to k do     
          skinOps.SetVertexWeights theSkin a b (ReadFloat file)

       )
           
       return m
      )      
      if (xtype == "SK") do       
      ( -- skin
         local childs = ReadShort file
         local XGroup = dummy name:xomname boxsize: [1,1,1]      
         XBone = bone name:"XBones"
         in XBone (ReadXNode file)
         XBone.parent = XGroup
         for a = 2 to childs do     
        (ReadXNode file).parent = XGroup     
         if matrixtype>0  do
           XGroup.transform = trmatix      
         return XGroup       
      )             
      ( -- group
         local childs = ReadShort file
         local XGroup = dummy name:xomname boxsize: [1,1,1]      

       if childs >0 do
         for a = 1 to childs do     
           (
        obj = ReadXNode file
        --if (classOf obj) != bone do     
        obj.parent = XGroup     
        )
         if matrixtype>0  do
           XGroup.transform = trmatix      
         return XGroup     
      )     
         
          
)    -- end node

function WriteXNode file node =     
(  -- begin node

      WriteString file node.name
      print node.name
      WriteMatrix file (node.transform * ( inverse node.parent.transform ))

      local a
      local numface -- faces
      if  ((classOf node) == Editable_Mesh) then     
       (
        numface = node.numfaces
        local mesh = node
       )
       else
       (
        numface = 0
       )
           
      WriteShort file numface     
      print numface
      if numface>0 then
      ( -- obj

       for a = 1 to numface do
            (
               f = (GetFace mesh a) - [1, 1, 1]
               WriteShort file (f.x as Integer)
               WriteShort file (f.y as Integer)
               WriteShort file (f.z as Integer)
            )
          
      local num = mesh.numverts
        WriteShort file num -- vertex
            
      worldTM = mesh.transform
      InvWorldTM = inverse worldTM
          
       for a = 1 to num do
          (
          vert = (GetVert mesh a)*InvWorldTM
          WriteVector file vert         
          )
         
      --    isnormal = ReadBool file ??
      WriteByte file 1
     --    if isnormal do
       for a = 1 to num do
        (
        vert = (GetNormal mesh a) --*InvWorldTM
           WriteVector file vert     
        )
            
      iscolor = (mesh.material.diffuseMap.map2 != undefined)
          
      if iscolor then (
       WriteByte file 1
       for a = 1 to num do     
        (
        clr = getVertColor mesh a     
         WriteColor file clr
       --    format "%. %\n" a clr
        )     
                
        --WriteColor2 file (meshop.getVDataValue mesh 0 a)     
        --WriteColor2 file (meshop.getMapVert mesh 0 a)     
      ) else WriteByte file 0

       istextcoord = (mesh.material.diffuseMap.map1 != undefined)
         
      if istextcoord then     
      (
       WriteByte file 1
      for a = 1 to num do (
       t = (GetTVert mesh a)       
                WriteFloat file t.x
                WriteFloat file t.y  --(1 - t.y)   -- отображаем координату по Y
       )
      ) else WriteByte file 0
          
      ismat = (mesh.material != undefined)
      if ismat then
       (
       WriteByte file 1     
       WriteString file mesh.material.name
       WriteColor file mesh.material.ambient
       WriteColor file mesh.material.diffuse
       WriteColor file mesh.material.specular
       WriteColor file mesh.material.selfIllumColor
       )
       else
       (
       WriteByte file 0     
       )
          
      istexture = (mesh.material.diffuseMap.map1 != undefined)

      if istexture then
       (
       WriteByte file 1     
       textname = mesh.material.diffuseMap.map1.fileName
       WriteString file (filenameFromPath textname)     
       ) else WriteByte file 0     
           
      )     
      else
      ( -- group
            
       local childs = node.children.count     
       WriteShort file childs
           
       if childs >0 do
       for a = 1 to childs do
        WriteXNode file node.children[a]

      )       
          
)    -- end node

rollout XomRollout "Xom 3D Model Loader" width:179 height:224
(
     button btn2 "Open *.xom3d" pos:[38,50] width:88 height:36
     label lbl1 "Xom 3D Model Loader v.1.2" pos:[16,10] width:138 height:17
     label lbl2 "AlexBond (c) 2009" pos:[33,26] width:88 height:16
     button btn5 "X" pos:[125,26] width:19 height:15
     button btn3 "Save *.xom3d" pos:[37,93] width:88 height:36
     label lbl3 "Xom Animate Loader v.1.0" pos:[24,155] width:128 height:17
     button btn4 "Open *.xac" pos:[37,175] width:88 height:36
     on btn2 pressed do
     (
      FileName = GetOpenFileName types:"Xom 3DModel (*.xom3d)|*.xom3D"
      if (FileName != undefined) do
      (
      file = fopen FileName "rb"     

      FileType = ReadString file
      if FileType == "X3D" then
       (
       XMat = 1
       XGroup = dummy name:"Xom3DModel" boxsize: [1,1,1]         
       trmatix = matrix3 [1, 0, 0] [0, 0, 1] [0, 1, 0] [0, 0, 0]       
       (ReadXNode file).parent = XGroup     
       XGroup.transform = trmatix
       select XGroup     
       )     
       else
       (
       messageBox "Bad Xom3DModel format!!!"     
       )
           
      max tool zoomextents all
      fclose file
      )
     )
     on btn5 pressed do
      removeRollout XomRollout
     on btn3 pressed do
     (
      if ((classOf $)== Dummy)and($.name == "Xom3DModel") then (
       FileName = GetSaveFileName types:"Xom 3DModel (*.xom3d)|*.xom3D"
       if (FileName != undefined) do
       (
        file = fopen FileName "wb"     
           WriteXNode file $.children[1]
        fclose file
       )
      )     
      else
      (
       messageBox "You should select Xom3DModel for save!!!"     
      )
     )
     on btn4 pressed do
     (
      FileName = GetOpenFileName types:"Xom Anim Clip (*.xac)|*.xac"
      if (FileName != undefined) do
      (
      file = fopen FileName "rb"     
         LoadXAnim file
      fclose file
      )
     )
)addRollout XomRollout

Принципиальные отличия форматов Xom3D v1.2 и Xom3D v1.1 можно видеть на рисунке:

Составные объекты теперь склеены воедино.

Прикрепления: 5804656.png (5.7 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Сначала объясни что ты хочешь, и зачем тебе скин червя в одежду? Ты что вместо шапки тело червя вставишь?
Если ты имеешь в виду создание своих Рук (Перчаток), то вообще реализуемо вместо них вставлять Полноценную одежду, которая будет не тупо висеть, а двигаться вместе с червём, изгибаясь вместе с ним. Можно сделать к примеру Рубашку, Костюм, Галстук, даже Доспехи =) Правда для всего этого нужен 3DSMAX и правильный импорт-экспорт 3D модели с костями, что тоже в будущем я сделаю.
Итак замена одежды будет выглядить так:
1. это выбрать шаблонные руки.
2. экспортировать их в формат Xom3D
3. открыть в 3DSMAX полученный Xom3D
4. Вставить 3D Модель на скелет
5. Применить SKIN, т.е. привязку костей к 3D модели
6. Экспортировать полученное в Xom3D из 3DSMAX
7. Импортировать в XomView, заменив модель.

10

А если у меня получиться создать все это =) То можно будет и Самого червя менять!!!, правда менять можно будет лишь на подходящую модель, которую можно связать со скелетом.

Вообще в Идеале 6 Можно заменить и сам Скелет Червя, НО надо при этом заменить ВСЮ Анимацию и ВСЕ руки и ВСЕ оружие на новый скелет, что никто делать не будет 3 И это уже будут не черви 12


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
firsacho, а в этом плане, т.е. он к примеру хочет кожу менять для определенных червей? Ну это движком не поддерживается... Движок загружает лишь одну модель w4worm.xom. Поэтому это нереально. А то что ты предложил, вполне реально, но я в этом не помогу, у меня и так голова другим занята 10

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Хотя.... Если делать описаным мной выше способом, то можно натянуть кожу поверх той что есть, сделав ее чуть больше, чтобы оригинальная кожа была под ней, НО!!! будут глюки, при анимации кожа будет гнуться и нижний слой в местах перегибах будет выступать... Поэтому идея отбрасывается.

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

Вот кое что нашел тут http://chronosphere.home.comcast.net/~chronosphere/tut-wings-shell.htm

Code
f(),
ObjExport = fun (Verts, Faces, FileName) ->
     case (FileName==none) of
         true -> IoDevice = standard_io;
         false -> {ok, IoDevice} = file:open(FileName, write)
     end,
     PrintVert = fun(Vertex) ->
         {X,Y,Z} = Vertex,
         io:fwrite(IoDevice, "v ~9f ~9f ~9f\n", [X,Y,Z]) end,
     PrintIdx = fun(Index) ->
         io:fwrite(IoDevice, " ~w", [Index+1]) end,
     PrintFace = fun(Face) ->
         io:put_chars(IoDevice, "f"),
         lists:foreach(PrintIdx, Face),
         io:put_chars(IoDevice, "\n") end,
     io:fwrite(IoDevice, "# NumVerts: ~p\n", [length(Verts)]),
     io:fwrite(IoDevice, "# NumFaces: ~p\n", [length(Faces)]),
     io:fwrite(IoDevice, "g Mesh\n", []),
     lists:foreach(PrintVert, Verts),
     lists:foreach(PrintFace, Faces),
     file:close(IoDevice)
     end,
rr(wings),
St = wpa:get_state(),
#st{shapes=Shapes} = St,
We = gb_trees:get(1, St#st.shapes),
Vs = array:sparse_to_list(We#we.vp),
Fs = gb_trees:keys(We#we.fs),
Raw = [wings_face:vertex_positions(Face, We) || Face <- Fs],
{Vs2, Fs2} = e3d_util:raw_to_indexed(Raw),
ObjExport(Vs2, Fs2, none).

Если разберусь что это и как это, может что и будет. Но скорого результата не ждите...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (Lex-Serest)
Тут нам придется расшифровывать принцип работы GameSpy.

GameSpy работает лишь с некоторыми не шифрованными данными остальные посылает пакетами.

Я когда делал робота по сбору статистики gamespy то считывал с сервера
Название игры, комнату, количество игроков, версию игры и IP адрес хостера.
http://worms3d-portal.com/portal.php?topic_id=1014

По поводу как это работает можно прочесть тут:
http://aluigi.altervista.org/papers.htm#gslist
http://en.wikipedia.org/wiki/Gslist

Но врятли для осуществления твоего плана нужна эта инфа.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (rocketvadim)
программистов у нас действительно мало.

Главное что они есть 3


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Кто займется написанием проги? =)

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (firsacho)
"Add more free space in music because then easier did replay for music" -там написано.
Дословно: добавьте больше свободного места в музыку, потому чтогда проще сделать переигрывание музыки.

Я у него спросил, он разъяснил, получим перевод (который он имел в виду):
"Добавляйте больше времени для музыки, чтобы получить паузу между реплеем"


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (firsacho)

4 - Время для звука от точки 1. Равное 06. (хз как понять =) прим. пер.)
5 - Время звучания в секундах [if point 1. is 02 and 6. is 00] Максимальное время звучания: 4:25 (FF в 16й СС = 255 в 10й, 255/60=4,25)

Уточненный перевод:

4 - время для типа музыки, если тип 1 = 06 иначе не используется
5 - время для типа звуков, в секундах, если тип 1 = 02 иначе не используется. Максимальное время звучания 4:25 или 255 секунд.


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


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

Игра загружает контейнеры - 1 декодер
Строится дерево - 2 декодер
Выделяется объект - 3 декодер
Проигрывается анимация - 4 декодер...

Надо как-то все переорганизовать.

Нужен Герыч или другой Программер, кто подскажет верный путь...

Задача такова:
1. Загружаются строки и контейнеры, но не их скелеты, все контейнеры делятся на блоки в памяти
2. Строиться дерево по всем загруженным контейнерам, декодируя блоки для получения ссылок ветвей
3. (когда выделяется запись)Строиться Дерево отображения, декодируются блоки в мою структуру TMesh для 3D объектов....

Проблема:
Я три раза делаю одно и тоже, т.е. в памяти XomView не создает структуру объекта, а лишь отображает куски его....
Выход?


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Но что хранить в кэше?

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

У меня и так кэш памяти как бы. Но нужно чтобы был Кэш раскодированной памяти. Которую нужно лишь обработать и вывести.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Желательно создать класс Xom, который будет иметь кучу подклассов, и одну функцию сохранения, учитывающую индекс всех строк, это позволит менять названия объектов, и таблицу строк, при условии что все индексы раскодированы.

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

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

TConteiner = record
point: Pointer; // ссылка на точку в памяти
size: Integer; // размер контейнера
Update: Boolean; // обновлен
CTNR: Boolean; // имеет заголовок
Xtype: XTypes; // тип контейнера
end;

XConteiners = array of TConteiner;

Я создал классы:
TMesh = class
TAnimClip = class

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

Да и запутаться можно в этих классах, когда одно "почти" дерево из
XConteiners сплетается с деревом TMesh которое содержит в себе TAnimClip wacko

В общем надо порядок, и организация, но вот какая?


 
Поиск: