⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tropics.cs

📁 功能:基于windows mobile 的地图查看器。使用vs2005开发
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

using Microsoft.WindowsMobile.DirectX;
using Microsoft.WindowsMobile.DirectX.Direct3D;

using WorldWindow;

namespace cfWorldWind
{
	class Tropics
	{
		Material tropicsMaterial;
		Material equatorMaterial;

		public Tropics()
		{

		}

		public void InitializeVertex(Device device)
		{
			tropicsMaterial = new Material();
			tropicsMaterial.Diffuse = Color.LightCyan;
			tropicsMaterial.Ambient = Color.LightCyan;

			equatorMaterial = new Material();
			equatorMaterial.Diffuse = Color.Cyan;
			equatorMaterial.Ambient = Color.Cyan;

			int minLon = -180;
			int maxLon = 180;
			//int minLat = -85;
			//int maxLat = 85;

			int dLon = 10;
			//Draw tropic of cancer and tropic of capricorn lines
			int numPts = (maxLon - minLon) / dLon + 1;

			CustomVertex.PositionColored[] tropicOfCancerLine = new CustomVertex.PositionColored[numPts];
			CustomVertex.PositionColored[] tropicOfCapricornLine = new CustomVertex.PositionColored[numPts];
			CustomVertex.PositionColored[] equatorLine = new CustomVertex.PositionColored[numPts];
			int k = 0;

			for (int j = minLon; j <= maxLon; j = j + dLon)
			{
				Vector3 pos = MathEngine.SphericalToCartesian((float)23.5, (float)j, Settings.Radius);

				tropicOfCancerLine[k].X = pos.X;
				tropicOfCancerLine[k].Y = pos.Y;
				tropicOfCancerLine[k].Z = pos.Z;

				tropicOfCancerLine[k].Color = Color.LightBlue.ToArgb();
				k++;
			}

			k = 0;
			for (int j = minLon; j <= maxLon; j = j + dLon)
			{
				Vector3 pos = MathEngine.SphericalToCartesian((float)-23.5, (float)j, Settings.Radius);

				tropicOfCapricornLine[k].X = pos.X;
				tropicOfCapricornLine[k].Y = pos.Y;
				tropicOfCapricornLine[k].Z = pos.Z;

				tropicOfCapricornLine[k].Color = Color.LightBlue.ToArgb();
				k++;
			}

			k = 0;
			for (int j = minLon; j <= maxLon; j = j + dLon)
			{
				Vector3 pos = MathEngine.SphericalToCartesian((float)0, (float)j, Settings.Radius);

				equatorLine[k].X = pos.X;
				equatorLine[k].Y = pos.Y;
				equatorLine[k].Z = pos.Z;

				equatorLine[k].Color = Color.LightBlue.ToArgb();
				k++;
			}

			vbCancer = new VertexBuffer(typeof(CustomVertex.PositionColored), numPts, device, 0, CustomVertex.PositionColored.Format, Pool.SystemMemory);
			GraphicsStream stm1 = vbCancer.Lock(0, 0, 0);
			stm1.Write(tropicOfCancerLine);
			vbCancer.Unlock();

			vbCapricorn = new VertexBuffer(typeof(CustomVertex.PositionColored), numPts, device, 0, CustomVertex.PositionColored.Format, Pool.SystemMemory);
			GraphicsStream stm2 = vbCapricorn.Lock(0, 0, 0);
			stm2.Write(tropicOfCapricornLine);
			vbCapricorn.Unlock();

			vbEquator = new VertexBuffer(typeof(CustomVertex.PositionColored), numPts, device, 0, CustomVertex.PositionColored.Format, Pool.SystemMemory);
			GraphicsStream stm3 = vbEquator.Lock(0, 0, 0);
			stm3.Write(equatorLine);
			vbEquator.Unlock();

			numberOfPrimitives = numPts - 1;

			System.Drawing.Font f = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular);
			dispFont = new Microsoft.WindowsMobile.DirectX.Direct3D.Font(device, f);
		}

		VertexBuffer vbCancer;
		VertexBuffer vbCapricorn;
		VertexBuffer vbEquator;
		int numberOfPrimitives;
		Microsoft.WindowsMobile.DirectX.Direct3D.Font dispFont;

		public void RenderVertex(Device device, Camera camera)
		{
			device.SetTexture(0, null);
			if (vbEquator != null)
			{
				device.Material = equatorMaterial;

				device.SetStreamSource(0, vbEquator, 0);
				device.DrawPrimitives(PrimitiveType.LineStrip, 0, numberOfPrimitives);
			}
			if (vbCancer != null && vbCapricorn != null)
			{
				device.Material = tropicsMaterial;

				device.SetStreamSource(0, vbCancer, 0);
				device.DrawPrimitives(PrimitiveType.LineStrip, 0, numberOfPrimitives);

				device.SetStreamSource(0, vbCapricorn, 0);
				device.DrawPrimitives(PrimitiveType.LineStrip, 0, numberOfPrimitives);

				//camera.Longitude - camera.ViewRange * 0.3f * 0.5f
				Vector3 t1 = MathEngine.SphericalToCartesian(24.0f, camera.Longitude, Settings.Radius);
				//if (WorldCamera.ViewFrustum.ContainsPoint(t1))
				//{
					t1.Project(device.Viewport, device.Transform.Projection, device.Transform.View, device.Transform.World);
					dispFont.DrawText(null, "Tropic Of Cancer", new System.Drawing.Rectangle((int)t1.X, (int)t1.Y, device.Viewport.Width, device.Viewport.Height), DrawTextFormat.NoClip, Color.LightBlue);
				//}

				//camera.Longitude - camera.ViewRange * 0.3f * 0.5f
				Vector3 t2 = MathEngine.SphericalToCartesian(-24.0f, camera.Longitude, Settings.Radius);
				//if (WorldCamera.ViewFrustum.ContainsPoint(t2))
				//{
					t2.Project(device.Viewport, device.Transform.Projection, device.Transform.View, device.Transform.World);
					dispFont.DrawText(null, "Tropic Of Capricorn", new System.Drawing.Rectangle((int)t2.X, (int)t2.Y, device.Viewport.Width, device.Viewport.Height), DrawTextFormat.NoClip, Color.LightBlue);
				//}
			}
		}

		public void Dispose()
		{
			if (vbCancer != null)
			{
				vbCancer.Dispose();
				vbCancer = null;
			}
			if (vbCapricorn != null)
			{
				vbCapricorn.Dispose();
				vbCapricorn = null;
			}
			if (vbEquator != null)
			{
				vbEquator.Dispose();
				vbEquator = null;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -