コード例 #1
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                if (EngineApp.ApplicationType != EngineApp.ApplicationTypeEnum.Simulation ||
                    EngineApp.ApplicationType == EngineApp.ApplicationTypeEnum.Simulation && DisplayInSimulation)
                {
                    var cameraPosition = context.Owner.CameraSettings.Position;
                    var sphere         = new Sphere(cameraPosition, VisibilityDistance);

                    if (SpaceBounds.CalculatedBoundingSphere.Intersects(ref sphere))
                    {
                        var canvasRenderer = context.Owner.CanvasRenderer;
                        var renderer       = context.Owner.Simple3DRenderer;

                        if (canvasRenderer != null && renderer != null)
                        {
                            if (context.Owner.CameraSettings.ProjectToScreenCoordinates(TransformV.Position, out var screenPosition))
                            {
                                Render(context, screenPosition);
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            if (mode == GetRenderSceneDataMode.InsideFrustum && AutoUpdate)
            {
                lastVisibleTime = Time.Current;
            }
        }
コード例 #3
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            base.OnGetRenderSceneData(context, mode, modeGetObjectsItem);

            if (mode == GetRenderSceneDataMode.InsideFrustum && AutoUpdate)
            {
                lastVisibleTime = Time.Current;
            }
        }
コード例 #4
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            var area = Parent as Component_Area;

            if (area != null)
            {
                if (!area.CheckNeedShowDevelopmentDataOfAreaAndPoints(context, mode))
                {
                    var context2 = context.objectInSpaceRenderingContext;
                    context2.disableShowingLabelForThisObject = true;
                }
            }
        }
コード例 #5
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            base.OnGetRenderSceneData(context, mode, modeGetObjectsItem);

            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                if (!ParentScene.GetDisplayDevelopmentDataInThisApplication())
                {
                    context2.disableShowingLabelForThisObject = true;
                }
            }
        }
コード例 #6
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                //context.

                bool show = (ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplayCameras) ||
                            context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this;
                if (show)
                {
                    var skip = false;

                    var cameraSettings = context.Owner.CameraSettings;
                    //!!!!
                    if ((cameraSettings.Position - TransformV.Position).Length() < 0.5)
                    {
                        skip = true;
                    }

                    if (!skip && context2.displayCamerasCounter < context2.displayCamerasMax)
                    {
                        context2.displayCamerasCounter++;

                        ColorValue color;
                        if (context2.selectedObjects.Contains(this))
                        {
                            color = ProjectSettings.Get.SelectedColor;
                        }
                        else if (context2.canSelectObjects.Contains(this))
                        {
                            color = ProjectSettings.Get.CanSelectColor;
                        }
                        else
                        {
                            color = ProjectSettings.Get.SceneShowLightColor;
                        }

                        var viewport = context.Owner;
                        viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                        DebugDraw(viewport);
                    }
                }
                //if( !show )
                //	context.disableShowingLabelForThisObject = true;
            }
        }
コード例 #7
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            base.OnGetRenderSceneData(context, mode, modeGetObjectsItem);

            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                var showLabels = /*show &&*/ rigidBody == null;
                if (!showLabels)
                {
                    context2.disableShowingLabelForThisObject = true;
                }
            }
        }
コード例 #8
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            if (mode == GetRenderSceneDataMode.InsideFrustum && context.Owner.CanvasRenderer != null && context.Owner.Simple3DRenderer != null)
            {
                var context2 = context.objectInSpaceRenderingContext;

                //render after PrepareListsOfObjects with sorting by camera distance from far to near
                var item = new Component_RenderingPipeline.RenderSceneData.ActionToDoAfterPrepareListsOfObjectsSortedByDistance();
                item.DistanceToCamera = (float)(Transform.Value.Position - context.Owner.CameraSettings.Position).Length();
                item.Action           = Render;
                context.FrameData.RenderSceneData.ActionsToDoAfterPrepareListsOfObjectsSortedByDistance.Add(item);
            }
        }
コード例 #9
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            //if( WhenUpdate.Value.HasFlag( WhenUpdateEnum.Render ) )
            //	Update();

            if (EnabledInHierarchy && VisibleInHierarchy && mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                bool show = (ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplaySensors) || context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this;
                if (show)
                {
                    if (context2.displaySensorsCounter < context2.displaySensorsMax)
                    {
                        context2.displaySensorsCounter++;

                        var displayColor = DisplayColor.Value;
                        if (displayColor.Alpha != 0)
                        {
                            context.Owner.Simple3DRenderer.SetColor(displayColor, displayColor * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                            RenderShape(context2);
                        }
                    }

                    if (DisplayObjects)
                    {
                        var color = DisplayObjectsColor.Value;
                        if (color.Alpha != 0)
                        {
                            context.Owner.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                            //foreach( var refObject in Objects )
                            //{
                            //	var obj = refObject.Value;
                            //	if( obj != null && obj.EnabledInHierarchy )
                            //		context.viewport.Simple3DRenderer.AddBounds( obj.SpaceBounds.CalculatedBoundingBox );
                            //}

                            foreach (var item in CalculateObjects())
                            {
                                RenderItem(context.Owner.Simple3DRenderer, item);
                            }
                        }
                    }
                }
            }
        }
