📄 tropics.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 + -