Exemple #1
0
 public Segment(Planet planetInfo, TriangleD noElevationRange, Segment parentChunk, ulong id, ChildPosition childPosition = ChildPosition.NoneNoParent)
 {
     ID = id;
     this.planetInfo                   = planetInfo;
     this.parent                       = parentChunk;
     this.childPosition                = childPosition;
     this.NoElevationRange             = noElevationRange;
     this.rangeToCalculateScreenSizeOn = noElevationRange;
 }
Exemple #2
0
        void AddRootChunk(ulong id, List <Vector3d> vertices, int A, int B, int C)
        {
            var range = new TriangleD()
            {
                a = vertices[A],
                b = vertices[B],
                c = vertices[C]
            };
            var child = new Segment(this, range, null, id);

            this.rootSegments.Add(child);
        }
Exemple #3
0
        void AddChild(Vector3d a, Vector3d b, Vector3d c, ChildPosition cp, ulong id)
        {
            var range = new TriangleD()
            {
                a = a,
                b = b,
                c = c
            };
            var child = new Segment(planetInfo, range, this, this.ID << 2 | id);

            Children.Add(child);
            child.subdivisionDepth             = subdivisionDepth + 1;
            child.rangeToCalculateScreenSizeOn = range;
        }
Exemple #4
0
                /// <summary>
                /// Queues a single triangle billboard for rendering
                /// </summary>
                public static void AddTriangle(ref TriMaterial mat, ref TriangleD triangle, MatrixD[] matrixRef = null)
                {
                    var bbPool     = instance.bbPoolBack;
                    var bbDataBack = instance.triangleList;
                    int index      = bbDataBack.Count;
                    var matList    = instance.matrixBuf;
                    var matTable   = instance.matrixTable;

                    // Find matrix index in table or add it
                    int matrixID = -1;

                    if (matrixRef != null && !matTable.TryGetValue(matrixRef, out matrixID))
                    {
                        matrixID = matList.Count;
                        matList.Add(matrixRef[0]);
                        matTable.Add(matrixRef, matrixID);
                    }

                    var bb = new TriangleBillboardData
                    {
                        Item1 = BlendTypeEnum.PostPP,
                        Item2 = new Vector2I(index, matrixID),
                        Item3 = mat.textureID,
                        Item4 = mat.bbColor,
                        Item5 = new MyTuple <Vector2, Vector2, Vector2>
                                (
                            mat.texCoords.Point0,
                            mat.texCoords.Point1,
                            mat.texCoords.Point2
                                ),
                        Item6 = new MyTuple <Vector3D, Vector3D, Vector3D>
                                (
                            triangle.Point0,
                            triangle.Point1,
                            triangle.Point2
                                ),
                    };

                    bbDataBack.Add(bb);

                    if (index >= bbPool.Count)
                    {
                        instance.AddNewBB(index - (bbPool.Count - 1));
                    }

                    MyTransparentGeometry.AddBillboard(bbPool[index], false);
                }
Exemple #5
0
        public void CalculateRealVisibleRange()
        {
            if (occluderTringles.Count != 0)
            {
                return;
            }

            var a = RendererSurface.Mesh.Vertices[planetInfo.AIndexReal];
            var b = RendererSurface.Mesh.Vertices[planetInfo.BIndexReal];
            var c = RendererSurface.Mesh.Vertices[planetInfo.CIndexReal];

            var o = RendererSurface.Offset.ToVector3d();

            realVisibleRange.a = a.ToVector3d() + o;
            realVisibleRange.b = b.ToVector3d() + o;
            realVisibleRange.c = c.ToVector3d() + o;

            rangeToCalculateScreenSizeOn = realVisibleRange;

            var z = a.Distance(b) / 10.0f * -realVisibleRange.Normal.ToVector3();

            var sinkDir = a.Distance(b) / 20.0f * -realVisibleRange.Normal.ToVector3();

            a += sinkDir;
            b += sinkDir;
            c += sinkDir;

            occluderTringles.Add(a);
            occluderTringles.Add(z);
            occluderTringles.Add(b);

            occluderTringles.Add(b);
            occluderTringles.Add(z);
            occluderTringles.Add(c);

            occluderTringles.Add(c);
            occluderTringles.Add(z);
            occluderTringles.Add(a);
        }
Exemple #6
0
 /// <summary>Fills a triangle using the specified brush.</summary>
 public void FillTriangle(Brush brush, TriangleD triangle)
 {
     FillTriangle(brush, triangle.V1, triangle.V2, triangle.V3);
 }
Exemple #7
0
 /// <summary>Draws a triangle using the specified pen.</summary>
 public void DrawTriangle(Pen pen, TriangleD triangle)
 {
     DrawTriangle(pen, triangle.V1, triangle.V2, triangle.V3);
 }