التعديل على المجسمات(modeling)
صفحة 1 من اصل 1 • شاطر
التعديل على المجسمات(modeling)
السلام ورحمه الله تعالى وبركاته والصلاه والسلام على خير البريه
لماذا vb6 لانها لغه مشهوره وسهله ولها امثله كثيره في الشبكه
في directx9 يوجد الدالتينD3DXMesh.GetAttributeTable......D3DXMesh.setAttributeTable
في directx8 يوجد فقط الداله .....D3DXMesh.GetAttributeTable
بما ان الذي يهمنا هو directx8 ...
مثلا لدينا مجسم مكون من 1000 وجه و 2000 نقطه ...نريد ان نعرف الوجه رقم 500 لاي مقطع من المجسم واي متريال وتكشتر مفعل عليه
dim mesh as D3DXMesh
dim AttributeTable(10) as D3DXATTRIBUTERANGE
dim id as long
بعد الاعلانات الان الداله
mesh.GetAttributeTable AttribTable(0), id
كما ترى الداله تعود لنا بقيمتين
id وهو عدد الاجزاء في المجسم وهو نفسه عدد الماتريال وهو نفسه عدد التكستر
AttributeTable مصفوفه من 11 عنصر من 0 الى 10 ..تحمل قيمه من نوع التركيب D3DXATTRIBUTERANGE
Type D3DXATTRIBUTERANGE
AttribId As Long
FaceCount As Long
FaceStart As Long
VertexCount As Long
VertexStart As Long
End Type
AttribTable(0).AttribId تعني رقم المقطع في المجسم
AttribTable(0).FaceCount تعني تعني عدد الاوجه في المقطع رقم0 المفعل عليها متريال وتكستر رقم 0
مثلا لدينا مجسم من 5000 وجه و7000 نقطه نريد تقسيمه الى ثلاثه اجزاء كل مجموعه من النقاط نفعل عليها متريال وتكستر خاص بها ..
Dim data() As Long: ReDim data(mesh.GetNumFaces - 1) As Long
Dim i As Long: For i = 0 To mesh.GetNumFaces - 1
If i < 2000 Then
data(i) = 0
ElseIf i > 4000 Then
data(i) = 2
Else: data(i) = 1: End If: Next i
DXCopyMemory ByVal mesh.LockAttributeBuffer(D3DLOCK_DISCARD), data(0), Len(data(0)) * mesh.GetNumFaces()
mesh.unLockAttributeBuffer
ما الذي فعلناه في الداله السابقه قمنا بالاعلان عن المصفوفه data() من نوع long عدد عناصرها هو عدد الاوجه في المجسم ثم اعطينا قيمه لكل عنصر اي اعطينا عدد لكل وجه في المجسم يمثل رقم المقطع المقطع والماتريال والتكشتر
قمنا بااستدعاء attribitbuffer لتغييره ..بواسطه داله DXCopyMemory
وفي الاخير انهينا العمل mesh.unLockAttributeBuffer
وفي الاخير ستجد هذه الدوال في مشروعنا مفتوح المصدر هنا لمن يريد الانضمام لتحسين واجهه البرنامج واضافه دوال وابداعات اخرى مشكور
https://ahl-dz.yoo7.com/t167-topic
لماذا vb6 لانها لغه مشهوره وسهله ولها امثله كثيره في الشبكه
في directx9 يوجد الدالتينD3DXMesh.GetAttributeTable......D3DXMesh.setAttributeTable
في directx8 يوجد فقط الداله .....D3DXMesh.GetAttributeTable
بما ان الذي يهمنا هو directx8 ...
مثلا لدينا مجسم مكون من 1000 وجه و 2000 نقطه ...نريد ان نعرف الوجه رقم 500 لاي مقطع من المجسم واي متريال وتكشتر مفعل عليه
dim mesh as D3DXMesh
dim AttributeTable(10) as D3DXATTRIBUTERANGE
dim id as long
بعد الاعلانات الان الداله
mesh.GetAttributeTable AttribTable(0), id
كما ترى الداله تعود لنا بقيمتين
id وهو عدد الاجزاء في المجسم وهو نفسه عدد الماتريال وهو نفسه عدد التكستر
AttributeTable مصفوفه من 11 عنصر من 0 الى 10 ..تحمل قيمه من نوع التركيب D3DXATTRIBUTERANGE
Type D3DXATTRIBUTERANGE
AttribId As Long
FaceCount As Long
FaceStart As Long
VertexCount As Long
VertexStart As Long
End Type
AttribTable(0).AttribId تعني رقم المقطع في المجسم
AttribTable(0).FaceCount تعني تعني عدد الاوجه في المقطع رقم0 المفعل عليها متريال وتكستر رقم 0
مثلا لدينا مجسم من 5000 وجه و7000 نقطه نريد تقسيمه الى ثلاثه اجزاء كل مجموعه من النقاط نفعل عليها متريال وتكستر خاص بها ..
Dim data() As Long: ReDim data(mesh.GetNumFaces - 1) As Long
Dim i As Long: For i = 0 To mesh.GetNumFaces - 1
If i < 2000 Then
data(i) = 0
ElseIf i > 4000 Then
data(i) = 2
Else: data(i) = 1: End If: Next i
DXCopyMemory ByVal mesh.LockAttributeBuffer(D3DLOCK_DISCARD), data(0), Len(data(0)) * mesh.GetNumFaces()
mesh.unLockAttributeBuffer
ما الذي فعلناه في الداله السابقه قمنا بالاعلان عن المصفوفه data() من نوع long عدد عناصرها هو عدد الاوجه في المجسم ثم اعطينا قيمه لكل عنصر اي اعطينا عدد لكل وجه في المجسم يمثل رقم المقطع المقطع والماتريال والتكشتر
قمنا بااستدعاء attribitbuffer لتغييره ..بواسطه داله DXCopyMemory
وفي الاخير انهينا العمل mesh.unLockAttributeBuffer
وفي الاخير ستجد هذه الدوال في مشروعنا مفتوح المصدر هنا لمن يريد الانضمام لتحسين واجهه البرنامج واضافه دوال وابداعات اخرى مشكور
https://ahl-dz.yoo7.com/t167-topic
vb6 الى vb20- عضو
- عدد المساهمات : 10
نقاط : 32
تاريخ التسجيل : 11/10/2016
الموقع : ahl-dz.yoo7.com/f28-montada
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى