kldoon

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

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

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

الدرس العاشر

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

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

ليس بإستطاعتك في كل الأحول أن تتوقع أن كل صورة يكون فيها بحيرة في الإرتفاع صفر، و قمة الجبل في الإرتفاع 255 (القيمة القصوى في ملف ال bmp للبكسل). تخيل صورة فيها قيم كبيره بين ال 50 و 200، هذه الصورة سوف تنتج بالأغلب تضاريس بدون أي بحيرات أو قمم جبلية في الأعلى!

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

 float minHeight = float.MaxValue;
float maxHeight = float.MinValue;
for (int x = 0; x < terrainWidth; x++)
{
for (int y = 0; y < terrainHeight; y++)
{
if (heightData[x, y] < minHeight)
minHeight = heightData[x, y];
if (heightData[x, y] > maxHeight)
maxHeight = heightData[x, y];
}
}

حيث يقوم بفحص كل نقطة في الشبكه إذا كان إرتفاعها أقل من قيمة ال minHeight الحالية، أو أعلى من قيمة ال maxHeight. إذا كانت كذلك، يقوم بتخزين قيمة الإرتفاع الحالي في المتغير المناظر.

بعد ملئ هذه المتغيرات، بإستطاعتك ملئ 4 مناطق من الألوان:

post-133895-1249290029_thumb.jpg

الآن من أجل تعريف الرؤوس و الوانها، يجب عليك تحديد اللون إعتمادا على مناطق الإرتفاع الصحيحه، كالتالي:

 vertices[x + y * terrainWidth].Position = new Vector3(x, heightData[x, y], -y);

if (heightData[x, y] < minHeight + (maxHeight - minHeight) / 4)
vertices[x + y * terrainWidth].Color = Color.Blue;
else if (heightData[x, y] < minHeight + (maxHeight - minHeight) * 2 / 4)
vertices[x + y * terrainWidth].Color = Color.Green;
else if (heightData[x, y] < minHeight + (maxHeight - minHeight) * 3 / 4)
vertices[x + y * terrainWidth].Color = Color.Brown;
else
vertices[x + y * terrainWidth].Color = Color.White;

عند تشغيل هذا الكود، سوف ترى شبكه جميلة من الخطوط الملونة. عندما نريد روؤية التضاريس الملونة كامله، كل ما علينا هو حذف هذا السطر:

 device.RenderState.FillMode = FillMode.WireFrame;

عند تشغيل الكود، إقض بعض الوقت في تدوير التضاريس. في بعض الحواسيب، سوف تلاحظ أنه يتم رسم بحيرات غير مرئية خلف القمم المتوسطة. هذا لأننا لم نقوم بتعريف الذاكرة الخلفية “Z-Buffer” بعد! هذه الذاكرة الخلفية ليست إلا مصفوفة حيث تقوم بطاقة الرسوميات بمتابعه إحداثيات العمق لكل بكسل يجب أن يتم رسمه على الشاشة (إذن في حالتنا هي مصفوفة بحجم 500*500). في كل مرة تستقبل فيها بطاقة الرسوميات مثلث من أجل رسمه، تقوم بفحص فيما إذا كانت بكسلات هذا المثلث أقرب إلى الشاشة أكثر من البكسلات المتواجدة في الذاكرة الخلفية. إذا كانت كذلك، فإن محتويات الذاكرة الخلفية يتم تغييرها بهذه البكسلات لهذه المنطقة.

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

 device.Clear(ClearOptions.Target|ClearOptions.DepthBuffer, Color.Black, 1.0f, 0);

(الإشارة | هي عملية Bitwise OR، في هذه الحالة تعني أن كلا من الهدف (الألوان) بالإضافة إلى ذاكرة العمق DepthBuffer يجب أن يتم مسحهما). الآن الجميع يجب أن يرى التضاريس تدور كما هو متوقع.

post-133895-1249290059_thumb.jpg

بالرغم من أننا حصلنا على الألوان للتضاريس، ولكنها في الحقيقة لا تبدو بشكل أفضل مما كانت عليه في الدرس السابق.

بإمكانك محاولة حل التمرين التالي، من أجل ممارسة ما تعلمته:

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

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