コード例 #10
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            //if( EnabledInHierarchy && VisibleInHierarchy && mode == GetRenderSceneDataMode.InsideFrustum )
            {
                //display editor selection
                {
                    var context2 = context.objectInSpaceRenderingContext;

                    //bool show = ( ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplayAreas ) || context2.selectedObjects.Contains( this ) || context2.canSelectObjects.Contains( this ) || context2.dragDropCreateObject == this;
                    //if( show )
                    if (CheckNeedShowDevelopmentDataOfAreaAndPoints(context, mode))
                    {
                        var pointPositions = GetPointPositions();

                        //!!!!count limit

                        var viewport = context.Owner;
                        var renderer = viewport.Simple3DRenderer;
                        if (renderer != null)
                        {
                            ColorValue color;
                            if (context2.selectedObjects.Contains(this))
                            {
                                color = ProjectSettings.Get.SelectedColor;
                            }
                            else if (context2.canSelectObjects.Contains(this))
                            {
                                color = ProjectSettings.Get.CanSelectColor;
                            }
                            else
                            {
                                color = ProjectSettings.Get.SceneShowAreaColor;
                            }

                            renderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);

                            for (int n = 0; n < pointPositions.Length; n++)
                            {
                                var from = pointPositions[n];
                                var to   = pointPositions[(n + 1) % pointPositions.Length];
                                renderer.AddLine(from, to);
                            }
                        }
                    }
                }
            }
        }
コード例 #11
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            base.OnGetRenderSceneData(context, mode, modeGetObjectsItem);

            if (EnabledInHierarchy && VisibleInHierarchy)
            {
                var item = new Component_RenderingPipeline.RenderSceneData.TransparentRenderingAddOffsetWhenSortByDistanceVolumeItem();
                item.Box = GetBox();
                context.FrameData.RenderSceneData.TransparentRenderingAddOffsetWhenSortByDistanceVolumes.Add(item);
            }

            if (EnabledInHierarchy && VisibleInHierarchy && mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                bool show = (ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplayVolumes) || context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this;
                if (show)
                {
                    //if( context2.displayVolumesCounter < context2.displayVolumesMax )
                    //{
                    //	context2.displayVolumesCounter++;

                    ColorValue color;
                    if (context2.selectedObjects.Contains(this))
                    {
                        color = ProjectSettings.Get.SelectedColor;
                    }
                    else if (context2.canSelectObjects.Contains(this))
                    {
                        color = ProjectSettings.Get.CanSelectColor;
                    }
                    else
                    {
                        color = ProjectSettings.Get.SceneShowVolumeColor;
                    }

                    if (color.Alpha != 0)
                    {
                        context.Owner.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                        RenderShape(context2);
                    }

                    //}
                }
            }
        }
コード例 #12
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            if (EnabledInHierarchy && VisibleInHierarchy && mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                bool show = (context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this) || AlwaysDisplayBulletInitialPosition;
                if (show)
                {
                    var renderer = context.Owner.Simple3DRenderer;

                    var tr  = GetBulletWorldInitialTransform();
                    var ray = new Ray(tr.Position, tr.Rotation.GetForward() * 0.1);

                    renderer.SetColor(new ColorValue(1, 0, 0));
                    renderer.AddArrow(ray.Origin, ray.GetEndPoint());
                }
            }
        }
コード例 #13
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            //if( EnabledInHierarchyAndIsNotResource )
            //	Update();

            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                bool show = (ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplaySoundSources) ||
                            context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this;
                if (show)
                {
                    if (context2.displaySoundSourcesCounter < context2.displaySoundSourcesMax)
                    {
                        context2.displaySoundSourcesCounter++;

                        ColorValue color;
                        if (context2.selectedObjects.Contains(this))
                        {
                            color = ProjectSettings.Get.SelectedColor;
                        }
                        else if (context2.canSelectObjects.Contains(this))
                        {
                            color = ProjectSettings.Get.CanSelectColor;
                        }
                        else
                        {
                            color = ProjectSettings.Get.SceneShowSoundSourceColor;
                        }

                        var viewport = context.Owner;
                        viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                        DebugDraw(viewport);
                    }
                }
            }
        }
コード例 #14
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                if (EngineApp.ApplicationType != EngineApp.ApplicationTypeEnum.Simulation ||
                    EngineApp.ApplicationType == EngineApp.ApplicationTypeEnum.Simulation && DisplayInSimulation)
                {
                    var cameraPosition = context.Owner.CameraSettings.Position;
                    var sphere         = new Sphere(cameraPosition, VisibilityDistance);

                    if (SpaceBounds.CalculatedBoundingSphere.Intersects(ref sphere))
                    {
                        if (Step.Value >= 0)
                        {
                            Render(context2);
                        }
                    }
                }
            }
        }
