private void UpdateAnnotationOffsets(SceneNodeContainer sncAnnotation, UIInput input) { if (input.CircleCanvasPos.x <= _canvasWidth / 2) { //LEFT sncAnnotation.GetComponent <RectTransformComponent>().Anchors = UIElementPosition.GetAnchors(AnchorPos.DOWN_DOWN_LEFT); sncAnnotation.GetComponent <RectTransformComponent>().Offsets = UIElementPosition.CalcOffsets( AnchorPos.DOWN_DOWN_LEFT, input.AnnotationCanvasPos, UIHelper.CanvasHeightInit, UIHelper.CanvasWidthInit, UIHelper.AnnotationDim); } else { //RIGHT sncAnnotation.GetComponent <RectTransformComponent>().Anchors = UIElementPosition.GetAnchors(AnchorPos.DOWN_DOWN_RIGHT); sncAnnotation.GetComponent <RectTransformComponent>().Offsets = UIElementPosition.CalcOffsets( AnchorPos.DOWN_DOWN_RIGHT, input.AnnotationCanvasPos, UIHelper.CanvasHeightInit, UIHelper.CanvasWidthInit, UIHelper.AnnotationDim); } }
private SceneContainer CreateGui() { var vsTex = AssetStorage.Get <string>("texture.vert"); var psTex = AssetStorage.Get <string>("texture.frag"); var btnFuseeLogo = new GUIButton { Name = "Canvas_Button" }; btnFuseeLogo.OnMouseEnter += BtnLogoEnter; btnFuseeLogo.OnMouseExit += BtnLogoExit; btnFuseeLogo.OnMouseDown += BtnLogoDown; var guiFuseeLogo = new Texture(AssetStorage.Get <ImageData>("FuseeText.png")); var fuseeLogo = new TextureNode( "fuseeLogo", vsTex, psTex, //Set the diffuse texture you want to use. guiFuseeLogo, //Define anchor points. They are given in percent, seen from the lower left corner, respectively to the width/height of the parent. //In this setup the element will stretch horizontally but stay the same vertically if the parent element is scaled. UIElementPosition.GetAnchors(AnchorPos.TopTopLeft), //Define Offset and therefor the size of the element. UIElementPosition.CalcOffsets(AnchorPos.TopTopLeft, new float2(0, _initCanvasHeight - 0.5f), _initCanvasHeight, _initCanvasWidth, new float2(1.75f, 0.5f)) ); fuseeLogo.AddComponent(btnFuseeLogo); // Initialize the information text line. var textToDisplay = "FUSEE 3D Scene"; if (_scene.Header.CreatedBy != null || _scene.Header.CreationDate != null) { textToDisplay += " created"; if (_scene.Header.CreatedBy != null) { textToDisplay += " by " + _scene.Header.CreatedBy; } if (_scene.Header.CreationDate != null) { textToDisplay += " on " + _scene.Header.CreationDate; } } var fontLato = AssetStorage.Get <Font>("Lato-Black.ttf"); var guiLatoBlack = new FontMap(fontLato, 24); var text = new TextNode( textToDisplay, "SceneDescriptionText", vsTex, psTex, UIElementPosition.GetAnchors(AnchorPos.StretchHorizontal), UIElementPosition.CalcOffsets(AnchorPos.StretchHorizontal, new float2(_initCanvasWidth / 2 - 4, 0), _initCanvasHeight, _initCanvasWidth, new float2(8, 1)), guiLatoBlack, ColorUint.Tofloat4(ColorUint.Greenery), HorizontalTextAlignment.Center, VerticalTextAlignment.Center); var canvas = new CanvasNode( "Canvas", _canvasRenderMode, new MinMaxRect { Min = new float2(-_canvasWidth / 2, -_canvasHeight / 2f), Max = new float2(_canvasWidth / 2, _canvasHeight / 2f) }); canvas.Children.Add(fuseeLogo); canvas.Children.Add(text); return(new SceneContainer { Children = new List <SceneNode> { //Add canvas. canvas } }); }
private SceneContainer CreateGui() { var vsTex = AssetStorage.Get <string>("texture.vert"); var psTex = AssetStorage.Get <string>("texture.frag"); var canvasWidth = Width / 100f; var canvasHeight = Height / 100f; var btnFuseeLogo = new GUIButton { Name = "Canvas_Button" }; btnFuseeLogo.OnMouseEnter += BtnLogoEnter; btnFuseeLogo.OnMouseExit += BtnLogoExit; btnFuseeLogo.OnMouseDown += BtnLogoDown; var guiFuseeLogo = new Texture(AssetStorage.Get <ImageData>("FuseeText.png")); var fuseeLogo = new TextureNodeContainer( "fuseeLogo", vsTex, psTex, //Set the diffuse texture you want to use. guiFuseeLogo, //Define anchor points. They are given in percent, seen from the lower left corner, respectively to the width/height of the parent. //In this setup the element will stretch horizontally but stay the same vertically if the parent element is scaled. UIElementPosition.GetAnchors(AnchorPos.TOP_TOP_LEFT), //Define Offset and therefor the size of the element. UIElementPosition.CalcOffsets(AnchorPos.TOP_TOP_LEFT, new float2(0, canvasHeight - 0.5f), canvasHeight, canvasWidth, new float2(1.75f, 0.5f)) ); fuseeLogo.AddComponent(btnFuseeLogo); var fontLato = AssetStorage.Get <Font>("Lato-Black.ttf"); var guiLatoBlack = new FontMap(fontLato, 18); var text = new TextNodeContainer( "FUSEE Simple Example", "ButtonText", vsTex, psTex, UIElementPosition.GetAnchors(AnchorPos.STRETCH_HORIZONTAL), UIElementPosition.CalcOffsets(AnchorPos.STRETCH_HORIZONTAL, new float2(canvasWidth / 2 - 4, 0), canvasHeight, canvasWidth, new float2(8, 1)), guiLatoBlack, ColorUint.Tofloat4(ColorUint.Greenery), 250f); var canvas = new CanvasNodeContainer( "Canvas", _canvasRenderMode, new MinMaxRect { Min = new float2(-canvasWidth / 2, -canvasHeight / 2f), Max = new float2(canvasWidth / 2, canvasHeight / 2f) }) { Children = new ChildList() { //Simple Texture Node, contains the fusee logo. fuseeLogo, text } }; var canvasProjComp = new ProjectionComponent(ProjectionMethod.ORTHOGRAPHIC, ZNear, ZFar, _fovy); canvas.Components.Insert(0, canvasProjComp); AddResizeDelegate(delegate { canvasProjComp.Resize(Width, Height); }); return(new SceneContainer { Children = new List <SceneNodeContainer> { //Add canvas. canvas } }); }
// Init is called on startup. public override void Init() { var fontLato = AssetStorage.Get <Font>("Lato-Black.ttf"); var fontLatoMap = new FontMap(fontLato, 32); var vsTex = AssetStorage.Get <string>("texture.vert"); var psTex = AssetStorage.Get <string>("texture.frag"); var icosphereWithTangents = new Icosphere(5); icosphereWithTangents.Tangents = icosphereWithTangents.CalculateTangents(); icosphereWithTangents.BiTangents = icosphereWithTangents.CalculateBiTangents(); icosphereWithTangents.BoundingBox = new AABBf(icosphereWithTangents.Vertices); var canvasWidth = Width / 100f; var canvasHeight = Height / 100f; var guiDescriptionScene = new SceneContainer { Children = new List <SceneNode> { new CanvasNode("Canvas", CanvasRenderMode.World, new MinMaxRect { Min = new float2(-canvasWidth / 2, -canvasHeight / 2f), Max = new float2(canvasWidth / 2, canvasHeight / 2f) }) { Children = new ChildList { new TextNode( "How-To:\n############################\n- Move with WASD\n- Left mouse button rotates spheres\n- Mouse wheel zooms", "howTo", vsTex, psTex, UIElementPosition.GetAnchors(AnchorPos.DownDownLeft), UIElementPosition.CalcOffsets(AnchorPos.DownDownLeft, new float2(-11, -5), canvasHeight, canvasWidth, new float2(12, 1)), fontLatoMap, new float4(1, 1, 0, 1), HorizontalTextAlignment.Left, VerticalTextAlignment.Center) } }, new CanvasNode("Complete", CanvasRenderMode.World, MinMaxRect.FromCenterSize(float2.Zero, float2.One)) { Components = new List <SceneComponent> { new Transform { Name = "TextTransform", Translation = new float3(-15, 2.5f, 0) } }, Children = new ChildList { new TextNode( "Complete", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect(), fontLatoMap, new float4(0, 0, 0, 1), HorizontalTextAlignment.Left, VerticalTextAlignment.Center), new TextNode( "NOT YET IMPLEMENTED", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect { Max = new float2(0, 0), Min = new float2(0, -1.25f) }, fontLatoMap, new float4(1, 0, 0, 0.5f), HorizontalTextAlignment.Left, VerticalTextAlignment.Center) } }, new CanvasNode("Albedo and specular", CanvasRenderMode.World, MinMaxRect.FromCenterSize(float2.Zero, float2.One)) { Components = new List <SceneComponent> { new Transform { Name = "TextTransform", Translation = new float3(-10, 2.5f, 0) } }, Children = new ChildList { new TextNode( "Albedo and Specular", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect(), fontLatoMap, new float4(0, 0, 0, 1), HorizontalTextAlignment.Left, VerticalTextAlignment.Center) } }, new CanvasNode("Albedo, specular and albedo texture", CanvasRenderMode.World, MinMaxRect.FromCenterSize(float2.Zero, float2.One)) { Components = new List <SceneComponent> { new Transform { Name = "TextTransform", Translation = new float3(-5, 2.5f, 0) } }, Children = new ChildList { new TextNode( "Albedo, specular and\nalbedo texture", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect(), fontLatoMap, new float4(0, 0, 0, 1), HorizontalTextAlignment.Left, VerticalTextAlignment.Center) } }, new CanvasNode("Specular texture", CanvasRenderMode.World, MinMaxRect.FromCenterSize(float2.Zero, float2.One)) { Components = new List <SceneComponent> { new Transform { Name = "TextTransform", Translation = new float3(0, 2.5f, 0) } }, Children = new ChildList { new TextNode( "Specular texture", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect(), fontLatoMap, new float4(0, 0, 0, 1), HorizontalTextAlignment.Left, VerticalTextAlignment.Center), new TextNode( "NOT YET IMPLEMENTED", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect { Max = new float2(0, 0), Min = new float2(0, -1.25f) }, fontLatoMap, new float4(1, 0, 0, 0.75f), HorizontalTextAlignment.Left, VerticalTextAlignment.Center) } }, new CanvasNode("Normal map", CanvasRenderMode.World, MinMaxRect.FromCenterSize(float2.Zero, float2.One)) { Components = new List <SceneComponent> { new Transform { Name = "TextTransform", Translation = new float3(5, 2.5f, 0) } }, Children = new ChildList { new TextNode( "Normal map", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect(), fontLatoMap, new float4(0, 0, 0, 1), HorizontalTextAlignment.Left, VerticalTextAlignment.Center) } }, new CanvasNode("Albedo and emissive", CanvasRenderMode.World, MinMaxRect.FromCenterSize(float2.Zero, float2.One)) { Components = new List <SceneComponent> { new Transform { Name = "TextTransform", Translation = new float3(10, 2.5f, 0) } }, Children = new ChildList { new TextNode( "Albedo and emissive", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect(), fontLatoMap, new float4(0, 0, 0, 1), HorizontalTextAlignment.Left, VerticalTextAlignment.Center), new TextNode( "NOT YET IMPLEMENTED", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect { Max = new float2(0, 0), Min = new float2(0, -1.25f) }, fontLatoMap, new float4(1, 0, 0, 0.75f), HorizontalTextAlignment.Left, VerticalTextAlignment.Center) } }, new CanvasNode("Albedo and emissive with texture", CanvasRenderMode.World, MinMaxRect.FromCenterSize(float2.Zero, float2.One)) { Components = new List <SceneComponent> { new Transform { Name = "TextTransform", Translation = new float3(15, 3, 0) } }, Children = new ChildList { new TextNode( "Albedo, emissive and\nemissive texture", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect(), fontLatoMap, new float4(0, 0, 0, 1), HorizontalTextAlignment.Left, VerticalTextAlignment.Center), new TextNode( "NOT YET IMPLEMENTED", "desc", vsTex, psTex, MinMaxRect.FromCenterSize(float2.Zero, float2.One), new MinMaxRect { Max = new float2(0, 0), Min = new float2(0, -1.75f) }, fontLatoMap, new float4(1, 0, 0, 0.75f), HorizontalTextAlignment.Left, VerticalTextAlignment.Center) } } } }; _scene = new SceneContainer { Header = new SceneHeader { CreatedBy = "MR", CreationDate = DateTime.Now.ToString(), Generator = "by hand" }, Children = new List <SceneNode> { new SceneNode { Children = new ChildList { new SceneNode { Components = new List <SceneComponent> { new Transform { Name = "complete", Translation = new float3(-15, 0, 0) }, ShaderCodeBuilder.MakeShaderEffectFromShaderEffectPropsProto(new ShaderEffectProps { MatProbs = { HasAlbedo = true, HasAlbedoTexture = true, HasSpecular = true, //HasSpecularTexture = true, HasEmissive = true, HasEmissiveTexture = true, HasNormalMap = true }, MatType = MaterialType.Standard, MatValues = { AlbedoColor = float4.One * 0.25f, AlbedoMix = 1f, AlbedoTexture = "albedoTex.jpg", SpecularColor = float4.One, SpecularIntensity = 2f, SpecularShininess = 25f, SpecularMix = 1f, //SpecularTexture = "specularTex.jpg", NormalMap = "normalTex.jpg", NormalMapIntensity = 1f, EmissiveColor = new float4(0, 1, 1, 1), EmissiveMix = 0.5f, EmissiveTexture = "emissiveTex.jpg" } }), icosphereWithTangents, } }, new SceneNode { Components = new List <SceneComponent> { new Transform { Name = "albedo and specular", Translation = new float3(-10, 0, 0) }, ShaderCodeBuilder.MakeShaderEffectProto(albedoColor: new float4(0.39f, 0.19f, 0, 1), specularColor: new float4(.5f, .5f, .5f, 1), shininess: 25.0f, specularIntensity: 2.5f), icosphereWithTangents } }, new SceneNode { Components = new List <SceneComponent> { new Transform { Name = "albedo, specular, albedo texture", Translation = new float3(-5, 0, 0) }, ShaderCodeBuilder.MakeShaderEffectProto(albedoColor: new float4(0.39f, 0.19f, 0, 1), specularColor: new float4(.5f, .5f, .5f, 1), albedoTexture: "albedoTex.jpg", albedoTextureMix: 1f, shininess: 256.0f, specularIntensity: 20.0f), icosphereWithTangents } }, // ---- Specular Textures are not implemented yet. There is no fitting shader! ---- // //new SceneNode //{ // Components = new List<SceneComponent> // { // new Transform // { // Name = "specular texture", // Translation = new float3(0, 0, 0) // }, // ShaderCodeBuilder.MakeShaderEffectFromShaderEffectPropsProto(new ShaderEffectProps // { // MatProbs = // { // HasAlbedo = true, // HasAlbedoTexture = true, // HasSpecular = true, // HasSpecularTexture = true // }, // MatType = MaterialType.Standard, // MatValues = // { // AlbedoColor = new float4(0.39f, 0.19f, 0, 1), // SpecularColor = float4.One, // SpecularIntensity = 2f, // SpecularShininess = 25f, // SpecularMix = 1f, // TODO: Implement in ShaderShards // SpecularTexture = "specularTex.jpg" // TODO: Implement in ShaderShards // } // }), // icosphereWithTangents // } //}, new SceneNode { Components = new List <SceneComponent> { new Transform { Name = "normal map", Translation = new float3(5, 0, 0) }, ShaderCodeBuilder.MakeShaderEffectFromShaderEffectPropsProto(new ShaderEffectProps { MatProbs = { HasAlbedo = true, HasAlbedoTexture = true, HasNormalMap = true, HasSpecular = true }, MatType = MaterialType.Standard, MatValues = { AlbedoColor = float4.One * 0.25f, AlbedoMix = 1f, AlbedoTexture = "albedoTex.jpg", SpecularColor = float4.One, SpecularIntensity = 5f, SpecularShininess = 200f, NormalMap = "normalTex.jpg", NormalMapIntensity = 1f } }), icosphereWithTangents } }, new SceneNode { Components = new List <SceneComponent> { new Transform { Name = "albedo, emissive", Translation = new float3(10, 0, 0) }, ShaderCodeBuilder.MakeShaderEffectFromShaderEffectPropsProto(new ShaderEffectProps { MatProbs = { HasAlbedo = true, HasAlbedoTexture = true, HasEmissive = true }, MatType = MaterialType.Standard, MatValues = { AlbedoColor = float4.One * 0.25f, AlbedoMix = 1f, AlbedoTexture = "albedoTex.jpg", EmissiveColor = new float4(1, 0, 0, 1) // TODO: Implement in ShaderShards } }), icosphereWithTangents } }, new SceneNode { Components = new List <SceneComponent> { new Transform { Name = "albedo, emissive, emissive texture", Translation = new float3(15, 0, 0) }, ShaderCodeBuilder.MakeShaderEffectFromShaderEffectPropsProto(new ShaderEffectProps { MatProbs = { HasAlbedo = true, HasAlbedoTexture = true, HasEmissive = true, HasEmissiveTexture = true }, MatType = MaterialType.Standard, MatValues = { AlbedoColor = float4.One * 0.25f, AlbedoMix = 1f, AlbedoTexture = "albedoTex.jpg", EmissiveColor = new float4(0, 1, 1, 1), // TODO: Implement in ShaderShards EmissiveMix = 0.5f, // TODO: Implement in ShaderShards EmissiveTexture = "emissiveTex.jpg" // TODO: Implement in ShaderShards } }), icosphereWithTangents } } } } } }; _guiDescRenderer = new SceneRendererForward(guiDescriptionScene); _renderer = new SceneRendererDeferred(_scene); }
private SceneContainer CreateGui() { var vsTex = AssetStorage.Get <string>("texture.vert"); var psTex = AssetStorage.Get <string>("texture.frag"); var canvasWidth = Width / 100f; var canvasHeight = Height / 100f; var btnFuseeLogo = new GUIButton { Name = "Canvas_Button" }; btnFuseeLogo.OnMouseEnter += BtnLogoEnter; btnFuseeLogo.OnMouseExit += BtnLogoExit; btnFuseeLogo.OnMouseDown += BtnLogoDown; var guiFuseeLogo = new Texture(AssetStorage.Get <ImageData>("FuseeText.png")); var fuseeLogo = new TextureNode( "fuseeLogo", vsTex, psTex, //Set the albedo texture you want to use. guiFuseeLogo, //Define anchor points. They are given in percent, seen from the lower left corner, respectively to the width/height of the parent. //In this setup the element will stretch horizontally but stay the same vertically if the parent element is scaled. UIElementPosition.GetAnchors(AnchorPos.TopTopLeft), //Define Offset and therefor the size of the element. UIElementPosition.CalcOffsets(AnchorPos.TopTopLeft, new float2(0, canvasHeight - 0.5f), canvasHeight, canvasWidth, new float2(1.75f, 0.5f)) ); fuseeLogo.AddComponent(btnFuseeLogo); var fontLato = AssetStorage.Get <Font>("Lato-Black.ttf"); var guiLatoBlack = new FontMap(fontLato, 24); var text = new TextNode( "FUSEE Simple Example", "ButtonText", vsTex, psTex, UIElementPosition.GetAnchors(AnchorPos.StretchHorizontal), UIElementPosition.CalcOffsets(AnchorPos.StretchHorizontal, new float2(canvasWidth / 2 - 4, 0), canvasHeight, canvasWidth, new float2(8, 1)), guiLatoBlack, ColorUint.Tofloat4(ColorUint.Greenery), HorizontalTextAlignment.Center, VerticalTextAlignment.Center); var canvas = new CanvasNode( "Canvas", _canvasRenderMode, new MinMaxRect { Min = new float2(-canvasWidth / 2, -canvasHeight / 2f), Max = new float2(canvasWidth / 2, canvasHeight / 2f) }) { Children = new ChildList() { //Simple Texture Node, contains the fusee logo. fuseeLogo, text } }; return(new SceneContainer { Children = new List <SceneNode> { //Add canvas. canvas } }); }
//Build a scene graph consisting out of a canvas and other UI elements. private SceneContainer CreateNineSliceScene() { var vsTex = AssetStorage.Get <string>("texture.vert"); var psTex = AssetStorage.Get <string>("texture.frag"); var vsNineSlice = AssetStorage.Get <string>("nineSlice.vert"); var psNineSlice = AssetStorage.Get <string>("nineSliceTile.frag"); var canvasScaleFactor = _initWindowWidth / _canvasWidth; float borderScaleFactor = 1; if (_canvasRenderMode == CanvasRenderMode.Screen) { borderScaleFactor = canvasScaleFactor; } var fps = new TextNode( "FPS: 0.00", "FPSText", vsTex, psTex, UIElementPosition.GetAnchors(AnchorPos.DownDownRight), new MinMaxRect { Min = new float2(-2, 0), Max = new float2(0, 1) }, _fontMap, ColorUint.Tofloat4(ColorUint.White), HorizontalTextAlignment.Center, VerticalTextAlignment.Center ); _fpsText = fps.GetComponentsInChildren <GUIText>().FirstOrDefault(); var text = new TextNode( "The five\n" + "boxing wizards\n" + "jump\n" + "quickly.", "ButtonText", vsTex, psTex, UIElementPosition.GetAnchors(AnchorPos.StretchAll), new MinMaxRect { Min = new float2(1f, 0.5f), Max = new float2(-1f, -0.5f) }, _fontMap, ColorUint.Tofloat4(ColorUint.Greenery), HorizontalTextAlignment.Center, VerticalTextAlignment.Center); var catTextureNode = new TextureNode( "Cat", AssetStorage.Get <string>("nineSlice.vert"), AssetStorage.Get <string>("nineSliceTile.frag"), //Set the albedo texture you want to use. new Texture(AssetStorage.Get <ImageData>("Kitti.jpg")), //Define anchor points. They are given in percent, seen from the lower left corner, respectively to the width/height of the parent. //In this setup the element will stretch horizontally but stay the same vertically if the parent element is scaled. UIElementPosition.GetAnchors(AnchorPos.StretchHorizontal),//Anchor is in the lower left corner of the parent. Anchor is in the lower right corner of the parent. //Define Offset and therefor the size of the element. //Min: distance to this elements Min anchor. //Max: distance to this elements Max anchor. UIElementPosition.CalcOffsets(AnchorPos.StretchHorizontal, new float2(_initCanvasWidth / 2 - 2.5f, 0), _initCanvasHeight, _initCanvasWidth, new float2(5, 4)), //Choose in how many tiles you want to split the inner part of the texture. Use float2.one if you want it stretched. new float2(5, 5), //Tell how many percent of the texture, seen from the edges, belongs to the border. Order: left, right, top, bottom. new float4(0.11f, 0.11f, 0.06f, 0.17f), 4, 4, 4, 4, borderScaleFactor ) { Children = new ChildList() { text } }; catTextureNode.Components.Add(_btnCat); var bltTextureNode = new TextureNode( "Blt", vsTex, psTex, //Set the albedo texture you want to use. _bltDestinationTex, //_fontMap.Image, //Define anchor points. They are given in percent, seen from the lower left corner, respectively to the width/height of the parent. //In this setup the element will stretch horizontally but stay the same vertically if the parent element is scaled. UIElementPosition.GetAnchors(AnchorPos.DownDownLeft),//Anchor is in the lower left corner of the parent. Anchor is in the lower right corner of the parent. //Define Offset and therefor the size of the element. //Min: distance to this elements Min anchor. //Max: distance to this elements Max anchor. UIElementPosition.CalcOffsets(AnchorPos.DownDownLeft, new float2(0, 0), _initCanvasHeight, _initCanvasWidth, new float2(4, 4))); var quagganTextureNode1 = new TextureNode( "Quaggan1", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("testTex.jpg")), //In this setup the element will stay in the upper left corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.TopTopLeft), //Anchor is in the lower right corner.Anchor is in the lower left corner. UIElementPosition.CalcOffsets(AnchorPos.TopTopLeft, new float2(2.5f, 0), 3, 6, new float2(1, 1)), new float2(1, 1), new float4(0.1f, 0.1f, 0.1f, 0.09f), 1, 1, 1, 1, borderScaleFactor ); var nineSliceTextureNode = new TextureNode( "testImage", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("9SliceSprites-4.png")), //In this setup the element will stay in the upper right corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.TopTopRight),//Anchor is in the upper right corner.//Anchor is in the upper right corner. UIElementPosition.CalcOffsets(AnchorPos.TopTopRight, new float2(_initCanvasWidth - 6, _initCanvasHeight - 3), _initCanvasHeight, _initCanvasWidth, new float2(6, 3)), new float2(2, 3), new float4(0.1f, 0.1f, 0.1f, 0.1f), 2.5f, 2.5f, 2.5f, 2.5f, borderScaleFactor ) { Children = new ChildList() { quagganTextureNode1, text } }; var quagganTextureNode = new TextureNode( "Quaggan", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("testTex.jpg")), //In this setup the element will stay in the upper left corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.TopTopLeft), //Anchor is in the lower right corner.Anchor is in the lower left corner. UIElementPosition.CalcOffsets(AnchorPos.TopTopLeft, new float2(0, _initCanvasHeight - 1), _initCanvasHeight, _initCanvasWidth, new float2(6, 1)), new float2(5, 1), new float4(0.1f, 0.1f, 0.1f, 0.09f), 1, 1, 1, 1, borderScaleFactor ); var quagganTextureNode2 = new TextureNode( "Quaggan", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("testTex.jpg")), //In this setup the element will stay in the upper left corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.TopTopLeft), //Anchor is in the lower right corner.Anchor is in the lower left corner. UIElementPosition.CalcOffsets(AnchorPos.TopTopLeft, new float2(0, _initCanvasHeight - 3), _initCanvasHeight, _initCanvasWidth, new float2(6, 1)), new float2(5, 1), new float4(0.1f, 0.1f, 0.1f, 0.09f), 1, 1, 1, 1, borderScaleFactor ); var quagganTextureNode3 = new TextureNode( "Quaggan", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("testTex.jpg")), //In this setup the element will stay in the upper left corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.StretchVertical), //Anchor is in the lower right corner. Anchor is in the lower left corner. UIElementPosition.CalcOffsets(AnchorPos.StretchVertical, new float2(0, _initCanvasHeight - 5), _initCanvasHeight, _initCanvasWidth, new float2(6, 1)), new float2(5, 1), new float4(0.1f, 0.1f, 0.1f, 0.09f), 1, 1, 1, 1, borderScaleFactor ); var canvas = new CanvasNode( "Canvas", _canvasRenderMode, new MinMaxRect { Min = new float2(-_canvasWidth / 2, -_canvasHeight / 2f), Max = new float2(_canvasWidth / 2, _canvasHeight / 2f) }) { Children = new ChildList() { //Simple Texture Node, contains a Blt"ed" texture. bltTextureNode, //Add nine sliced textures to canvas catTextureNode, quagganTextureNode, nineSliceTextureNode, quagganTextureNode2, quagganTextureNode3, fps } }; var canvasMat = ShaderCodeBuilder.MakeShaderEffect(new float4(1, 0, 0, 1)); canvas.AddComponent(canvasMat); canvas.AddComponent(new Plane()); canvas.AddComponent(_btnCanvas); return(new SceneContainer { Children = new List <SceneNode> { //Add canvas. new SceneNode() { Components = new List <SceneComponent>() { new Transform() { Translation = new float3(0, 0, 0) } }, Children = new ChildList() { canvas } }, } }); }
private SceneContainer CreateGui() { var canvasScaleFactor = _initWidth / _canvasWidth; float textSize = 2; float borderScaleFactor = 1; if (_canvasRenderMode == CanvasRenderMode.SCREEN) { textSize *= canvasScaleFactor; borderScaleFactor = canvasScaleFactor; } var btnFuseeLogo = new GUIButton { Name = "Canvas_Button" }; btnFuseeLogo.OnMouseEnter += BtnLogoEnter; btnFuseeLogo.OnMouseExit += BtnLogoExit; btnFuseeLogo.OnMouseDown += BtnLogoDown; var guiFuseeLogo = new Texture(AssetStorage.Get <ImageData>("FuseeText.png")); var fuseeLogo = new TextureNodeContainer( "fuseeLogo", UIHelper.VsTex, UIHelper.PsTex, guiFuseeLogo, UIElementPosition.GetAnchors(AnchorPos.TOP_TOP_LEFT), UIElementPosition.CalcOffsets(AnchorPos.TOP_TOP_LEFT, new float2(0, _canvasHeight - 0.5f), _canvasHeight, _canvasWidth, new float2(1.75f, 0.5f))); fuseeLogo.AddComponent(btnFuseeLogo); var markModelContainer = new SceneNodeContainer { Name = "MarkModelContainer", }; var canvas = new CanvasNodeContainer( "Canvas", _canvasRenderMode, new MinMaxRect { Min = new float2(-_canvasWidth / 2f, -_canvasHeight / 2f), Max = new float2(_canvasWidth / 2f, _canvasHeight / 2f) } ) { Children = new ChildList() { fuseeLogo, markModelContainer } }; for (var i = 0; i < _uiInput.Count; i++) { var item = _uiInput[i]; if (item.AnnotationKind != UIHelper.AnnotationKind.CONFIRMED) { UIHelper.CreateAndAddCircleAnnotationAndLine(markModelContainer, item.AnnotationKind, item.Size, _uiInput[i].AnnotationCanvasPos, textSize, borderScaleFactor, "#" + i + " " + item.SegmentationClass + ", " + item.Probability.ToString(CultureInfo.GetCultureInfo("en-gb"))); } else { UIHelper.CreateAndAddCircleAnnotationAndLine(markModelContainer, item.AnnotationKind, item.Size, _uiInput[i].AnnotationCanvasPos, textSize, borderScaleFactor, "#" + i + " " + item.SegmentationClass); } } var canvasProjComp = new ProjectionComponent(_canvasRenderMode == CanvasRenderMode.SCREEN ? ProjectionMethod.ORTHOGRAPHIC : ProjectionMethod.PERSPECTIVE, ZNear, ZFar, _fovy); canvas.Components.Insert(0, canvasProjComp); AddResizeDelegate(delegate { canvasProjComp.Resize(Width, Height); }); return(new SceneContainer { Children = new List <SceneNodeContainer> { //Add canvas. canvas } }); }
private SceneContainer CreateGui() { float canvasScaleFactor = _initWidth / _canvasWidth; float borderScaleFactor = 1; if (_canvasRenderMode == CanvasRenderMode.Screen) { borderScaleFactor = canvasScaleFactor; } GUIButton btnFuseeLogo = new GUIButton { Name = "Canvas_Button" }; btnFuseeLogo.OnMouseEnter += BtnLogoEnter; btnFuseeLogo.OnMouseExit += BtnLogoExit; btnFuseeLogo.OnMouseDown += BtnLogoDown; Texture guiFuseeLogo = new Texture(AssetStorage.Get <ImageData>("FuseeText.png")); TextureNode fuseeLogo = new TextureNode( "fuseeLogo", UIHelper.VsTex, UIHelper.PsTex, guiFuseeLogo, UIElementPosition.GetAnchors(AnchorPos.TopTopLeft), UIElementPosition.CalcOffsets(AnchorPos.TopTopLeft, new float2(0, _canvasHeight - 0.5f), _canvasHeight, _canvasWidth, new float2(1.75f, 0.5f)), float2.One); fuseeLogo.AddComponent(btnFuseeLogo); SceneNode markModelContainer = new SceneNode { Name = "MarkModelContainer", }; CanvasNode canvas = new CanvasNode( "Canvas", _canvasRenderMode, new MinMaxRect { Min = new float2(-_canvasWidth / 2f, -_canvasHeight / 2f), Max = new float2(_canvasWidth / 2f, _canvasHeight / 2f) } ) { Children = new ChildList() { fuseeLogo, markModelContainer } }; for (int i = 0; i < _uiInput.Count; i++) { var item = _uiInput[i]; if (item.AnnotationKind != UIHelper.AnnotationKind.Confirmed) { UIHelper.CreateAndAddCircleAnnotationAndLine(markModelContainer, item.AnnotationKind, item.Size, _uiInput[i].AnnotationCanvasPos, borderScaleFactor, "#" + i + " " + item.SegmentationClass + ", " + item.Probability.ToString(CultureInfo.GetCultureInfo("en-gb"))); } else { UIHelper.CreateAndAddCircleAnnotationAndLine(markModelContainer, item.AnnotationKind, item.Size, _uiInput[i].AnnotationCanvasPos, borderScaleFactor, "#" + i + " " + item.SegmentationClass); } } return(new SceneContainer { Children = new List <SceneNode> { //Add canvas. canvas } }); }
//Build a scene graph consisting out of a canvas and other UI elements. private SceneContainer CreateNineSliceScene() { var vsTex = AssetStorage.Get <string>("texture.vert"); var psTex = AssetStorage.Get <string>("texture.frag"); var vsNineSlice = AssetStorage.Get <string>("nineSlice.vert"); var psNineSlice = AssetStorage.Get <string>("nineSliceTile.frag"); var canvasScaleFactor = _initWindowWidth / _canvasWidth; float textSize = 2; float borderScaleFactor = 1; if (_canvasRenderMode == CanvasRenderMode.SCREEN) { textSize *= canvasScaleFactor; borderScaleFactor = canvasScaleFactor; } var text = new TextNodeContainer( "Hallo !", "ButtonText", vsTex, psTex, UIElementPosition.GetAnchors(AnchorPos.STRETCH_ALL), new MinMaxRect { Min = new float2(1f, 0.5f), Max = new float2(-1f, -0.5f) }, _fontMap, ColorUint.Tofloat4(ColorUint.Greenery), textSize); var catTextureNode = new TextureNodeContainer( "Cat", AssetStorage.Get <string>("nineSlice.vert"), AssetStorage.Get <string>("nineSliceTile.frag"), //Set the diffuse texture you want to use. new Texture(AssetStorage.Get <ImageData>("Kitti.jpg")), //Define anchor points. They are given in percent, seen from the lower left corner, respectively to the width/height of the parent. //In this setup the element will stretch horizontally but stay the same vertically if the parent element is scaled. UIElementPosition.GetAnchors(AnchorPos.STRETCH_HORIZONTAL),//Anchor is in the lower left corner of the parent. Anchor is in the lower right corner of the parent. //Define Offset and therefor the size of the element. //Min: distance to this elements Min anchor. //Max: distance to this elements Max anchor. UIElementPosition.CalcOffsets(AnchorPos.STRETCH_HORIZONTAL, new float2(_initCanvasWidth / 2 - 2.5f, 0), _initCanvasHeight, _initCanvasWidth, new float2(5, 4)), //Choose in how many tiles you want to split the inner part of the texture. Use float2.one if you want it stretched. new float2(5, 5), //Tell how many percent of the texture, seen from the edges, belongs to the border. Order: left, right, top, bottom. new float4(0.11f, 0.11f, 0.06f, 0.17f), 4, 4, 4, 4, borderScaleFactor ) { Children = new ChildList() { text } }; catTextureNode.Components.Add(_btnCat); var bltTextureNode = new TextureNodeContainer( "Blt", vsTex, psTex, //Set the diffuse texture you want to use. _bltDestinationTex, //_fontMap.Image, //Define anchor points. They are given in percent, seen from the lower left corner, respectively to the width/height of the parent. //In this setup the element will stretch horizontally but stay the same vertically if the parent element is scaled. UIElementPosition.GetAnchors(AnchorPos.DOWN_DOWN_LEFT),//Anchor is in the lower left corner of the parent. Anchor is in the lower right corner of the parent. //Define Offset and therefor the size of the element. //Min: distance to this elements Min anchor. //Max: distance to this elements Max anchor. UIElementPosition.CalcOffsets(AnchorPos.DOWN_DOWN_LEFT, new float2(0, 0), _initCanvasHeight, _initCanvasWidth, new float2(4, 4))); var quagganTextureNode1 = new TextureNodeContainer( "Quaggan1", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("testTex.jpg")), //In this setup the element will stay in the upper left corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.TOP_TOP_LEFT), //Anchor is in the lower right corner.Anchor is in the lower left corner. UIElementPosition.CalcOffsets(AnchorPos.TOP_TOP_LEFT, new float2(2.5f, 0), 3, 6, new float2(1, 1)), new float2(1, 1), new float4(0.1f, 0.1f, 0.1f, 0.09f), 1, 1, 1, 1, borderScaleFactor ); var nineSliceTextureNode = new TextureNodeContainer( "testImage", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("9SliceSprites-4.png")), //In this setup the element will stay in the upper right corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.TOP_TOP_RIGHT),//Anchor is in the upper right corner.//Anchor is in the upper right corner. UIElementPosition.CalcOffsets(AnchorPos.TOP_TOP_RIGHT, new float2(_initCanvasWidth - 6, _initCanvasHeight - 3), _initCanvasHeight, _initCanvasWidth, new float2(6, 3)), new float2(2, 3), new float4(0.1f, 0.1f, 0.1f, 0.1f), 2.5f, 2.5f, 2.5f, 2.5f, borderScaleFactor ) { Children = new ChildList() { text, quagganTextureNode1 } }; var quagganTextureNode = new TextureNodeContainer( "Quaggan", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("testTex.jpg")), //In this setup the element will stay in the upper left corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.TOP_TOP_LEFT), //Anchor is in the lower right corner.Anchor is in the lower left corner. UIElementPosition.CalcOffsets(AnchorPos.TOP_TOP_LEFT, new float2(0, _initCanvasHeight - 1), _initCanvasHeight, _initCanvasWidth, new float2(6, 1)), new float2(5, 1), new float4(0.1f, 0.1f, 0.1f, 0.09f), 1, 1, 1, 1, borderScaleFactor ); var quagganTextureNode2 = new TextureNodeContainer( "Quaggan", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("testTex.jpg")), //In this setup the element will stay in the upper left corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.TOP_TOP_LEFT), //Anchor is in the lower right corner.Anchor is in the lower left corner. UIElementPosition.CalcOffsets(AnchorPos.TOP_TOP_LEFT, new float2(0, _initCanvasHeight - 3), _initCanvasHeight, _initCanvasWidth, new float2(6, 1)), new float2(5, 1), new float4(0.1f, 0.1f, 0.1f, 0.09f), 1, 1, 1, 1, borderScaleFactor ); var quagganTextureNode3 = new TextureNodeContainer( "Quaggan", vsNineSlice, psNineSlice, new Texture(AssetStorage.Get <ImageData>("testTex.jpg")), //In this setup the element will stay in the upper left corner of the parent and will not be stretched at all. UIElementPosition.GetAnchors(AnchorPos.STRETCH_VERTICAL), //Anchor is in the lower right corner. Anchor is in the lower left corner. UIElementPosition.CalcOffsets(AnchorPos.STRETCH_VERTICAL, new float2(0, _initCanvasHeight - 5), _initCanvasHeight, _initCanvasWidth, new float2(6, 1)), new float2(5, 1), new float4(0.1f, 0.1f, 0.1f, 0.09f), 1, 1, 1, 1, borderScaleFactor ); var canvas = new CanvasNodeContainer( "Canvas", _canvasRenderMode, new MinMaxRect { Min = new float2(-_canvasWidth / 2, -_canvasHeight / 2f), Max = new float2(_canvasWidth / 2, _canvasHeight / 2f) }) { Children = new ChildList() { //Simple Texture Node, contains a Blt"ed" texture. bltTextureNode, //Add nine sliced textures to canvas catTextureNode, quagganTextureNode, nineSliceTextureNode, quagganTextureNode2, quagganTextureNode3 } }; var canvasMat = new ShaderEffectComponent { Effect = ShaderCodeBuilder.MakeShaderEffectFromMatComp(new MaterialComponent { Diffuse = new MatChannelContainer { Color = new float4(1, 0, 0, 1) }, }) }; var projMethod = _canvasRenderMode == CanvasRenderMode.SCREEN ? ProjectionMethod.ORTHOGRAPHIC : ProjectionMethod.PERSPECTIVE; var projComp = new ProjectionComponent(projMethod, zNear, zFar, fov); AddResizeDelegate(delegate { projComp.Resize(Width, Height); }); canvas.Components.Insert(0, projComp); canvas.AddComponent(canvasMat); canvas.AddComponent(new Plane()); canvas.AddComponent(_btnCanvas); return(new SceneContainer { Children = new List <SceneNodeContainer> { //Add canvas. canvas } }); }