Learn3D_Xna_S1L10.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. [color= #993333;]float[/color] angle [color= #339933;]=[/color] [color= #cc66cc;]0[/color];
  32.  
  33. public Game1[color= #009900;]([/color][color= #009900;])[/color]
  34. [color= #009900;]{[/color]
  35. graphics [color= #339933;]=[/color] new GraphicsDeviceManager[color= #009900;]([/color]this[color= #009900;])[/color];
  36. Content.[color= #202020;]RootDirectory[/color] [color= #339933;]=[/color] [color= #ff0000;]"Content"[/color];
  37. [color= #009900;]}[/color]
  38.  
  39. protected override [color= #993333;]void[/color] Initialize[color= #009900;]([/color][color= #009900;])[/color]
  40. [color= #009900;]{[/color]
  41. graphics.[color= #202020;]PreferredBackBufferWidth[/color] [color= #339933;]=[/color] [color= #cc66cc;]500[/color];
  42. graphics.[color= #202020;]PreferredBackBufferHeight[/color] [color= #339933;]=[/color] [color= #cc66cc;]500[/color];
  43. graphics.[color= #202020;]IsFullScreen[/color] [color= #339933;]=[/color] [color= #000000; font-weight: bold;]false[/color];
  44. graphics.[color= #202020;]ApplyChanges[/color][color= #009900;]([/color][color= #009900;])[/color];
  45. Window.[color= #202020;]Title[/color] [color= #339933;]=[/color] [color= #ff0000;]"Riemer's XNA Tutorials -- Series 1"[/color];
  46.  
  47. base.[color= #202020;]Initialize[/color][color= #009900;]([/color][color= #009900;])[/color];
  48. [color= #009900;]}[/color]
  49.  
  50. protected override [color= #993333;]void[/color] LoadContent[color= #009900;]([/color][color= #009900;])[/color]
  51. [color= #009900;]{[/color]
  52. device [color= #339933;]=[/color] graphics.[color= #202020;]GraphicsDevice[/color];
  53. spriteBatch [color= #339933;]=[/color] new SpriteBatch[color= #009900;]([/color]GraphicsDevice[color= #009900;])[/color];
  54.  
  55. effect [color= #339933;]=[/color] Content.[color= #202020;]Load[/color]<Effect> [color= #009900;]([/color][color= #ff0000;]"effects"[/color][color= #009900;])[/color];
  56.  
  57. 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];
  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.  
  67. [color= #993333;]float[/color] minHeight [color= #339933;]=[/color] [color= #993333;]float[/color].[color= #202020;]MaxValue[/color];
  68. [color= #993333;]float[/color] maxHeight [color= #339933;]=[/color] [color= #993333;]float[/color].[color= #202020;]MinValue[/color];
  69. [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]
  70. [color= #009900;]{[/color]
  71. [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]
  72. [color= #009900;]{[/color]
  73. [color= #b1b100;]if[/color] [color= #009900;]([/color]heightData[color= #009900;][[/color]x, y[color= #009900;]][/color] < minHeight[color= #009900;])[/color]
  74. minHeight [color= #339933;]=[/color] heightData[color= #009900;][[/color]x, y[color= #009900;]][/color];
  75. [color= #b1b100;]if[/color] [color= #009900;]([/color]heightData[color= #009900;][[/color]x, y[color= #009900;]][/color] > maxHeight[color= #009900;])[/color]
  76. maxHeight [color= #339933;]=[/color] heightData[color= #009900;][[/color]x, y[color= #009900;]][/color];
  77. [color= #009900;]}[/color]
  78. [color= #009900;]}[/color]
  79.  
  80. vertices [color= #339933;]=[/color] new VertexPositionColor[color= #009900;][[/color]terrainWidth [color= #339933;]*[/color] terrainHeight[color= #009900;]][/color];
  81. [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]
  82. [color= #009900;]{[/color]
  83. [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]
  84. [color= #009900;]{[/color]
  85. 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];
  86.  
  87. [color= #b1b100;]if[/color] [color= #009900;]([/color]heightData[color= #009900;][[/color]x, y[color= #009900;]][/color] < minHeight [color= #339933;]+[/color] [color= #009900;]([/color]maxHeight [color= #339933;]-[/color] minHeight[color= #009900;])[/color] [color= #339933;]/[/color] [color= #cc66cc;]4[/color][color= #009900;])[/color]
  88. 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;]Blue[/color];
  89. [color= #b1b100;]else[/color] [color= #b1b100;]if[/color] [color= #009900;]([/color]heightData[color= #009900;][[/color]x, y[color= #009900;]][/color] < minHeight [color= #339933;]+[/color] [color= #009900;]([/color]maxHeight [color= #339933;]-[/color] minHeight[color= #009900;])[/color] [color= #339933;]*[/color] [color= #cc66cc;]2[/color] [color= #339933;]/[/color] [color= #cc66cc;]4[/color][color= #009900;])[/color]
  90. 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;]Green[/color];
  91. [color= #b1b100;]else[/color] [color= #b1b100;]if[/color] [color= #009900;]([/color]heightData[color= #009900;][[/color]x, y[color= #009900;]][/color] < minHeight [color= #339933;]+[/color] [color= #009900;]([/color]maxHeight [color= #339933;]-[/color] minHeight[color= #009900;])[/color] [color= #339933;]*[/color] [color= #cc66cc;]3[/color] [color= #339933;]/[/color] [color= #cc66cc;]4[/color][color= #009900;])[/color]
  92. 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;]Brown[/color];
  93. [color= #b1b100;]else[/color]
  94. 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];
  95. [color= #009900;]}[/color]
  96. [color= #009900;]}[/color]
  97.  
  98. myVertexDeclaration [color= #339933;]=[/color] new VertexDeclaration[color= #009900;]([/color]device, VertexPositionColor.[color= #202020;]VertexElem
    ents[/color][color= #009900;])[/color];
  99. [color= #009900;]}[/color]
  100.  
  101. private [color= #993333;]void[/color] SetUpIndices[color= #009900;]([/color][color= #009900;])[/color]
  102. [color= #009900;]{[/color]
  103. 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];
  104. [color= #993333;]int[/color] counter [color= #339933;]=[/color] [color= #cc66cc;]0[/color];
  105. [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]
  106. [color= #009900;]{[/color]
  107. [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]
  108. [color= #009900;]{[/color]
  109. [color= #993333;]int[/color] lowerLeft [color= #339933;]=[/color] x [color= #339933;]+[/color] y[color= #339933;]*[/color]terrainWidth;
  110. [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;
  111. [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;
  112. [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;
  113.  
  114. indices[color= #009900;][[/color]counter[color= #339933;]++[/color][color= #009900;]][/color] [color= #339933;]=[/color] topLeft;
  115. indices[color= #009900;][[/color]counter[color= #339933;]++[/color][color= #009900;]][/color] [color= #339933;]=[/color] lowerRight;
  116. indices[color= #009900;][[/color]counter[color= #339933;]++[/color][color= #009900;]][/color] [color= #339933;]=[/color] lowerLeft;
  117.  
  118. indices[color= #009900;][[/color]counter[color= #339933;]++[/color][color= #009900;]][/color] [color= #339933;]=[/color] topLeft;
  119. indices[color= #009900;][[/color]counter[color= #339933;]++[/color][color= #009900;]][/color] [color= #339933;]=[/color] topRight;
  120. indices[color= #009900;][[/color]counter[color= #339933;]++[/color][color= #009900;]][/color] [color= #339933;]=[/color] lowerRight;
  121. [color= #009900;]}[/color]
  122. [color= #009900;]}[/color]
  123. [color= #009900;]}[/color]
  124.  
  125. private [color= #993333;]void[/color] SetUpCamera[color= #009900;]([/color][color= #009900;])[/color]
  126. [color= #009900;]{[/color]
  127. 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];
  128. 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];
  129. [color= #009900;]}[/color]
  130.  
  131. private [color= #993333;]void[/color] LoadHeightData[color= #009900;]([/color]Texture2D heightMap[color= #009900;])[/color]
  132. [color= #009900;]{[/color]
  133. terrainWidth [color= #339933;]=[/color] heightMap.[color= #202020;]Width[/color];
  134. terrainHeight [color= #339933;]=[/color] heightMap.[color= #202020;]Height[/color];
  135.  
  136. Color[color= #009900;][[/color][color= #009900;]][/color] heightMapColors [color= #339933;]=[/color] new Color[color= #009900;][[/color]terrainWidth [color= #339933;]*[/color] terrainHeight[color= #009900;]][/color];
  137. heightMap.[color= #202020;]GetData[/color][color= #009900;]([/color]heightMapColors[color= #009900;])[/color];
  138.  
  139. heightData [color= #339933;]=[/color] new [color= #993333;]float[/color][color= #009900;][[/color]terrainWidth, terrainHeight[color= #009900;]][/color];
  140. [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]
  141. [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]
  142. 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;
  143. [color= #009900;]}[/color]
  144.  
  145. protected override [color= #993333;]void[/color] UnloadContent[color= #009900;]([/color][color= #009900;])[/color]
  146. [color= #009900;]{[/color]
  147. [color= #009900;]}[/color]
  148.  
  149. protected override [color= #993333;]void[/color] Update[color= #009900;]([/color]GameTime gameTime[color= #009900;])[/color]
  150. [color= #009900;]{[/color]
  151. [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]
  152. this.[color= #202020;]Exit[/color][color= #009900;]([/color][color= #009900;])[/color];
  153.  
  154. KeyboardState keyState [color= #339933;]=[/color] Keyboard.[color= #202020;]GetState[/color][color= #009900;]([/color][color= #009900;])[/color];
  155. [color= #b1b100;]if[/color] [color= #009900;]([/color]keyState.[color= #202020;]IsKeyDown[/color][color= #009900;]([/color]Keys.[color= #202020;]Delete[/color][color= #009900;])[/color][color= #009900;])[/color]
  156. angle [color= #339933;]+=[/color] [color= #cc66cc;]0[/color].05f;
  157. [color= #b1b100;]if[/color] [color= #009900;]([/color]keyState.[color= #202020;]IsKeyDown[/color][color= #009900;]([/color]Keys.[color= #202020;]PageDown[/color][color= #009900;])[/color][color= #009900;])[/color]
  158. angle [color= #339933;]-=[/color] [color= #cc66cc;]0[/color].05f;
  159.  
  160. base.[color= #202020;]Update[/color][color= #009900;]([/color]gameTime[color= #009900;])[/color];
  161. [color= #009900;]}[/color]
  162.  
  163. protected override [color= #993333;]void[/color] Draw[color= #009900;]([/color]GameTime gameTime[color= #009900;])[/color]
  164. [color= #009900;]{[/color]
  165. device.[color= #202020;]Clear[/color][color= #009900;]([/color]ClearOptions.[color= #202020;]Target[/color] | ClearOptions.[color= #202020;]DepthBuffer[/color], Color.[color= #202020;]Black[/color], [color= #cc66cc;]1[/color].0f, [color= #cc66cc;]0[/color][color= #009900;])[/color]
    ;
  166. device.[color= #202020;]RenderState[/color].[color= #202020;]CullMode[/color] [color= #339933;]=[/color] CullMode.[color= #202020;]None[/color];
  167.  
  168. 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] [color= #339933;]*[/color] Matrix.[color= #202020;]CreateRotationY[/color][color= #009900;]([/color]angle[color= #009900;])[/color];
  169. effect.[color= #202020;]CurrentTechnique[/color] [color= #339933;]=[/color] effect.[color= #202020;]Techniques[/color][color= #009900;][[/color][color= #ff0000;]"Colored"[/color][color= #009900;]][/color];
  170. 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];
  171. 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];
  172. 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];
  173.  
  174. effect.[color= #202020;]Begin[/color][color= #009900;]([/color][color= #009900;])[/color];
  175. foreach [color= #009900;]([/color]EffectPass pass in effect.[color= #202020;]CurrentTechnique[/color].[color= #202020;]Passes[/color][color= #009900;])[/color]
  176. [color= #009900;]{[/color]
  177. pass.[color= #202020;]Begin[/color][color= #009900;]([/color][color= #009900;])[/color];
  178.  
  179. device.[color= #202020;]VertexDeclaration[/color] [color= #339933;]=[/color] myVertexDeclaration;
  180. 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];
  181.  
  182. pass.[color= #202020;]End[/color][color= #009900;]([/color][color= #009900;])[/color];
  183. [color= #009900;]}[/color]
  184. effect.[color= #202020;]End[/color][color= #009900;]([/color][color= #009900;])[/color];
  185.  
  186. base.[color= #202020;]Draw[/color][color= #009900;]([/color]gameTime[color= #009900;])[/color];
  187. [color= #009900;]}[/color]
  188. [color= #009900;]}[/color]
  189. [color= #009900;]}[/color]
  190.  

1

شارك هذا الرد


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

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

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



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

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

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