コード例 #15
0
        private void ParentMeshInSpace_GetRenderSceneDataAddToFrameData(Component_MeshInSpace sender, ViewportRenderingContext context, GetRenderSceneDataMode mode, ref Component_RenderingPipeline.RenderSceneData.MeshItem item)
        {
            if (!CalculateOnCPU)
            {
                Component_Skeleton skeleton = ReplaceSkeleton;
                if (skeleton == null)
                {
                    skeleton = ParentMeshInSpace?.Mesh.Value?.Skeleton;
                }

                if (skeleton != null)
                {
                    var animation = PlayAnimation.Value;
                    if (animation != null)
                    {
                        UpdateAnimationTime();

                        //settings.animationStates = new AnimationStateItem[ 1 ];
                        //settings.animationStates[ 0 ] = new AnimationStateItem( animation, currentLocalTime, 1 );

                        var skeletonAnimation = animation as Component_SkeletonAnimation;
                        var track             = skeletonAnimation?.Track.Value;

                        if (track != null || CalculateBoneTransforms != null)
                        {
                            Update(skeleton, track, currentAnimationTime);

                            if (transformMatrixRelativeToSkin != null && transformMatrixRelativeToSkin.Length != 0)
                            {
                                item.AnimationData = new Component_RenderingPipeline.RenderSceneData.MeshItem.AnimationDataClass();

                                bool dualQuaternion = false;                                // GetSkinningMode( skeleton ) == Component_Skeleton.SkinningModeEnum.DualQuaternion;
                                if (dualQuaternion)
                                {
                                    item.AnimationData.Mode = 2;
                                }
                                else
                                {
                                    item.AnimationData.Mode = 1;
                                }

                                //create dynamic texture
                                var size         = new Vector2I(4, MathEx.NextPowerOfTwo(transformMatrixRelativeToSkin.Length));
                                var bonesTexture = context.DynamicTexture_Alloc(ViewportRenderingContext.DynamicTextureType.DynamicTexture, Component_Image.TypeEnum._2D, size, PixelFormat.Float32RGBA, 0, false);

                                //try get array from texture to minimize memory allocations
                                var surfaces = bonesTexture.Result.GetData();
                                if (surfaces == null)
                                {
                                    surfaces = new GpuTexture.SurfaceData[] { new GpuTexture.SurfaceData(0, 0, new byte[size.X * size.Y * 16]) }
                                }
                                ;
                                var data = surfaces[0].data;

                                //copy data to the texture
                                unsafe
                                {
                                    fixed(byte *pData2 = data)
                                    {
                                        Matrix4F *pData = (Matrix4F *)pData2;

                                        for (int n = 0; n < transformMatrixRelativeToSkin.Length; n++)
                                        {
                                            pData[n] = transformMatrixRelativeToSkin[n];
                                        }
                                    }
                                }
                                bonesTexture.Result.SetData(new GpuTexture.SurfaceData[] { new GpuTexture.SurfaceData(0, 0, data) });

                                item.AnimationData.BonesTexture = bonesTexture;
                            }
                        }
                    }
                }
            }
        }

        void RenderSkeleton(Viewport viewport)
        {
            // ParentMeshInSpace.Transform is automaticaly applyed to ParentMeshInSpace.Mesh, skeleton must be transformed manually
            var transformMatrix = ParentMeshInSpace?.Transform.Value?.ToMatrix4() ?? Matrix4.Identity;

            var skeletonArrows = GetCurrentAnimatedSkeletonArrows();

            if (skeletonArrows != null)
            {
                var color = new ColorValue(0, 0.5, 1, 0.7);                   //ToDo : Вынести в другое место.
                viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);

                foreach (var arrow in skeletonArrows)
                {
                    viewport.Simple3DRenderer.AddArrow(transformMatrix * arrow.Start, transformMatrix * arrow.End);
                }
            }
        }

        bool CheckNeedModifiableMesh()
        {
            if (CalculateOnCPU)
            {
                if (ReplaceSkeleton.ReferenceSpecified)
                {
                    return(true);
                }
                var mesh = ParentMeshInSpace?.Mesh.Value;
                if (mesh != null && mesh.Skeleton.ReferenceSpecified)
                {
                    return(true);
                }

                if (PlayAnimation.ReferenceSpecified)
                {
                    return(true);
                }
            }

            return(false);
        }

        void UpdateModifiableMesh(ViewportRenderingContext context)
        {
            var originalMesh   = ParentMeshInSpace.Mesh.Value;
            var modifiableMesh = ParentMeshInSpace.ModifiableMesh;

            Component_Skeleton skeleton = ReplaceSkeleton;

            if (skeleton == null)
            {
                skeleton = originalMesh.Skeleton;
            }
            if (skeleton != null)
            {
                //!!!!сериализовывать

                var animation = PlayAnimation.Value;
                if (animation != null)
                {
                    UpdateAnimationTime();

                    //settings.animationStates = new AnimationStateItem[ 1 ];
                    //settings.animationStates[ 0 ] = new AnimationStateItem( animation, currentLocalTime, 1 );

                    var skeletonAnimation = animation as Component_SkeletonAnimation;
                    var track             = skeletonAnimation?.Track.Value;

                    if (track != null || CalculateBoneTransforms != null)
                    {
                        Update(skeleton, track, currentAnimationTime);
                        CalculateCPU(skeleton, originalMesh, modifiableMesh);
                    }
                }

                if (needResetToOriginalMesh)
                {
                    needResetToOriginalMesh = false;
                    if (CalculateOnCPU)
                    {
                        ResetToOriginalMesh(originalMesh, modifiableMesh);
                    }
                }
            }
        }

        /////////////////////////////////////////

        void ResetTime(bool needResetToOriginalMesh)
        {
            if (needResetToOriginalMesh)
            {
                this.needResetToOriginalMesh = true;
            }
            currentEngineTime    = EngineApp.EngineTime;
            currentAnimationTime = (PlayAnimation.Value as Component_SkeletonAnimation)?.TrackStartTime ?? 0;
        }

        void UpdateAnimationTime()
        {
            double t         = EngineApp.EngineTime;
            double increment = t - currentEngineTime;

            currentEngineTime     = t;
            currentAnimationTime += increment * Speed;

            var animation = PlayAnimation.Value as Component_SkeletonAnimation;

            if (animation != null)
            {
                double animationStartTime = animation.TrackStartTime;
                double animationLength    = animation.Length;
                if (animationLength > 0)
                {
                    if (AutoRewind)
                    {
                        while (currentAnimationTime > animationStartTime + animationLength)
                        {
                            currentAnimationTime -= animationLength;
                        }
                        while (currentAnimationTime < animationStartTime)
                        {
                            currentAnimationTime += animationLength;
                        }
                    }
                    else
                    {
                        MathEx.Clamp(ref currentAnimationTime, animationStartTime, animationStartTime + animationLength);
                    }
                }
                else
                {
                    currentAnimationTime = animationStartTime;
                }
            }
            else
            {
                currentAnimationTime = 0;
            }
        }
