コード例 #1
0
        public void DrawCatalogTile(RenderContext renderContext, double opacity)
        {
            RenderedGeneration = CurrentRenderGeneration;
            TilesTouched++;

            InViewFrustum = true;
            bool onlyDrawChildren = false;

            if (!ReadyToRender)
            {
                if (!errored)
                {
                    TileCache.AddTileToQueue(this);
                    return;
                }

                if (errored && Level < 3) //Level 0-2 sometimes deleted in favor of allsky.jpg/tsv
                {
                    onlyDrawChildren = true;
                }
                else
                {
                    return;
                }
            }

            bool anyChildInFrustum = false;
            int  childIndex        = 0;

            for (int y1 = 0; y1 < 2; y1++)
            {
                for (int x1 = 0; x1 < 2; x1++)
                {
                    if (Level < dataset.Levels)
                    {
                        if (children[childIndex] == null)
                        {
                            children[childIndex] = TileCache.GetTile(Level + 1, x1, y1, dataset, this);
                        }

                        if (children[childIndex].IsTileInFrustum(renderContext.Frustum))
                        {
                            InViewFrustum     = true;
                            anyChildInFrustum = true;
                            if (children[childIndex].IsTileBigEnough(renderContext) || onlyDrawChildren)
                            {
                                ((HealpixTile)children[childIndex]).DrawCatalogTile(renderContext, opacity);
                            }
                            else
                            {
                                ((HealpixTile)children[childIndex]).RemoveCatalogTile();
                            }
                        }
                        else
                        {
                            ((HealpixTile)children[childIndex]).RemoveCatalogTile();
                        }
                    }

                    childIndex++;
                }
            }
            if (Level == 0 && !anyChildInFrustum && !onlyDrawChildren)
            {
                RemoveCatalogTile();
            }
            else if (anyChildInFrustum)
            {
                TilesInView++;
                AddCatalogTile();
            }
        }
コード例 #2
0
ファイル: Tile.cs プロジェクト: imbasimba/wwt-webgl-engine
        public virtual bool Draw3D(RenderContext renderContext, double opacity)
        {
            //         CanvasContext2D device = renderContext.Device;



            RenderedGeneration = CurrentRenderGeneration;
            TilesTouched++;
            AccessCount = TileCache.AccessID++;

            if (errored)
            {
                return(false);
            }

            int xMax = 2;

            InViewFrustum = true;

            if (!ReadyToRender)
            {
                TileCache.AddTileToQueue(this);
                //RequestImage();
                return(false);
            }

            bool transitioning = false;

            int childIndex = 0;

            int yOffset = 0;

            if (dataset.Mercator || dataset.BottomsUp)
            {
                yOffset = 1;
            }
            int xOffset = 0;

            //      try
            {
                bool anythingToRender = false;
                bool childRendered    = false;
                for (int y1 = 0; y1 < 2; y1++)
                {
                    for (int x1 = 0; x1 < xMax; x1++)
                    {
                        //  if (level < (demEnabled ? 12 : dataset.Levels))
                        if (Level < dataset.Levels)
                        {
                            // make children
                            if (children[childIndex] == null)
                            {
                                children[childIndex] = TileCache.GetTile(Level + 1, tileX * 2 + ((x1 + xOffset) % 2), tileY * 2 + ((y1 + yOffset) % 2), dataset, this);
                            }

                            if (children[childIndex].IsTileInFrustum(renderContext.Frustum))
                            {
                                InViewFrustum = true;
                                if (children[childIndex].IsTileBigEnough(renderContext))
                                {
                                    renderChildPart[childIndex].TargetState = !children[childIndex].Draw3D(renderContext, opacity);
                                    if (renderChildPart[childIndex].TargetState)
                                    {
                                        childRendered = true;
                                    }
                                }
                                else
                                {
                                    renderChildPart[childIndex].TargetState = true;
                                }
                            }
                            else
                            {
                                renderChildPart[childIndex].TargetState = renderChildPart[childIndex].State = false;
                            }

                            //if (renderChildPart[childIndex].TargetState == true || !blendMode)
                            //{
                            //    renderChildPart[childIndex].State = renderChildPart[childIndex].TargetState;
                            //}
                            if (renderChildPart[childIndex].TargetState != renderChildPart[childIndex].State)
                            {
                                transitioning = true;
                            }
                        }
                        else
                        {
                            renderChildPart[childIndex].State = true;
                        }

                        if (renderChildPart[childIndex].State == true)
                        {
                            anythingToRender = true;
                        }

                        childIndex++;
                    }
                }

                if (childRendered || anythingToRender)
                {
                    RenderedAtOrBelowGeneration = CurrentRenderGeneration;
                    if (Parent != null)
                    {
                        Parent.RenderedAtOrBelowGeneration = RenderedAtOrBelowGeneration;
                    }
                }

                if (!anythingToRender)
                {
                    return(true);
                }

                if (!CreateGeometry(renderContext))
                {
                    return(false);
                }

                TilesInView++;


                accomidation = ComputeAccomidation();
                for (int i = 0; i < 4; i++)
                {
                    if (renderChildPart[i].TargetState)
                    {
                        RenderPart(renderContext, i, (opacity / 100), false);
                    }
                }
            }
            //         catch
            {
            }
            return(true);
        }
