kldoon

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

1 مشاركة في هذا الموضوع

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

الدرس الثامن

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

أخيرا قد حان الوقت لإنشاء منظر طبيعي جميل :) . بدلا من إدخال البيانات بشكل يدوي داخل المصفوفة heightData، سوف نقوم بملئها من ملف. لعمل ذلك سوف نقوم بإستيراد صورة لتدرج رمادي بحجم 128X128 بكسل. سوف نقوم بإستخدام قيمة اللون الأبيض ‘white value’ لكل بكسل من أجل تمثيل إرتفاع الإحداثي للرأس المقابل! بإمكانك تنزيل ملف المثال الخاص بي من الرابط التالي هنا أو من الملفات المرفقة.

بعد أن تقوم بتنزيل الملف، قم بإضافته للمشروع بنفس الطريقة التي قمت بها لملف التأير .fx . بإمكانك أيضا عمل ذلك من خلال سحب الملف من المجلد الموجود فيه (من خلال متصفح الويندوز) و إسقاطه في مجلد ال Content داخل مشروع ال Xna. إذا كان كل شيئ على ما يرام، يجب أن ترى ملف ال heightmap.bmp قد تم إضافته إلى مجلد ال Content.

الملف يجب أن يتم تحميله داخل الدالة LoadContent. ملف التأثير تم تحميله في متغير من نوع Effect، و الصورة يجب أن يتم تحميلها في متغير من النوع Texture2D:

Texture2D heightMap = Content.Load<Texture2D> ("heightmap");
LoadHeightData(heightMap);

عند إستخدام الأنبوب “Pipeline” Content، لا يهم إذا كنت تستخدم ملفات من النوع bmp,jpg أو png. السطر الثاني يقوم بإستدعاء الدالة LoadHeightData، التي سوف نقوم بتعديلها بحيث تقوم بإستقبال هذه الخامة. هذا هي النسخة الجديدة من الدالة LoadHeightData:

 private void LoadHeightData(Texture2D heightMap)
{
terrainWidth = heightMap.Width;
terrainHeight = heightMap.Height;

Color[] heightMapColors = new Color[terrainWidth * terrainHeight];
heightMap.GetData(heightMapColors);

heightData = new float[terrainWidth, terrainHeight];
for (int x = 0; x < terrainWidth; x++)
for (int y = 0; y < terrainHeight; y++)
heightData[x, y] = heightMapColors[x + y * terrainWidth].R / 5.0f;
}

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

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

المهم التالية هي إعادة تشكيل مصفوفة الألوان أحادية البعد هذه إلى مصفوفة أعداد حقيقية “Float” ثنائية البعد. أولا قم بإنشاء مصفوفة أعداد حقيقة ثنائية البعد بحجم مناسب. بعدها، يتم المرور على كل الألوان و يتم إختيار قيم اللون الأحمر، التي تقع بين 0 (لا يوجد لون) و 255 (أحمر بشكل تام). قبل أن تقوم بتخزين هذه القيمة يتم تصغيرها بشكل قليل، حتى لا تكون التضاريس عميقة جدا.

في هذه اللحظة، لديك مصفوفة ثنائية الأبعاد تحتوي على إرتفاع كل نقطة في التضاريس. الدالة SetUpVertices سوف تقوم بإنشاء رأس لكل نقطة في المصفوفة. الدالة SetUpIndices سوف تقوم بإنشاء 3 فهارس لكل مثلث سوف يتم رسمه من أجل تغطية التضاريس. في النهاية، الدالة Draw سوف تقوم برسم العديد من المثلثات بناء على ما تحتوي مصفوفة الفهارس indices. لذا عند تشغيل الكود يجب أن ترى التضاريس!

لسوء الحظ، مرة أخرى :wacko: . ولكن الحل بسيط، هذا الركن من التضاريس يقع فوق الكاميرا! لذا إذا قمت بزيادة إرتفاع الكاميرا إلى 40، يجب أن ترى التضاريس.

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

 Matrix worldMatrix = Matrix.CreateTranslation(-terrainWidth / 2.0f, 0, terrainHeight / 2.0f);
effect.CurrentTechnique = effect.Techniques["Colored"];
effect.Parameters["xView"].SetValue(viewMatrix);
effect.Parameters["xProjection"].SetValue(projectionMatrix);
effect.Parameters["xWorld"].SetValue(worldMatrix);

ذلك سوف يقوم بنقل التضاريس إلى وسط الشاشة.

بما أن الكاميرا ما زالت تنظر بشكل مستقيم إلى التضاريس، سوف نحصل على مشهد أفضل إذا قمنا بتغير موقع الكاميرا شيئ ما:

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

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

post-133895-1248945978_thumb.jpg

بإمكانك محاولة حل التمارين التالية من أجل ممارسة ما قد تعلمته في هذا الدرس:

• هذا الكود يقوم بتصغير قيمة اللون الأحمر ل5 أضعاف. حاول إستخدام قيم أخرى للتحجيم.

• إفتح الصورة heihgtmap.bmp بإستخدام برنامج الرسام، وقم بتعديل قيم بعض البكسلات. إجعل بعض البكسلات بلون أحمر تام. و بعضها الآخر أزرق تام. قم بتحميل الصورة إلى البرنامج ولاحظ التغييرات.

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

الملفات الازمة لتنفيذ الدرس:

heightmap.zip

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

Learn3D_Xna_S1L8.pdf

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

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

1

شارك هذا الرد


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

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

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



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

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

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