コード例 #16
0
        public bool CheckNeedShowDevelopmentDataOfAreaAndPoints(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            if (EnabledInHierarchy && VisibleInHierarchy && mode == GetRenderSceneDataMode.InsideFrustum)
            {
                if (ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplayAreas)
                {
                    return(true);
                }

                var context2 = context.objectInSpaceRenderingContext;

                if (context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this)
                {
                    return(true);
                }

                foreach (var point in GetPoints())
                {
                    if (context2.selectedObjects.Contains(point) || context2.canSelectObjects.Contains(point) || context2.objectToCreate == point)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
コード例 #17
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            var time = context.Owner.LastUpdateTime;

            if (time != transformPositionByTime1_Time)
            {
                transformPositionByTime2_Time     = transformPositionByTime1_Time;
                transformPositionByTime2_Position = transformPositionByTime1_Position;
                transformPositionByTime1_Time     = time;
                transformPositionByTime1_Position = TransformV.Position;
            }

            if (mode == GetRenderSceneDataMode.InsideFrustum || (mode == GetRenderSceneDataMode.ShadowCasterOutsideFrustum && CastShadows))
            {
                var size = Size.Value;
                //var color = Color.Value;
                //var opacity = Opacity.Value;
                //if( size != Vector2.Zero )//&& color.Alpha != 0 && opacity != 0 )
                //{

                var context2 = context.objectInSpaceRenderingContext;
                context2.disableShowingLabelForThisObject = true;

                var tr             = Transform.Value;
                var cameraSettings = context.Owner.CameraSettings;
                var trPosition     = tr.Position;

                //update and get LOD info
                var contextItem = SceneLODUtility.UpdateAndGetContextItem(ref renderingContextItems, context, null, VisibilityDistance, ref trPosition);

                bool skip = false;
                if (contextItem.currentLOD == -1 && contextItem.transitionTime == 0)
                {
                    skip = true;
                }

                if (!skip)
                {
                    var item = new Component_RenderingPipeline.RenderSceneData.BillboardItem();
                    item.Creator = this;
                    SpaceBounds.CalculatedBoundingBox.GetCenter(out item.BoundingBoxCenter);
                    item.BoundingSphere = SpaceBounds.CalculatedBoundingSphere;
                    item.CastShadows    = CastShadows;
                    item.ReceiveDecals  = ReceiveDecals;
                    item.Material       = Material;

                    //get data for rendering
                    float itemLodValue = 0;
                    {
                        if (contextItem.currentLOD == 0 && contextItem.toLOD == -1)
                        {
                            itemLodValue = contextItem.transitionTime;
                        }
                        else if (contextItem.currentLOD == -1 && contextItem.toLOD == 0)
                        {
                            itemLodValue = -contextItem.transitionTime;
                        }
                    }

                    //set LOD value
                    item.LODValue = itemLodValue;

                    //!!!!double
                    item.Position = tr.Position.ToVector3F();
                    item.Size     = new Vector2(size.X * Math.Max(tr.Scale.X, tr.Scale.Y), size.Y * tr.Scale.Z).ToVector2F();
                    item.Rotation = Rotation.Value.InRadians().ToRadianF();
                    item.Color    = Color;

                    //PositionPreviousFrame
                    var previousTime = time - context.Owner.LastUpdateTimeStep;
                    if (!GetTransformPositionByTime(previousTime, out var previousPosition))
                    {
                        previousPosition = tr.Position;
                    }
                    item.PositionPreviousFrame = previousPosition.ToVector3F();

                    context.FrameData.RenderSceneData.Billboards.Add(ref item);


                    //display editor selection
                    if (mode == GetRenderSceneDataMode.InsideFrustum)
                    {
                        if (context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this))                             // || context.dragDropCreateObject == this )
                        {
                            if (context2.displayBillboardsCounter < context2.displayBillboardsMax)
                            {
                                context2.displayBillboardsCounter++;

                                ColorValue color;
                                if (context2.selectedObjects.Contains(this))
                                {
                                    color = ProjectSettings.Get.SelectedColor;
                                }
                                else
                                {
                                    color = ProjectSettings.Get.CanSelectColor;
                                }
                                color.Alpha *= .5f;

                                var viewport = context.Owner;
                                if (viewport.Simple3DRenderer != null)
                                {
                                    viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);

                                    item.GetWorldMatrix(out var worldMatrix);

                                    //!!!!double
                                    worldMatrix.ToMatrix4(out var worldMatrix2);
                                    viewport.Simple3DRenderer.AddMesh(GetBillboardMesh().Result, ref worldMatrix2, false, false);
                                }
                            }
                        }
                    }
                }

                //}
            }
        }
コード例 #18
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            if (EnabledInHierarchy && VisibleInHierarchy && mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var cameraSettings = context.Owner.CameraSettings;
                var tr             = Transform.Value;

                bool skip        = false;
                var  maxDistance = VisibilityDistance.Value;
                if (maxDistance < cameraSettings.FarClipDistance && (cameraSettings.Position - tr.Position).LengthSquared() > maxDistance * maxDistance)
                {
                    skip = true;
                }

                if (!skip)
                {
                    {
                        var item = new Component_RenderingPipeline.RenderSceneData.DecalItem();
                        item.Creator     = this;
                        item.BoundingBox = SpaceBounds.CalculatedBoundingBox;
                        //item.BoundingSphere = SpaceBounds.CalculatedBoundingSphere;

                        item.Position = tr.Position;
                        item.Rotation = tr.Rotation.ToQuaternionF();
                        item.Scale    = tr.Scale.ToVector3F();

                        item.Material    = Material;
                        item.Color       = Color;
                        item.NormalsMode = NormalsMode.Value;
                        item.SortOrder   = SortOrder;

                        context.FrameData.RenderSceneData.Decals.Add(ref item);
                    }

                    //display editor selection
                    {
                        var context2 = context.objectInSpaceRenderingContext;

                        bool show = (ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplayDecals) || context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this;
                        if (show)
                        {
                            if (context2.displayDecalsCounter < context2.displayDecalsMax)
                            {
                                context2.displayDecalsCounter++;

                                ColorValue color;
                                if (context2.selectedObjects.Contains(this))
                                {
                                    color = ProjectSettings.Get.SelectedColor;
                                }
                                else if (context2.canSelectObjects.Contains(this))
                                {
                                    color = ProjectSettings.Get.CanSelectColor;
                                }
                                else
                                {
                                    color = ProjectSettings.Get.SceneShowDecalColor;
                                }

                                var viewport = context.Owner;
                                if (viewport.Simple3DRenderer != null)
                                {
                                    viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                                    DebugDraw(viewport);
                                }
                            }
                        }
                        //if( !show )
                        //	context.disableShowingLabelForThisObject = true;
                    }
                }
            }
        }
コード例 #19
0
 public static void PerformGetRenderSceneData(Component_ObjectInSpace obj, ViewportRenderingContext context, GetRenderSceneDataMode mode)
 {
     obj.PerformGetRenderSceneData(context, mode);
 }
コード例 #20
0
 public static void PerformGetRenderSceneData(Component_ObjectInSpace obj, ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
 {
     obj.PerformGetRenderSceneData(context, mode, modeGetObjectsItem);
 }
コード例 #21
0
        //void ParentSprite_GetRenderSceneDataBefore( Component_ObjectInSpace sender, ViewportRenderingContext context, GetRenderSceneDataMode mode )
        //{
        //}

        private void ParentSprite_GetRenderSceneDataAddToFrameData(Component_MeshInSpace sender, ViewportRenderingContext context, GetRenderSceneDataMode mode, ref Component_RenderingPipeline.RenderSceneData.MeshItem item)
        {
            Component_Material material = null;

            var animation = PlayAnimation.Value as Component_SpriteAnimation;

            if (animation != null)
            {
                UpdateAnimationTime();

                material = animation.Material;

                var frame = animation.GetFrameByTime(currentAnimationTime);
                if (frame != null)
                {
                    var m = frame.Material.Value;
                    if (m != null)
                    {
                        material = m;
                    }
                }
            }

            item.ReplaceMaterial            = material;
            item.ReplaceMaterialSelectively = null;
        }
コード例 #22
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            base.OnGetRenderSceneData(context, mode, modeGetObjectsItem);

            var time = context.Owner.LastUpdateTime;

            if (time != transformPositionByTime1_Time)
            {
                transformPositionByTime2_Time     = transformPositionByTime1_Time;
                transformPositionByTime2_Position = transformPositionByTime1_Position;
                transformPositionByTime1_Time     = time;
                transformPositionByTime1_Position = TransformV.Position;
            }

            if (mode == GetRenderSceneDataMode.InsideFrustum || (mode == GetRenderSceneDataMode.ShadowCasterOutsideFrustum && CastShadows))
            {
                var size = Size.Value;
                //var color = Color.Value;
                //var opacity = Opacity.Value;
                //if( size != Vector2.Zero )//&& color.Alpha != 0 && opacity != 0 )
                //{

                var context2 = context.objectInSpaceRenderingContext;
                context2.disableShowingLabelForThisObject = true;

                var tr             = Transform.Value;
                var cameraSettings = context.Owner.CameraSettings;

                var cameraDistanceMinSquared = SceneLODUtility.GetCameraDistanceMinSquared(cameraSettings, SpaceBounds);
                var visibilityDistance       = VisibilityDistance.Value;

                if (cameraDistanceMinSquared < visibilityDistance * visibilityDistance || mode == GetRenderSceneDataMode.ShadowCasterOutsideFrustum)
                {
                    var allowOutlineSelect = context.renderingPipeline.UseRenderTargets && ProjectSettings.Get.SceneEditorSelectOutlineEffectEnabled;

                    var item = new Component_RenderingPipeline.RenderSceneData.BillboardItem();
                    item.Creator = this;
                    SpaceBounds.CalculatedBoundingBox.GetCenter(out item.BoundingBoxCenter);
                    item.BoundingSphere     = SpaceBounds.CalculatedBoundingSphere;
                    item.CastShadows        = CastShadows;
                    item.ShadowOffset       = (float)ShadowOffset.Value;
                    item.ReceiveDecals      = ReceiveDecals;
                    item.Material           = Material;
                    item.VisibilityDistance = (float)visibilityDistance;
                    item.CutVolumes         = CutVolumes;

                    var specialEffects = SpecialEffects.Value;
                    if (specialEffects != null && specialEffects.Count != 0)
                    {
                        item.SpecialEffects = specialEffects;
                    }

                    //display outline effect of editor selection
                    if (mode == GetRenderSceneDataMode.InsideFrustum && allowOutlineSelect && context2.selectedObjects.Contains(this))
                    {
                        if (context2.displayBillboardsCounter < context2.displayBillboardsMax)
                        {
                            context2.displayBillboardsCounter++;

                            var color = ProjectSettings.Get.SelectedColor.Value;
                            //color.Alpha *= .5f;

                            var effect = new ObjectSpecialRenderingEffect_Outline();
                            effect.Group = int.MaxValue;
                            effect.Color = color;

                            if (item.SpecialEffects != null)
                            {
                                item.SpecialEffects = new List <ObjectSpecialRenderingEffect>(item.SpecialEffects);
                            }
                            else
                            {
                                item.SpecialEffects = new List <ObjectSpecialRenderingEffect>();
                            }
                            item.SpecialEffects.Add(effect);
                        }
                    }

                    //!!!!double
                    item.Position = tr.Position.ToVector3F();
                    item.Size     = new Vector2(size.X * Math.Max(tr.Scale.X, tr.Scale.Y), size.Y * tr.Scale.Z).ToVector2F();
                    item.Rotation = Rotation.Value.InRadians().ToRadianF();
                    item.Color    = Color;

                    //PositionPreviousFrame
                    var previousTime = time - context.Owner.LastUpdateTimeStep;
                    if (!GetTransformPositionByTime(previousTime, out var previousPosition))
                    {
                        previousPosition = tr.Position;
                    }
                    item.PositionPreviousFrame = previousPosition.ToVector3F();

                    context.FrameData.RenderSceneData.Billboards.Add(ref item);


                    //display editor selection
                    if (mode == GetRenderSceneDataMode.InsideFrustum)
                    {
                        if ((!allowOutlineSelect && context2.selectedObjects.Contains(this)) || context2.canSelectObjects.Contains(this))                               // || context.dragDropCreateObject == this )
                        {
                            if (context2.displayBillboardsCounter < context2.displayBillboardsMax)
                            {
                                context2.displayBillboardsCounter++;

                                ColorValue color;
                                if (context2.selectedObjects.Contains(this))
                                {
                                    color = ProjectSettings.Get.SelectedColor;
                                }
                                else
                                {
                                    color = ProjectSettings.Get.CanSelectColor;
                                }
                                color.Alpha *= .5f;

                                var viewport = context.Owner;
                                if (viewport.Simple3DRenderer != null)
                                {
                                    viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);

                                    item.GetWorldMatrix(out var worldMatrix);

                                    //!!!!double
                                    worldMatrix.ToMatrix4(out var worldMatrix2);
                                    viewport.Simple3DRenderer.AddMesh(GetBillboardMesh().Result, ref worldMatrix2, false, false);
                                }
                            }
                        }
                    }
                }

                //}
            }
        }
コード例 #23
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            base.OnGetRenderSceneData(context, mode, modeGetObjectsItem);

            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                if (!ParentScene.GetDisplayDevelopmentDataInThisApplication())
                {
                    context2.disableShowingLabelForThisObject = true;
                }

                var renderer = context.Owner.Simple3DRenderer;
                if (renderer != null)
                {
                    var start      = GetStartPosition();
                    var startScale = GetStartScale();
                    var end        = GetEndPosition();
                    var endScale   = GetEndScale();

                    if (end != start)
                    {
                        var center = (start + end) * 0.5;
                        var dir    = (end - start).GetNormalize();

                        //!!!!transparent rendering

                        renderer.SetColor(Color);

                        switch (StartCapStyle.Value)
                        {
                        case CapStyleEnum.Arrow:
                            renderer.AddArrow(center, start, Thickness * 5 * startScale, Thickness * 1.5 * startScale, true, Thickness);
                            break;

                        case CapStyleEnum.Flat:
                            renderer.AddLine(center - dir * Thickness * 0.5, start + dir * Thickness * 0.5, Thickness);
                            break;

                        case CapStyleEnum.Sphere:
                            renderer.AddLine(center - dir * Thickness * 0.5, start + dir * Thickness * 0.5, Thickness);
                            renderer.AddSphere(start, Thickness * 2 * startScale, solid: true);
                            break;
                        }

                        switch (EndCapStyle.Value)
                        {
                        case CapStyleEnum.Arrow:
                            renderer.AddArrow(center, end, Thickness * 5 * endScale, Thickness * 1.5 * endScale, true, Thickness);
                            break;

                        case CapStyleEnum.Flat:
                            renderer.AddLine(center + dir * Thickness * 0.5, end - dir * Thickness * 0.5, Thickness);
                            break;

                        case CapStyleEnum.Sphere:
                            renderer.AddLine(center + dir * Thickness * 0.5, end - dir * Thickness * 0.5, Thickness);
                            renderer.AddSphere(end, Thickness * 2 * endScale, solid: true);
                            break;
                        }
                    }
                }
            }
        }
コード例 #24
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            base.OnGetRenderSceneData(context, mode, modeGetObjectsItem);

            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                //!!!!опцию DisplayPathfindingGeometries

                bool show = (ParentScene.GetDisplayDevelopmentDataInThisApplication() /*!!!! && ParentScene.DisplayLights */) ||
                            context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this;
                if (show)
                {
                    ColorValue color;
                    if (context2.selectedObjects.Contains(this))
                    {
                        color = ProjectSettings.Get.SelectedColor;
                    }
                    else if (context2.canSelectObjects.Contains(this))
                    {
                        color = ProjectSettings.Get.CanSelectColor;
                    }
                    else
                    {
                        //!!!!
                        color = new ColorValue(0, 0, 1);
                        //color = ProjectSettings.Get.SceneShowLightColor;
                    }

                    var viewport = context.Owner;
                    viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                    DebugDraw(viewport);
                }
                //if( !show )
                //	context.disableShowingLabelForThisObject = true;



                //var displayColor = DisplayColor.Value;
                //if( displayColor.Alpha != 0 )
                //{
                //	context.viewport.Simple3DRenderer.SetColor( displayColor, displayColor * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier );
                //	RenderShape( context );
                //}

                //if( DisplayObjects )
                //{
                //	var color = DisplayObjectsColor.Value;
                //	if( color.Alpha != 0 )
                //	{
                //		context.viewport.Simple3DRenderer.SetColor( color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier );
                //		//foreach( var refObject in Objects )
                //		//{
                //		//	var obj = refObject.Value;
                //		//	if( obj != null && obj.EnabledInHierarchy )
                //		//		context.viewport.Simple3DRenderer.AddBounds( obj.SpaceBounds.CalculatedBoundingBox );
                //		//}

                //		foreach( var item in CalculateObjects() )
                //			RenderItem( context.viewport.Simple3DRenderer, item );
                //	}
                //}
            }
        }
コード例 #25
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            base.OnGetRenderSceneData(context, mode);

            if (EnabledInHierarchy && VisibleInHierarchy)
            {
                var item = new Component_RenderingPipeline.RenderSceneData.CutVolumeItem();
                item.Shape = Shape;

                switch (item.Shape)
                {
                case ShapeEnum.Box:
                    item.Transform = Transform;
                    break;

                case ShapeEnum.Sphere:
                {
                    var sphere = GetSphere();
                    var scl    = sphere.Radius * 2;
                    item.Transform = new Transform(sphere.Origin, Quaternion.Identity, new Vector3(scl, scl, scl));
                }
                break;

                case ShapeEnum.Cylinder:
                {
                    var tr    = Transform.Value;
                    var sclYZ = Math.Max(tr.Scale.Y, tr.Scale.Z);
                    item.Transform = new Transform(tr.Position, tr.Rotation, new Vector3(tr.Scale.X, sclYZ, sclYZ));
                }
                break;
                }

                context.FrameData.RenderSceneData.CutVolumes.Add(item);
            }

            if (EnabledInHierarchy && VisibleInHierarchy && mode == GetRenderSceneDataMode.InsideFrustum)
            {
                var context2 = context.objectInSpaceRenderingContext;

                bool show = (ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplayVolumes) || context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this;
                if (show)
                {
                    //if( context2.displayVolumesCounter < context2.displayVolumesMax )
                    //{
                    //	context2.displayVolumesCounter++;

                    ColorValue color;
                    if (context2.selectedObjects.Contains(this))
                    {
                        color = ProjectSettings.Get.SelectedColor;
                    }
                    else if (context2.canSelectObjects.Contains(this))
                    {
                        color = ProjectSettings.Get.CanSelectColor;
                    }
                    else
                    {
                        color = ProjectSettings.Get.SceneShowVolumeColor;
                    }

                    if (color.Alpha != 0)
                    {
                        context.Owner.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                        RenderShape(context2);
                    }

                    //}
                }
            }
        }
コード例 #26
0
        public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem)
        {
            if (mode == GetRenderSceneDataMode.InsideFrustum)
            {
                //UpdateProcessedCubemaps();

                var sphere = Sphere;
                if (sphere.Radius > 0)
                {
                    var item = new Component_RenderingPipeline.RenderSceneData.ReflectionProbeItem();
                    item.Creator     = this;
                    item.BoundingBox = SpaceBounds.CalculatedBoundingBox;
                    //item.BoundingSphere = SpaceBounds.CalculatedBoundingSphere;
                    item.Sphere = sphere;

                    //if( Mode.Value == ModeEnum.Resource )
                    //{
                    if (processedEnvironmentCubemap != null)
                    {
                        item.CubemapEnvironment = processedEnvironmentCubemap;
                    }
                    else
                    {
                        item.CubemapEnvironment = Cubemap;
                    }

                    item.CubemapIrradiance = processedIrradianceCubemap;

                    GetRotationMatrix(out item.Rotation);
                    item.Multiplier = Multiplier.Value.ToVector3F();

                    //item.CubemapEnvironment = Cubemap;
                    //item.CubemapIrradiance = CubemapIrradiance;
                    //}
                    //else
                    //{
                    //	//!!!!IBL
                    //	item.CubemapEnvironment = CaptureTexture;
                    //}

                    context.FrameData.RenderSceneData.ReflectionProbes.Add(item);
                }

                {
                    var context2 = context.objectInSpaceRenderingContext;

                    bool show = (ParentScene.GetDisplayDevelopmentDataInThisApplication() && ParentScene.DisplayReflectionProbes) || context2.selectedObjects.Contains(this) || context2.canSelectObjects.Contains(this) || context2.objectToCreate == this;
                    if (show)
                    {
                        if (context2.displayReflectionProbesCounter < context2.displayReflectionProbesMax)
                        {
                            context2.displayReflectionProbesCounter++;

                            ColorValue color;
                            if (context2.selectedObjects.Contains(this))
                            {
                                color = ProjectSettings.Get.SelectedColor;
                            }
                            else if (context2.canSelectObjects.Contains(this))
                            {
                                color = ProjectSettings.Get.CanSelectColor;
                            }
                            else
                            {
                                color = ProjectSettings.Get.SceneShowReflectionProbeColor;
                            }

                            var viewport = context.Owner;
                            if (viewport.Simple3DRenderer != null)
                            {
                                viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);
                                DebugDraw(viewport);
                                //viewport.Simple3DRenderer.AddSphere( Transform.Value.ToMat4(), 0.5, 32 );
                            }
                        }
                    }
                    //if( !show )
                    //	context.disableShowingLabelForThisObject = true;
                }
            }
        }
コード例 #27
0
        void ParentMeshInSpace_GetRenderSceneDataBefore(Component_ObjectInSpace sender, ViewportRenderingContext context, GetRenderSceneDataMode mode)
        {
            //check need modifiable mesh
            bool needModifiableMesh = CheckNeedModifiableMesh();

            //check need recreate
            if (needRecreateModifiableMesh)
            {
                if (ParentMeshInSpace.ModifiableMesh_CreatedByObject == this)
                {
                    ParentMeshInSpace.ModifiableMesh_Destroy();
                }
                needRecreateModifiableMesh = false;
            }

            //recreate
            if (needModifiableMesh)
            {
                if (ParentMeshInSpace.ModifiableMesh == null)
                {
                    if (CalculateOnCPU)
                    {
                        var flags = Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersCreateDuplicate | Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersDynamic;

                        ParentMeshInSpace.ModifiableMesh_Create(this, flags);
                    }

                    //var flags = Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersCreateDuplicate;
                    //if( CalculateOnCPU )
                    //	flags |= Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersDynamic;
                    //else
                    //	flags |= Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersComputeWrite;
                    //ParentMeshInSpace.ModifiableMesh_Create( this, flags );

                    needRecreateModifiableMesh = false;
                }
            }
            else
            {
                if (ParentMeshInSpace.ModifiableMesh_CreatedByObject == this)
                {
                    ParentMeshInSpace.ModifiableMesh_Destroy();
                    needRecreateModifiableMesh = false;
                }
            }

            //update data
            if (ParentMeshInSpace.ModifiableMesh_CreatedByObject == this)
            {
                UpdateModifiableMesh(context);
            }

            if (DisplaySkeleton)
            {
                RenderSkeleton(context.Owner);
            }
        }