当前位置: 首页>>代码示例>>C#>>正文


C# IModule.GetPlanet方法代码示例

本文整理汇总了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];
//.........这里部分代码省略.........
开发者ID:phcs93,项目名称:God,代码行数:101,代码来源:Sphere.cs


注:本文中的IModule.GetPlanet方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。