コード例 #3
0
        public override bool Draw3D(RenderContext renderContext, double opacity)
        {
            if (IsCatalogTile)
            {
                DrawCatalogTile(renderContext, opacity);
                return(true);
            }
            RenderedGeneration = CurrentRenderGeneration;
            TilesTouched++;

            InViewFrustum = true;
            bool onlyDrawChildren = false;

            if (!ReadyToRender)
            {
                if (!errored)
                {
                    TileCache.AddTileToQueue(this);
                    return(false);
                }

                if (errored && Level < 3) //Level 0-2 sometimes deleted in favor of allsky.jpg/tsv
                {
                    onlyDrawChildren = true;
                }
                else
                {
                    return(false);
                }
            }


            //if (!CreateGeometry(renderContext))
            //{
            //    if (Level > 2)
            //    {
            //        return false;
            //    }
            //}

            int partCount = this.TriangleCount;

            TrianglesRendered += partCount;

            bool anythingToRender = false;
            bool childRendered    = false;
            int  childIndex       = 0;

            for (int y1 = 0; y1 < 2; y1++)
            {
                for (int x1 = 0; x1 < 2; x1++)
                {
                    if (Level < dataset.Levels)
                    {
                        // make children
                        if (children[childIndex] == null)
                        {
                            children[childIndex] = TileCache.GetTile(Level + 1, x1, y1, dataset, this);
                        }

                        if (children[childIndex].IsTileInFrustum(renderContext.Frustum))
                        {
                            InViewFrustum = true;
                            if (children[childIndex].IsTileBigEnough(renderContext) || onlyDrawChildren)
                            {
                                //renderChildPart[childIndex].TargetState = true;
                                renderChildPart[childIndex].TargetState = !children[childIndex].Draw3D(renderContext, opacity);
                                if (renderChildPart[childIndex].TargetState)
                                {
                                    childRendered = true;
                                }
                            }
                            else
                            {
                                renderChildPart[childIndex].TargetState = true;
                            }
                        }
                        else
                        {
                            renderChildPart[childIndex].TargetState = renderChildPart[childIndex].State = false;
                        }
                    }
                    else
                    {
                        renderChildPart[childIndex].State = true;
                    }

                    ////if(childIndex != 0)
                    ////{
                    ////    renderChildPart[childIndex].TargetState = true;
                    ////    anythingToRender = true;
                    ////}

                    if (renderChildPart[childIndex].State == true)
                    {
                        anythingToRender = true;
                    }

                    childIndex++;
                }
            }

            if (childRendered || anythingToRender)
            {
                RenderedAtOrBelowGeneration = CurrentRenderGeneration;
                if (Parent != null)
                {
                    Parent.RenderedAtOrBelowGeneration = RenderedAtOrBelowGeneration;
                }
            }
            if (!anythingToRender)
            {
                return(true);
            }

            if (!CreateGeometry(renderContext))
            {
                return(false);
            }

            if (onlyDrawChildren)
            {
                return(true);
            }

            TilesInView++;

            for (int i = 0; i < 4; i++)
            {
                if (renderChildPart[i].TargetState)
                {
                    RenderPart(renderContext, i, opacity / 100, false);
                }
            }

            return(true);
        }