DrawEarthClass.cs
上传用户:lslight
上传日期:2022-01-10
资源大小:14248k
文件大小:4k
- ///////////////////////////////////////////////////////////////////////
- // ■■■■ ■■■■■ ■■■■ ■ ■ //
- // ■ ■ ■ ■ ■ //
- // ■ ■ ■ ■■■ ■ ■ //
- // ■ ■ ■ ■ ■ ■ //
- // ■■■■ ■ ■■■■ ■■■■ //
- // Copyright (c) 三峡大学水利与环境学院 肖泽云. All rights reserved. //
- ////////////////////////////////////////////////////////////////////////
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Drawing;
- using Microsoft.DirectX;
- using Microsoft.DirectX.Direct3D;
- namespace 绘制基本几何体
- {
- class DrawEarthClass
- {
- public Device device;
- public Vector3 shpereCenterVectors;
- public float radius;
- public int mNumber;
- public int nNumber;
- private CustomVertex.PositionTextured[] vertices;
- private Texture texture;//定义贴图变量
- private Material material;//定义材质变量
- private int[] indexData;
- public DrawEarthClass(Device _device, Vector3 _shpereCenterVectors, float _radius, int _mNumber, int _nNumber)
- {
- device = _device;
- shpereCenterVectors = _shpereCenterVectors;
- radius = _radius;
- mNumber = _mNumber;
- nNumber = _nNumber;
- VertexDeclaration();
- IndicesDeclaration();
- LoadTexturesAndMaterials();
- }
- private void VertexDeclaration()//定义顶点
- {
- vertices=new CustomVertex.PositionTextured[(mNumber+1)*(nNumber+1)];
- float theta = (float)Math.PI / nNumber;
- float alpha = 2 * (float)Math.PI / mNumber;
- for (int i = 0; i < nNumber+1; i++)
- {
- for (int j = 0; j < mNumber+1; j++)
- {
- vertices[j + i * (mNumber + 1)].X = shpereCenterVectors.X + radius * (float)Math.Sin(i*theta) * (float)Math.Cos(j*alpha);
- vertices[j + i * (mNumber + 1)].Y = shpereCenterVectors.Y + radius * (float)Math.Cos(i * theta);
- vertices[j + i * (mNumber + 1)].Z = shpereCenterVectors.Z + radius * (float)Math.Sin(i * theta) * (float)Math.Sin(j*alpha);
- vertices[j + i * (mNumber + 1)].Tu = (float)j / (mNumber + 1);
- vertices[j + i * (mNumber + 1)].Tv = (float)i / (nNumber + 1);
- }
- }
- }
- private void IndicesDeclaration()//定义索引
- {
- indexData=new int[6*mNumber*nNumber];
- for (int i = 0; i < nNumber; i++)
- {
- for (int j = 0; j < mNumber; j++)
- {
- indexData[6 * (j + i * mNumber)] = j + i * (mNumber + 1);
- indexData[6 * (j + i * mNumber) + 1] = j + i * (mNumber + 1)+1;
- indexData[6 * (j + i * mNumber) + 2] = j + (i + 1) * (mNumber + 1);
- indexData[6 * (j + i * mNumber) + 3] = j + i * (mNumber + 1) + 1;
- indexData[6 * (j + i * mNumber) + 4] = j + (i + 1) * (mNumber + 1);
- indexData[6 * (j + i * mNumber) + 5] = j + (i + 1) * (mNumber + 1)+1;
- }
- }
- }
- private void LoadTexturesAndMaterials()//导入贴图和材质
- {
- material = new Material();
- material.Diffuse = Color.White;
- material.Specular = Color.LightGray;
- material.SpecularSharpness = 15.0F;
- device.Material = material;
- texture = TextureLoader.FromFile(device, @"E:DirectXDirectX_C#Mediaworld.jpg");
- }
- public void DrawSphere()
- {
- device.SetTexture(0, texture);//设置贴图
- device.VertexFormat = CustomVertex.PositionTextured.Format;
- device.DrawIndexedUserPrimitives(PrimitiveType.TriangleList, 0, (mNumber+1) * (nNumber+1), 2 * mNumber * nNumber, indexData, false, vertices);
- }
- }
- }