التعامل مع ملف ديراكت اكس xfile

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

التعامل مع ملف ديراكت اكس xfile

مُساهمة  vb6 الى vb15 في الثلاثاء يونيو 20, 2017 12:50 am

السلام عليكم ورحمه الله
01/...........اول شيئ نقوم بتصدير ملف اكس ونسميه مثلا  cube.x  وهو عباره عن مكعب او اي مجسم   بواسطه برنامج بلندر
ليكن في علمك ان برنامج بلندر يصدر المشهد كاول فرام  لذالك نقوم بازالته يدويا او بواسطه برنامج  محول  نصنعه نحن ... تابع لتفهم جيدا...

02/..........لدينا ملف اكس  cube.x
افتح هذا الملف بواسطه اي محرر نص ستجد بداخله ما يلي
الكود:
xof 0303txt 0032

Frame Root {
  FrameTransformMatrix {
    1.000000, 0.000000, 0.000000, 0.000000,
    0.000000,-0.000000, 1.000000, 0.000000,
    0.000000, 1.000000, 0.000000, 0.000000,
    0.000000, 0.000000, 0.000000, 1.000000;;
  }
  Frame Cube {
    FrameTransformMatrix {
      1.000000, 0.000000, 0.000000, 0.000000,
      0.000000, 1.000000, 0.000000, 0.000000,
      0.000000, 0.000000, 1.000000, 0.000000,
      0.000000, 0.000000, 0.000000, 1.000000;;
    }
    Mesh { // Cube mesh
      8;
      1.000000; 1.000000;-1.000000;,
      1.000000;-1.000000;-1.000000;,
      -1.000000;-1.000000;-1.000000;,
      -1.000000; 1.000000;-1.000000;,
      1.000000; 0.999999; 1.000000;,
      0.999999;-1.000001; 1.000000;,
      -1.000000;-1.000000; 1.000000;,
      -1.000000; 1.000000; 1.000000;;
      6;
      4;3,2,1,0;,
      4;5,6,7,4;,
      4;1,5,4,0;,
      4;2,6,5,1;,
      4;3,7,6,2;,
      4;7,3,0,4;;
      MeshNormals { // Cube normals
        6;
        0.000000; 0.000000;-1.000000;,
        0.000000;-0.000000; 1.000000;,
        1.000000;-0.000000; 0.000000;,
        -0.000000;-1.000000;-0.000000;,
        -1.000000; 0.000000;-0.000000;,
        0.000000; 1.000000; 0.000000;;
        6;
        4;0,0,0,0;,
        4;1,1,1,1;,
        4;2,2,2,2;,
        4;3,3,3,3;,
        4;4,4,4,4;,
        4;5,5,5,5;;
      } // End of Cube normals
      MeshMaterialList { // Cube material list
        1;
        6;
        0,
        0,
        0,
        0,
        0,
        0;;
        Material Material {
          0.640000; 0.640000; 0.640000; 1.000000;;
          96.078431;
          0.500000; 0.500000; 0.500000;;
          0.000000; 0.000000; 0.000000;;
        }
      } // End of Cube material list
    } // End of Cube mesh
  } // End of Cube
} // End of Root
كما ترى فان اول فرام هي روت وهي المشهد  .وهي البارنت او الاب للفرامات الاخرى  لذالك نقوم بازالتها حتى حتى تكون فرام المجسمات في top level
قم بحذف الفرام  روت  الاولى  والفرام الثانيه وهي فرام المتركس الخاصه بالفرام الاولى
هذه الاشياء تكون في اوائل السطر لذالك احذفهم
الكود:

Frame Root {
  FrameTransformMatrix {
    1.000000, 0.000000, 0.000000, 0.000000,
    0.000000,-0.000000, 1.000000, 0.000000,
    0.000000, 1.000000, 0.000000, 0.000000,
    0.000000, 0.000000, 0.000000, 1.000000;;
  }
قم بالبحث وحذف هذا السطر ايضا

الكود:
} // End of Root

