الشبكة العربية لمطوري الألعاب

موهوب  16mofed84 مشاركة 1

ْXNA
كيف يمكن استخدام  physX nVidia او اي شيء اخر ؟؟؟
بشرط ان يعطي دقه  في التلامس بين الاجسام ..ليس مجرد كأن المجسم مكعب او كره ..
وشكرا ...

خبير مدير همام البهنسي مشاركة 2

تقريباً جميع محركات الفيزياء تقدم خيار لكشف تصادم على مستوى المثلثات بدل من المكعب المحيط أو الكرة. كل ما عليك القيام به هو الوصول لهذا الخيار ضمن الواجهة البرمجية لمحرك الفيزياء المستخدم وتفعيله. بهذه الطريقة ستحصل على أعلى دقة للتصادم بين الأجسام، ولكن عليك أن لا تنسى أن تفعيل هذا الخيار للكثير من المجسمات مكلف من حيث الأداء، لذلك حاول قدر الإمكان التقليل منه والاستعاضة بالبدائل الأبسط مثل المكعب وغيره.

موهوب  16mofed84 مشاركة 3

شكرا على ردك ...
ما هي الطريقه ...يعني مثلا ..مثل هذا البنايات ...كيف يمكن عمل ذلك

و لنفترض ان هذا model من 3Ds max
و ان اخر انسان ...او كره
كيف يمكن كشف التصادم ...ليس بالضروره مثلثات ...يمكن تجزيء المجسم الى عدد من المكعبات او الكرات ...BoundingBox



سؤالي كيف يمكن اضافه PhysX من nVidia هو عباره عن DLL  لكني لا اعرف كيف استخدمه ...او اذا كان لدى اي احد فكره اخرى؟
و شكرا
عندما اعرف الجواب سوف اضيف محركي الخاص ..لمن يحب استخدامه

خبير مدير همام البهنسي مشاركة 4

هل ما تبحث عنه هو استخدام محرك الفيزياء ضمن الماكس أم ضمن اللعبة نفسها؟
 
إذا كنت تريد استخدامه ضمن الماكس، عليك تحميل المقبس الخاص به من الموقع التالي:
http://developer.nvidia.com/physx-dcc
ثم تثبيته للنسخة المناسبة للماكس الذي تستخدمه. عمليه التثبيت ستتكفل بكل الإجرائات اللازمة لإضافة مكاتب الـ DLLs.
 
إذا كنت تريد استخدامه ضمن اللعبة الخاصة بك، عليك تحميل مكتبة التطوير API من الرابط التالي:
http://supportcenteronline.com/ics/support/default.asp?deptID=1949
 
بعد تحميل هذه المكتبة يمكنك إدراج الملفات في الفيجوال ستديو والتعامل مع المكتبة برمجياً كما تشاء.

موهوب  16mofed84 مشاركة 5

محرك الفيزياء داخل اللعبه ...
قبل فتره من اخر رد

قمت بتزيلها من
و اكتشفت اني لم انزل PhysX  
http://physxdotnet.codeplex.com/
الذي يحتوي بعض العينات
فهمت كيف تعمل لكن عندما جربت ان اضيف
CCD Skeleton
Per triangle
لكنه يصدر خطأ

موهوب  16mofed84 مشاركة 6

اعتقد ان فيزياء المجسمات للاجسام الثابته مثل الارض

اما الاجسام المتحركه فلها مجسمات ثابته (اسطوانه مكعب ...........

خبير مشرف مؤيد مارديني مشاركة 7

وفي 12 أيار 2011 04:56 م، قال 16mofed84 متحمساً:

فهمت كيف تعمل لكن عندما جربت ان اضيف CCD SkeletonPer triangleلكنه يصدر خطأ

إن وضعت لنا نص الخطأ ربما يمكننا البحث معاً عن حل المشكلة.
بالتوفيق،،

Moayad Mardini,
MSDN Forums Moderator

مبتدئ  Islam Merabtene مشاركة 8

بعض التفاصيل :
TriangleMesh : دقة, حسابات كثيرة وإستخدامها بكثرة قد يسبب بطئ في اللعبة, تستعمل غالبا للأجسام الثابتة
ConvexHull : أقل دقة أكثر سرعة و تستعمل للأجسام المتحركة

موهوب  16mofed84 مشاركة 9

اعتذر عن التأخر ..امتحانات فصلي ..سوف انتهي منها بعد اسبوعين

PhysXCore = new Core(new CoreDescription(), null);
            PhysXCore.SetParameter(PhysicsParameter.VisualizationScale, 2.0f);
            PhysXCore.SetParameter(PhysicsParameter.VisualizeCollisionShapes, true);
            PhysXCore.SetParameter(PhysicsParameter.VisualizeClothMesh, true);
            PhysXCore.SetParameter(PhysicsParameter.VisualizeJointLocalAxes, true);
            PhysXCore.SetParameter(PhysicsParameter.VisualizeJointLimits, true);
            PhysXCore.SetParameter(PhysicsParameter.VisualizeFluidPosition, true);
            PhysXCore.SetParameter(PhysicsParameter.VisualizeFluidEmitters, false); // Slows down rendering a bit to much
            PhysXCore.SetParameter(PhysicsParameter.VisualizeForceFields, true);
            PhysXCore.SetParameter(PhysicsParameter.VisualizeSoftBodyMesh, true);

			SceneDescription sceneDesc = new SceneDescription()
			{
				//SimulationType = SimulationType.Hardware,
				Gravity = new Vector3( 0.0f, -9.81f, 0.0f ),
				GroundPlaneEnabled = true
			};

            PhysXScene = PhysXCore.CreateScene(sceneDesc);


            CCDSkeleton ccdSkeletonForBox;

            // Create a CCD Skeleton
            {
                Vector3 size = new Vector3(5, 5, 5);

                int[] indices =
				{
					0, 1, 3,
					0, 3, 2,
					3, 7, 6,
					3, 6, 2,
					1, 5, 7,
					1, 7, 3,
					4, 6, 7,
					4, 7, 5,
					1, 0, 4,
					5, 1, 4,
					4, 0, 2,
					4, 2, 6
				};

                Vector3[] vertices =
				{
					new Vector3( size.X, -size.Y, -size.Z ),
					new Vector3( size.X, -size.Y, size.Z ),
					new Vector3( size.X, size.Y, -size.Z ),
					new Vector3( size.X,  size.Y,  size.Z ),
					new Vector3( -size.X, -size.Y, -size.Z ),
					new Vector3( -size.X, -size.Y, size.Z ),
					new Vector3( -size.X,  size.Y, -size.Z ),
					new Vector3( -size.X,  size.Y,  size.Z )
				};

                TriangleMeshDescription triangleMeshDesc = new TriangleMeshDescription();
                triangleMeshDesc.AllocateVertices(vertices.Length);
                triangleMeshDesc.AllocateTriangles(indices.Length);

                triangleMeshDesc.VerticesStream.SetData(vertices);
                triangleMeshDesc.TriangleStream.SetData(indices);

                triangleMeshDesc.VertexCount = vertices.Length;
                triangleMeshDesc.TriangleCount = indices.Length / 3;

                ccdSkeletonForBox = PhysXCore.CreateCCDSkeleton(triangleMeshDesc);

                // Enable CCD and CCD Visualization
                PhysXCore.SetParameter(PhysicsParameter.ContinuousCollisionDetection, true);
                PhysXCore.SetParameter(PhysicsParameter.VisualizeContinuousCollisionDetectionTests, true);

            }


          int CurrentID = 0;
            foreach (Entity ent in entities)
            {
                    TriangleMeshShapeDescription ShapeDesc = new TriangleMeshShapeDescription()
                    {
                        TriangleMesh = MeshToMeshShape(ent.vertices,ent.indices),
                        Flags = ShapeFlag.Visualization

                    };
                    ActorDescription actorDesc = new ActorDescription()
                    {
                        Name = ent.Name,
                        //BodyDescription = new BodyDescription(ent.Mass),//problem here
//////////////////////////////////   /////////////////////////////////
////////////////////////////////////////////
//////////////////////////////////////////
///////////////////////////////////////////
//////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
                        GlobalPose = Matrix.CreateTranslation(ent.Position),
                        Shapes = { ShapeDesc }
                    };
                    ent.actor = null;
                    ent.actor = PhysXScene.CreateActor(
                        actorDesc
                        );
                    ent.ActorID = CurrentID;
                    CurrentID++;
            }





        }
        private int[] shortArTointAr(short[] ar)
        {
            int[] ar2 = new int[ar.Length];
            int i = 0;
            foreach (short m in ar)
            {
                ar2[i] = (int)m;
                i++;
            }
            return ar2;
        }
        private TriangleMesh MeshToMeshShape(Vector3[] verts, short[] inds)
        {
            TriangleMeshDescription triangleMeshDesc = new TriangleMeshDescription();
            triangleMeshDesc.TriangleCount = shortArTointAr(inds).Length / 3;
            triangleMeshDesc.VertexCount = verts.Length;

            triangleMeshDesc.AllocateTriangles(triangleMeshDesc.TriangleCount);
            triangleMeshDesc.AllocateVertices(triangleMeshDesc.VertexCount);

            triangleMeshDesc.TriangleStream.SetData(shortArTointAr(inds));
            triangleMeshDesc.VerticesStream.SetData(verts);
            MemoryStream s = new MemoryStream();
            
            Cooking.InitializeCooking();
            Cooking.CookTriangleMesh(triangleMeshDesc, s);
            Cooking.CloseCooking();
            s.Position = 0;
            
            TriangleMesh triangleMesh = PhysXCore.CreateTriangleMesh(s);
            s.Close();
            return triangleMesh;
        }

موهوب  16mofed84 مشاركة 10

class entity
{
model
triangles
and name and other ....mass...
}