本文整理汇总了C#中IModule.GetPlanet方法的典型用法代码示例。如果您正苦于以下问题:C# IModule.GetPlanet方法的具体用法?C# IModule.GetPlanet怎么用?C# IModule.GetPlanet使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IModule
的用法示例。
在下文中一共展示了IModule.GetPlanet方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Sphere
public Sphere(ESphere type, IModule module, Color[] colors, float diameter = 2048, int tessellation = 128) {
Vertices = new List<VertexPositionNormalColor>();
Indices = new List<short>();
if (tessellation < 3 || tessellation > 128) {
throw new ArgumentOutOfRangeException(nameof(tessellation));
}
var verticalSegments = tessellation;
var horizontalSegments = tessellation * 2;
var radius = diameter / 2;
var noise = module.GetPlanet(horizontalSegments, verticalSegments);
switch (type) {
case ESphere.Terrain: {
#region Terrain Vertex
AddVertex(Vector3.Down * radius * (1.0f + (float)noise[0, 0]), Vector3.Down, Color.White);
for (var i = 0; i < verticalSegments - 1; i++) {
var latitude = ((i + 1) * MathHelper.Pi / verticalSegments) - MathHelper.PiOver2;
var dy = (float)Math.Sin(latitude);
var dxz = (float)Math.Cos(latitude);
for (var j = 0; j < horizontalSegments; j++) {
var longitude = j * MathHelper.TwoPi / horizontalSegments;
var dx = (float)Math.Cos(longitude) * dxz;
var dz = (float)Math.Sin(longitude) * dxz;
var normal = new Vector3(dx, dy, dz);
var value = 1.0f + (float)noise[j, i];
var color = colors.GetColorAt(value - 1.0f);
var v = value;
AddVertex(normal * radius * v, normal * v, color);
}
}
AddVertex(Vector3.Up * radius * (1.0f + (float)noise[horizontalSegments - 1, verticalSegments - 1]), Vector3.Up, Color.White);
#endregion
break;
}
case ESphere.Ocean: {
#region Ocean Vertex
AddVertex(Vector3.Down * radius, Vector3.Down, Color.White);
for (var i = 0; i < verticalSegments - 1; i++) {
var latitude = ((i + 1) * MathHelper.Pi / verticalSegments) - MathHelper.PiOver2;
var dy = (float)Math.Sin(latitude);
var dxz = (float)Math.Cos(latitude);
for (var j = 0; j < horizontalSegments; j++) {
var longitude = j * MathHelper.TwoPi / horizontalSegments;
var dx = (float)Math.Cos(longitude) * dxz;
var dz = (float)Math.Sin(longitude) * dxz;
var normal = new Vector3(dx, dy, dz);
AddVertex(normal * radius, normal, colors.GetColorAt(0.0d));
}
}
AddVertex(Vector3.Up * radius, Vector3.Up, Color.White);
#endregion
break;
}
case ESphere.Sky: {
#region Sky Vertex
AddVertex(Vector3.Down * radius, Vector3.Down, Color.White);
for (var i = 0; i < verticalSegments - 1; i++) {
var latitude = ((i + 1) * MathHelper.Pi / verticalSegments) - MathHelper.PiOver2;
var dy = (float)Math.Sin(latitude);
var dxz = (float)Math.Cos(latitude);
for (var j = 0; j < horizontalSegments; j++) {
var longitude = j * MathHelper.TwoPi / horizontalSegments;
var dx = (float)Math.Cos(longitude) * dxz;
var dz = (float)Math.Sin(longitude) * dxz;
var normal = new Vector3(dx, dy, dz);
var value = (float)noise[j, i];
//.........这里部分代码省略.........