قم بحفض الملف الان الملف اكس جاهز للاستعال واستخراج المجسمات والداتا بداخله

03........الخطوه الثالثه ...تذكر ليس دائما ملف اكس يمكن ان تعدله يدويا  فقط ان كان محفوض بطريقه تكتس  ...اما اذا تم حفضه ك binary فانه عباره رموز وخالوطه وليس تكس  لذالك نقوم بصناعه برنامج محول وهي داله واحده تحذف لنا فرام المشهد   وتجهز لنا ملف اكس المصدر من البلندر
مثل هذه الداله .......
الكود:
'-----------------------------------------------------------------------------
' Name: addFrom_blender_x
' Desc: ÊÍæíá ÇáãáÝ ÇáãÕÏÑ ãä ÈÑäÇãÌ ÈáäÏÑ ÞÈá ÊÍãíá ÇáÏÇÊÇ
'-----------------------------------------------------------------------------
Public Function addFrom_blender_x(strFile As String)
g_bLoadSkins = True
    Dim xfile As DirectXFile
    Dim enumX As DirectXFileEnum
    Dim ChildData As DirectXFileData
    Dim FileData(20) As DirectXFileData
    Dim kDirectXFileSave As DirectXFileSave
    Dim k As Long
    Set xfile = kDirectX8.DirectXFileCreate()
    xfile.RegisterDefaultTemplates
    On Local Error Resume Next
    Set enumX = xfile.CreateEnumObject(strFile)
    Set kDirectXFileSave = xfile.CreateSaveObject(App.Path & "\temp.x", 1)
    Do
        Set ChildData = enumX.GetNextDataObject()
        If ChildData Is Nothing Then Exit Do
        If ChildData.GetType = "TID_D3DRMFrame" Then
          Do Until FileData(0).GetType = "TID_D3DRMFrame"
          Set FileData(0) = ChildData.GetNextObject()
          If FileData(0) Is Nothing Then Exit Do
          If FileData(0).GetType = "TID_D3DRMFrame" Then kDirectXFileSave.SaveData FileData(0)
          Loop
          Do Until FileData(0) Is Nothing
          Set FileData(0) = ChildData.GetNextObject()
          If FileData(0) Is Nothing Then Set FileData(0) = ChildData.GetNextObject()
          If FileData(0).GetType = "TID_D3DRMFrame" Then kDirectXFileSave.SaveData FileData(0)
          Loop
        ElseIf ChildData.GetType = "TID_D3DRMMesh" Then
        kDirectXFileSave.SaveData ChildData

        ElseIf ChildData.GetType = "TID_D3DRMAnimationSet" Then
        kDirectXFileSave.SaveData ChildData
        ElseIf ChildData.GetType = "TID_D3DRMMaterialSet" Then
        kDirectXFileSave.SaveData ChildData
        End If
    Loop
    Set xfile = Nothing
    Set enumX = Nothing
    Set ChildData = Nothing
    Set kDirectXFileSave = Nothing
    Exit Function
    Call addFromFile(App.Path & "\temp.x", Nothing)
    kill App.Path & "\temp.x"
End Function

يتبع انشاء الله هذا الموضوع .....ويكمل في وقت اخر لقله الوقت   والسسلام عليكم

vb6 الى vb15
عضو
عضو

عدد المساهمات : 5
نقاط : 15
تاريخ التسجيل : 28/10/2016

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: التعامل مع ملف ديراكت اكس xfile

مُساهمة  alla23 في الأحد يونيو 25, 2017 1:38 am

موضوع جميل جدا وشكرا

على المعلومات القيمة التي تفضلت بها
avatar
alla23
عضو ماسي
عضو ماسي

عدد المساهمات : 77
نقاط : 197
تاريخ التسجيل : 26/05/2013
الموقع : http://delph.forumalgerie.net

http://delph.forumalgerie.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى