kldoon

الدرس السادس من سلسلة دروس تعلم 3d Xna

4 ردود في هذا الموضوع

بســم الله الـرحمــن الرحيــم

الدرس السادس

أهلا بكم في الدرس السادس من سلسلة دروس تعلم ال3D Xna السلسلة الأولى، في هذا الدرس سوف نقوم بإنشاء الرؤوس من خلال الفهارس.

كان المثلث جميلا، ولكن ماذا عن مجموعة من المثلثات؟ سوف نحتاج لأن نعرف 3 رؤوس لكل مثلث. لاحظ المثال التالي:

post-133895-1248537086_thumb.jpg

هناك 4 رؤوس فريدة من أصل 6. لذا الرأسين الآخرين هم ببساطة مجرد إضاعة لطاقة بطاقة الرسوميات! لذلك من الأفضل تعريف 4 رؤوس في مصفوفة من 0 إلى 3، و بعدها تعريف المثلث الأول من الرؤوس 1،2 و 3 و المثلث الثاني بإستخدام الرؤوس 2,3 و 4. بهذه الطريقة، لن تتكرر بيانات الرؤوس المركبة. هذه هي الفكرة بالضبط من وراء الفهارس. إفترض أننا نريد أن نرسم هذين المثلثين:

post-133895-1248537153_thumb.jpg

في الوضع الطبيعي يجب علينا تعريف 6 رؤوس، ولكن الآن يجب علينا تعريف 5 رؤوس فقط. لذا قم بتغيير الدالة SetUpVertices كالتالي:

 private void SetUpVertices()
{
vertices = new VertexPositionColor[5];

vertices[0].Position = new Vector3(0f, 0f, 0f);
vertices[0].Color = Color.White;
vertices[1].Position = new Vector3(5f, 0f, 0f);
vertices[1].Color = Color.White;
vertices[2].Position = new Vector3(10f, 0f, 0f);
vertices[2].Color = Color.White;
vertices[3].Position = new Vector3(5f, 0f, -5f);
vertices[3].Color = Color.White;
vertices[4].Position = new Vector3(10f, 0f, -5f);
vertices[4].Color = Color.White;

myVertexDeclaration = new VertexDeclaration(device, VertexPositionColor.VertexElements);
}

الرؤوس من 0 إلى 2 تقع على المحور X الموجب، الرؤوس 3 و 4 لها قيمة سالبة للإحداثي Z، بما أن ال Xna تعتبر محور Z السالب متجهه للأمام (للداخل). بما أن الرؤوس معرفة بإتجاه الأمام، فإن المثلثات الناتجه لن تكون مسطحة.

بعدها، سوف نقوم بإنشاء مجموعة من الفهارس. كما تحدثنا سابقا، الفهارس تشير إلى الرؤوس الموجودة في مصفوفة الرؤوس. الفهارس تحدد المثلثات، لذا سوف نحتاج من أجل مثلثين أن نقوم بتعريف 6 فهارس. إبدأ بتعريف مصفوفة في أعلى كود الصنف. بما أن الفهارس عبارة عن أرقام صحيحة “Integer”، يجب علينا تعريف مصفوفة بإمكانها إحتواء الأرقام الصحيحة:

 int[] indices;

دعنا نقوم بإنشاء دالة صغيرة جديدة تقوم بتعبئة مصفوفة الفهارس.

 private void SetUpIndices()
{
indices = new int[6];

indices[0] = 3;
indices[1] = 1;
indices[2] = 0;
indices[3] = 4;
indices[4] = 2;
indices[5] = 1;
}

كما تلاحظ، هذه الدالة تعرف 6 فهارس، يحددون مثلثين. الرأس رقم 1 يتم إستعماله مرتين، و هو هدفنا الأول كما ترى في الصورة السابقة. في هذه الحالة، الفائدة من العملية كانت قليلة إلى حد ما، ولكن في التطبيقات الأكبر (كما سوف ترى قريبا) ستكون هذه الطريقة الأفضل التي يجب إتباعها. لاحظ أيضا أن المثلثات تم تعريفهم بالترتيب بإتجاه عقارب الساعه مرة أخرى، لذا سوف ترى ال Xna هذه المثلثات بإعتبارها مواجهة للكاميرات ولن يتم غربلتهم.

تأكد من إستدعاء هذه الدالة من داخل الدالة LoadContent:

 SetUpIndices();

كل ما تبقى لدينا في هذا الدرس هو أن نرسم المثلثات من الذاكرة “Buffer”! قم بتغيير السطر التالي في داخل الدالة Draw:

 device.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices, 0, vertices.Length, indices, 0, indices.Length / 3);

بدلا من الدالة DrawUserPrimitives، هذه المرة قمنا بإستدعاء الدالة DrawUserIndexedPrimitives. هذا سوف يتيح لنا أن نحدد مصفوفة للرؤوس و مصفوفة للفهارس. الوسيط الأخير يحدد كم عدد المثلثات المعرفة من خلال هذه الفهارس. بما أن المثلث يتم تحديدة بواسطة 3 فهارس، قمنا بتحديد عدد الفهارس مقسوما على 3.

قبل أن تجرب هذا الكود، قم بإيقاف المثلثات عن الدوران من خلال إعادة ضبط مصفوفة العالم الخاصة بهم إلى مصفوفة وحدة “Unity”. المصفوفة المحايدة هي مصفوفة الوحدة، لذا سوف يتم إستخدام إحداثيات العالم الأصلية.

 Matrix worldMatrix = Matrix.Identity;

هذا كل شيئ! عندما تقوم بتشغيل البرنامج، بكل الأحوال لن يكون هناك الكثير لتشاهده. هذا لأن كل من المثلثين و الكاميرا واقعين على الأرضية! يجب علينا تغيير موقع الكاميرا بحيث تصبح المثلثات في مجال رؤية الكاميرا. لذا إتجه إلى الدالة SetUpCamera، و قم بتغير موقع الكاميرا بحيث بحيث تقع فوق إحداثي نقطة الأصل الخاصة بنا (0,0,0):

 viewMatrix = Matrix.CreateLookAt(new Vector3(0, 50, 0), new Vector3(0, 0, 0), new Vector3(0, 0, -1));

قمنا بوضع الكاميرا فوق نقطة الأصل ب 50 وحدة، بما أن الXna تعتبر محور Y هو المتجهه للأعلى. بكل الأحوال، لأن الكاميرا تنظر إلى الأسفل، لن يكون بإمكانك إعتبار المتجه (0,1,0) بإعتباره المتجهه الخارج للأعلى بالنسبة للكاميرا! لذلك قمنا بتحديد المتجهه (0,0,-1) المتجهه للأمام بإعتباره المتجه للأعلى بالنسبة للكاميرا.

الآن عندما تقوم بتشغيل الكود، يجب عليك أن ترى كل من المثلثين، ولكنهما ما زالا معبئين. حاول وضع السطر التالي في السطر الأول في الدالة Draw:

 device.RenderState.FillMode = FillMode.WireFrame;

سوف يؤدي ذلك إلى رسم الحواف الخاصة بالمثلثات، بدلا من تعبئتهما.

post-133895-1248537176_thumb.jpg

إذا لم يقم هذا الدرس أو الدرس التالي برسم أي مثلثات على الشاشة لديك، فإن الإحتمالات قد تكون أن بطاقة الرسوميات لديك غير متوافقه مع الرسم من عدة فهارس. لحل هذه المشكلة، قم بتخزين الفهارس كمتغيرات من نوع “Shorts” بدلا من ال “Integers”. قم بتعريف المصفوفة كالتالي:

 short[] indices;

و في الدالة SetUpIndices، قم بتجهيزه كالتالي:

 indices = new short[6];

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

الفائدة من إستخدام الفهارس في هذا المثال ليست كبيرة جدا، حيث قمنا بتمرير 5 رؤوس بدلا من 6. في الدرس القادم سوف تكون الفائدة أكبر بكثير.

حاول تطبيق التمارين التالية للممارسة ما تعلمته:

• حاول رسم مثلث يتكون من الرؤوس 1,3 و 4. التغيير الوحيد الذي سوف تحتاجه هو في داخل الدالة SetUpIndices.

• قم بإستخدام متجه آخر مثل (1,0,0) بإعتباره المتجه الخارج للأعلى بالنسبة لمصفوفة عرض الكاميرا.

نسخة عن الدرس بصيغة PDF:

Learn3D_Xna_S1L6.pdf

الكود حتى الآن:

انسخ الكود
  1. using [color= #990000;]System[/color][color= #339933;];[/color]
  2. using [color= #990000;]System[/color][color= #339933;].[/color]Collections[color= #339933;].[/color]Generic[color= #339933;];[/color]
  3. using Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;];[/color]
  4. using Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;].[/color]Audio[color= #339933;];[/color]
  5. using Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;].[/color]Content[color= #339933;];[/color]
  6. using Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;].[/color]GamerServices[color= #339933;];[/color]
  7. using Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;].[/color]Graphics[color= #339933;];[/color]
  8. using Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;].[/color]Input[color= #339933;];[/color]
  9. using Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;].[/color]Net[color= #339933;];[/color]
  10. using Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;].[/color]Storage[color= #339933;];[/color]
  11.  
  12. namespace XNAtutorial
  13. [color= #009900;]{[/color]
  14. [color= #000000; font-weight: bold;]public[/color] [color= #000000; font-weight: bold;]class[/color] Game1 [color= #339933;]:[/color] Microsoft[color= #339933;].[/color]Xna[color= #339933;].[/color]Framework[color= #339933;].[/color]Game
  15. [color= #009900;]{[/color]
  16. GraphicsDeviceManager graphics[color= #339933;];[/color]
  17. SpriteBatch spriteBatch[color= #339933;];[/color]
  18. GraphicsDevice device[color= #339933;];[/color]
  19. Effect effect[color= #339933;];[/color]
  20. VertexPositionColor[color= #009900;][[/color][color= #009900;]][/color] vertices[color= #339933;];[/color]
  21. VertexDeclaration myVertexDeclaration[color= #339933;];[/color]
  22. int[color= #009900;][[/color][color= #009900;]][/color] indices[color= #339933;];[/color]
  23.  
  24. Matrix viewMatrix[color= #339933;];[/color]
  25. Matrix projectionMatrix[color= #339933;];[/color]
  26.  
  27. [color= #000000; font-weight: bold;]private[/color] float angle [color= #339933;]=[/color] 0f[color= #339933;];[/color]
  28.  
  29. [color= #000000; font-weight: bold;]public[/color] Game1[color= #009900;]([/color][color= #009900;])[/color]
  30. [color= #009900;]{[/color]
  31. graphics [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] GraphicsDeviceManager[color= #009900;]([/color]this[color= #009900;])[/color][color= #339933;];[/color]
  32. Content[color= #339933;].[/color]RootDirectory [color= #339933;]=[/color] [color= #0000ff;]"Content"[/color][color= #339933;];[/color]
  33. [color= #009900;]}[/color]
  34.  
  35. protected override void Initialize[color= #009900;]([/color][color= #009900;])[/color]
  36. [color= #009900;]{[/color]
  37. graphics[color= #339933;].[/color]PreferredBackBufferWidth [color= #339933;]=[/color] [color= #cc66cc;]500[/color][color= #339933;];[/color]
  38. graphics[color= #339933;].[/color]PreferredBackBufferHeight [color= #339933;]=[/color] [color= #cc66cc;]500[/color][color= #339933;];[/color]
  39. graphics[color= #339933;].[/color]IsFullScreen [color= #339933;]=[/color] [color= #000000; font-weight: bold;]false[/color][color= #339933;];[/color]
  40. graphics[color= #339933;].[/color]ApplyChanges[color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  41. Window[color= #339933;].[/color]Title [color= #339933;]=[/color] [color= #0000ff;]"Riemer's XNA Tutorials -- Series 1"[/color][color= #339933;];[/color]
  42.  
  43. base[color= #339933;].[/color]Initialize[color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  44. [color= #009900;]}[/color]
  45.  
  46. protected override void LoadContent[color= #009900;]([/color][color= #009900;])[/color]
  47. [color= #009900;]{[/color]
  48. device [color= #339933;]=[/color] graphics[color= #339933;].[/color]GraphicsDevice[color= #339933;];[/color]
  49. spriteBatch [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] SpriteBatch[color= #009900;]([/color]GraphicsDevice[color= #009900;])[/color][color= #339933;];[/color]
  50.  
  51. effect [color= #339933;]=[/color] Content[color= #339933;].[/color]Load[color= #339933;]<[/color]Effect[color= #339933;]>[/color] [color= #009900;]([/color][color= #0000ff;]"effects"[/color][color= #009900;])[/color][color= #339933;];[/color]
  52. SetUpVertices[color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  53. SetUpCamera[color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  54.  
  55. SetUpIndices[color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  56. [color= #009900;]}[/color]
  57.  
  58. [color= #000000; font-weight: bold;]private[/color] void SetUpVertices[color= #009900;]([/color][color= #009900;])[/color]
  59. [color= #009900;]{[/color]
  60. vertices [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] VertexPositionColor[color= #009900;][[/color][color= #cc66cc;]5[/color][color= #009900;]][/color][color= #339933;];[/color]
  61.  
  62. vertices[color= #009900;][[/color][color= #cc66cc;]0[/color][color= #009900;]][/color][color= #339933;].[/color]Position [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] Vector3[color= #009900;]([/color]0f[color= #339933;],[/color] 0f[color= #339933;],[/color] 0f[color= #009900;])[/color][color= #339933;];[/color]
  63. vertices[color= #009900;][[/color][color= #cc66cc;]0[/color][color= #009900;]][/color][color= #339933;].[/color]Color [color= #339933;]=[/color] Color[color= #339933;].[/color]White[color= #339933;];[/color]
  64. vertices[color= #009900;][[/color][color= #cc66cc;]1[/color][color= #009900;]][/color][color= #339933;].[/color]Position [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] Vector3[color= #009900;]([/color]5f[color= #339933;],[/color] 0f[color= #339933;],[/color] 0f[color= #009900;])[/color][color= #339933;];[/color]
  65. vertices[color= #009900;][[/color][color= #cc66cc;]1[/color][color= #009900;]][/color][color= #339933;].[/color]Color [color= #339933;]=[/color] Color[color= #339933;].[/color]White[color= #339933;];[/color]
  66. vertices[color= #009900;][[/color][color= #cc66cc;]2[/color][color= #009900;]][/color][color= #339933;].[/color]Position [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] Vector3[color= #009900;]([/color]10f[color= #339933;],[/color] 0f[color= #339933;],[/color] 0f[color= #009900;])[/color][color= #339933;];[/color]
  67. vertices[color= #009900;][[/color][color= #cc66cc;]2[/color][color= #009900;]][/color][color= #339933;].[/color]Color [color= #339933;]=[/color] Color[color= #339933;].[/color]White[color= #339933;];[/color]
  68. vertices[color= #009900;][[/color][color= #cc66cc;]3[/color][color= #009900;]][/color][color= #339933;].[/color]Position [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] Vector3[color= #009900;]([/color]5f[color= #339933;],[/color] 0f[color= #339933;],[/color] [color= #339933;]-[/color]5f[color= #009900;])[/color][color= #339933;];[/color]
  69. vertices[color= #009900;][[/color][color= #cc66cc;]3[/color][color= #009900;]][/color][color= #339933;].[/color]Color [color= #339933;]=[/color] Color[color= #339933;].[/color]White[color= #339933;];[/color]
  70. vertices[color= #009900;][[/color][color= #cc66cc;]4[/color][color= #009900;]][/color][color= #339933;].[/color]Position [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] Vector3[color= #009900;]([/color]10f[color= #339933;],[/color] 0f[color= #339933;],[/color] [color= #339933;]-[/color]5f[color= #009900;])[/color][color= #339933;];[/color]
  71. vertices[color= #009900;][[/color][color= #cc66cc;]4[/color][color= #009900;]][/color][color= #339933;].[/color]Color [color= #339933;]=[/color] Color[color= #339933;].[/color]White[color= #339933;];[/color]
  72.  
  73. myVertexDeclaration [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] VertexDeclaration[color= #009900;]([/color]device[color= #339933;],[/color] VertexPositionColor[color= #339933;].[/color]VertexElem
    ents[color= #009900;])[/color][color= #339933;];[/color]
  74. [color= #009900;]}[/color]
  75.  
  76. [color= #000000; font-weight: bold;]private[/color] void SetUpIndices[color= #009900;]([/color][color= #009900;])[/color]
  77. [color= #009900;]{[/color]
  78. indices [color= #339933;]=[/color] [color= #000000; font-weight: bold;]new[/color] int[color= #009900;][[/color][color= #cc66cc;]6[/color][color= #009900;]][/color][color= #339933;];[/color]
  79.  
  80. indices[color= #009900;][[/color][color= #cc66cc;]0[/color][color= #009900;]][/color] [color= #339933;]=[/color] [color= #cc66cc;]3[/color][color= #339933;];[/color]
  81. indices[color= #009900;][[/color][color= #cc66cc;]1[/color][color= #009900;]][/color] [color= #339933;]=[/color] [color= #cc66cc;]1[/color][color= #339933;];[/color]
  82. indices[color= #009900;][[/color][color= #cc66cc;]2[/color][color= #009900;]][/color] [color= #339933;]=[/color] [color= #cc66cc;]0[/color][color= #339933;];[/color]
  83. indices[color= #009900;][[/color][color= #cc66cc;]3[/color][color= #009900;]][/color] [color= #339933;]=[/color] [color= #cc66cc;]4[/color][color= #339933;];[/color]
  84. indices[color= #009900;][[/color][color= #cc66cc;]4[/color][color= #009900;]][/color] [color= #339933;]=[/color] [color= #cc66cc;]2[/color][color= #339933;];[/color]
  85. indices[color= #009900;][[/color][color= #cc66cc;]5[/color][color= #009900;]][/color] [color= #339933;]=[/color] [color= #cc66cc;]1[/color][color= #339933;];[/color]
  86. [color= #009900;]}[/color]
  87.  
  88. [color= #000000; font-weight: bold;]private[/color] void SetUpCamera[color= #009900;]([/color][color= #009900;])[/color]
  89. [color= #009900;]{[/color]
  90. viewMatrix [color= #339933;]=[/color] Matrix[color= #339933;].[/color]CreateLookAt[color= #009900;]([/color][color= #000000; font-weight: bold;]new[/color] Vector3[color= #009900;]([/color][color= #cc66cc;]0[/color][color= #339933;],[/color] [color= #cc66cc;]50[/color][color= #339933;],[/color] [color= #cc66cc;]0[/color][color= #009900;])[/color][color= #339933;],[/color] [color= #000000; font-weight: bold;]new[/color] Vector3[color= #009900;]([/color][color= #cc66cc;]0[/color][color= #339933;],[/color] [color= #cc66cc;]0[/color][color= #339933;],[/color] [color= #cc66cc;]0[/color][color= #009900;])[/color][color= #339933;],[/color] [color= #000000; font-weight: bold;]new[/color]
    Vector3[color= #009900;]([/color][color= #cc66cc;]0[/color][color= #339933;],[/color] [color= #cc66cc;]0[/color][color= #339933;],[/color] [color= #cc66cc;]-1[/color][color= #009900;])[/color][color= #009900;])[/color][color= #339933;];[/color]
  91. projectionMatrix [color= #339933;]=[/color] Matrix[color= #339933;].[/color]CreatePerspectiveFieldOfView[color= #009900;]([/color]MathHelper[color= #339933;].[/color]PiOver4[color= #339933;],[/color] device[color= #339933;].[/color]
    Viewport[color= #339933;].[/color]AspectRatio[color= #339933;],[/color] [color= #cc66cc;]1[/color][color= #339933;].[/color]0f[color= #339933;],[/color] [color= #cc66cc;]300[/color][color= #339933;].[/color]0f[color= #009900;])[/color][color= #339933;];[/color]
  92. [color= #009900;]}[/color]
  93.  
  94. protected override void UnloadContent[color= #009900;]([/color][color= #009900;])[/color]
  95. [color= #009900;]{[/color]
  96. [color= #009900;]}[/color]
  97.  
  98. protected override void Update[color= #009900;]([/color]GameTime gameTime[color= #009900;])[/color]
  99. [color= #009900;]{[/color]
  100. [color= #b1b100;]if[/color] [color= #009900;]([/color]GamePad[color= #339933;].[/color]GetState[color= #009900;]([/color]PlayerIndex[color= #339933;].[/color]One[color= #009900;])[/color][color= #339933;].[/color]Buttons[color= #339933;].[/color]Back [color= #339933;]==[/color] ButtonState[color= #339933;].[/color]Pressed[color= #009900;])[/color]
  101. this[color= #339933;].[/color][color= #990000;]Exit[/color][color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  102.  
  103. base[color= #339933;].[/color]Update[color= #009900;]([/color]gameTime[color= #009900;])[/color][color= #339933;];[/color]
  104. [color= #009900;]}[/color]
  105.  
  106. protected override void Draw[color= #009900;]([/color]GameTime gameTime[color= #009900;])[/color]
  107. [color= #009900;]{[/color]
  108. device[color= #339933;].[/color]Clear[color= #009900;]([/color]Color[color= #339933;].[/color]DarkSlateBlue[color= #009900;])[/color][color= #339933;];[/color]
  109. device[color= #339933;].[/color]RenderState[color= #339933;].[/color]CullMode [color= #339933;]=[/color] CullMode[color= #339933;].[/color]None[color= #339933;];[/color]
  110. device[color= #339933;].[/color]RenderState[color= #339933;].[/color]FillMode [color= #339933;]=[/color] FillMode[color= #339933;].[/color]WireFrame[color= #339933;];[/color]
  111.  
  112. effect[color= #339933;].[/color]CurrentTechnique [color= #339933;]=[/color] effect[color= #339933;].[/color]Techniques[color= #009900;][[/color][color= #0000ff;]"Colored"[/color][color= #009900;]][/color][color= #339933;];[/color]
  113. effect[color= #339933;].[/color]Parameters[color= #009900;][[/color][color= #0000ff;]"xView"[/color][color= #009900;]][/color][color= #339933;].[/color]SetValue[color= #009900;]([/color]viewMatrix[color= #009900;])[/color][color= #339933;];[/color]
  114. effect[color= #339933;].[/color]Parameters[color= #009900;][[/color][color= #0000ff;]"xProjection"[/color][color= #009900;]][/color][color= #339933;].[/color]SetValue[color= #009900;]([/color]projectionMatrix[color= #009900;])[/color][color= #339933;];[/color]
  115. effect[color= #339933;].[/color]Parameters[color= #009900;][[/color][color= #0000ff;]"xWorld"[/color][color= #009900;]][/color][color= #339933;].[/color]SetValue[color= #009900;]([/color]Matrix[color= #339933;].[/color]Identity[color= #009900;])[/color][color= #339933;];[/color]
  116.  
  117. effect[color= #339933;].[/color]Begin[color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  118. [color= #b1b100;]foreach[/color] [color= #009900;]([/color]EffectPass pass in effect[color= #339933;].[/color]CurrentTechnique[color= #339933;].[/color]Passes[color= #009900;])[/color]
  119. [color= #009900;]{[/color]
  120. pass[color= #339933;].[/color]Begin[color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  121.  
  122. device[color= #339933;].[/color]VertexDeclaration [color= #339933;]=[/color] myVertexDeclaration[color= #339933;];[/color]
  123. device[color= #339933;].[/color]DrawUserIndexedPrimitives[color= #009900;]([/color]PrimitiveType[color= #339933;].[/color]TriangleList[color= #339933;],[/color] vertices[color= #339933;],[/color] [color= #cc66cc;]0[/color][color= #339933;],[/color] vert
    ices[color= #339933;].[/color]Length[color= #339933;],[/color] indices[color= #339933;],[/color] [color= #cc66cc;]0[/color][color= #339933;],[/color] indices[color= #339933;].[/color]Length [color= #339933;]/[/color] [color= #cc66cc;]3[/color][color= #009900;])[/color][color= #339933;];[/color]
  124.  
  125. pass[color= #339933;].[/color][color= #990000;]End[/color][color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  126. [color= #009900;]}[/color]
  127. effect[color= #339933;].[/color][color= #990000;]End[/color][color= #009900;]([/color][color= #009900;])[/color][color= #339933;];[/color]
  128.  
  129. base[color= #339933;].[/color]Draw[color= #009900;]([/color]gameTime[color= #009900;])[/color][color= #339933;];[/color]
  130. [color= #009900;]}[/color]
  131. [color= #009900;]}[/color]
  132. [color= #009900;]}[/color]
  133.  
  134.  
  135.  

تم تعديل بواسطه *خلدون خالد*
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
قم بإستخدام متجه آخر مثل (1,0,0) بإعتباره المتجه الخارج للأعلى بالنسبة لمصفوفة عرض الكاميرا.

ماذا تقصد , هل تقصد رسم العمودي Normal على سطح المثلث ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

اخي الكريم درس ولا اروع جزيت خيراً

ويعطيك الف عافية

تقبل مروري!

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخ شمري

ليس هذا هو المقصود:

بشكل عام من اجل تعريف كاميرا يلزم ثلاث أشياء:

-إحداثيات النقطة التي تقع فيها الكاميرا

- إحداثيات النقطة التي تنظر إليها الكاميرا

- المتجه العمودي الواقع على الكامير (يعني وين رأس الكاميرا و وأين قاعدتها)

الصورة التاليه توضح الموضوع، الصورة اليسرى العمودي على الكاميرا متجه للأعلى، و الناتج كما ترى

في حال إعتبرنا العمودي متجه للأسفل سوف نحصل على النتيجه في اليمين.

post-133895-1248545675_thumb.png

أرجو أن تكون الصورة قد وضحت.

أخ لؤي أشكرك على المتابعه و بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .