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); } } } } } }
public override void OnGetRenderSceneData(ViewportRenderingContext context, GetRenderSceneDataMode mode) { base.OnGetRenderSceneData(context, mode); if (mode == GetRenderSceneDataMode.InsideFrustum && AutoUpdate) { lastVisibleTime = Time.Current; } }
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; } }
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; } } }
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; } } }
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; } }
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; } } }
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); } }
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); } } } } } }
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); } } } } } }
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); } //} } } }
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()); } } }
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); } } } }
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); } } } } }
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; } }
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); }
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); } } } } } //} } }
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; } } } }
public static void PerformGetRenderSceneData(Component_ObjectInSpace obj, ViewportRenderingContext context, GetRenderSceneDataMode mode) { obj.PerformGetRenderSceneData(context, mode); }
public static void PerformGetRenderSceneData(Component_ObjectInSpace obj, ViewportRenderingContext context, GetRenderSceneDataMode mode, Component_Scene.GetObjectsInSpaceItem modeGetObjectsItem) { obj.PerformGetRenderSceneData(context, mode, modeGetObjectsItem); }
//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; }
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); } } } } } //} } }
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; } } } } }
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 ); // } //} } }
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); } //} } } }
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; } } }
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); } }