internal void Apply(CelestialBody celestialBody, Transform scaledCelestialTransform, CloudsMaterial cloudsMaterial, float radius, Tools.Layer layer = Tools.Layer.Scaled) { CloudsManager.Log("Applying 2D clouds..."); Remove(); this.celestialBody = celestialBody; this.scaledCelestialTransform = scaledCelestialTransform; HalfSphere hp = new HalfSphere(radius, ref CloudMaterial, CloudShader); CloudMesh = hp.GameObject; CloudMaterial.name = "Clouds2D"; this.radius = radius; macroCloudMaterial.Radius = radius; this.cloudsMat = cloudsMaterial; this.scaledLayer = layer; CloudMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); if (shadowMaterial != null) { ShadowProjectorGO = new GameObject(); ShadowProjector = ShadowProjectorGO.AddComponent <Projector>(); ShadowProjector.nearClipPlane = 10; ShadowProjector.fieldOfView = 60; ShadowProjector.aspectRatio = 1; ShadowProjector.orthographic = true; ShadowProjector.transform.parent = celestialBody.transform; ShadowProjector.material = new Material(CloudShadowShader); shadowMaterial.ApplyMaterialProperties(ShadowProjector.material); } Scaled = true; }
private SceneNodeBase GetRootNode(ICamera modelCamera) { var root = new GroupNode(); // render 'scene' to franebuffer. { int width = this.winGLCanvas1.Width, height = this.winGLCanvas1.Height; var rtt = new RenderToTexttureNode(width, height, modelCamera, new ColoredFramebufferProvider()); rtt.BackgroundColor = Color.SkyBlue; { var teapot = TeapotNode.Create(); teapot.RenderWireframe = false; rtt.Children.Add(teapot);// rendered to framebuffer, then to texture. } root.Children.Add(rtt); this.rtt = rtt; } { var group = new GroupNode(); // display 'scene' in rectangle. { var node = RectangleNode.Create(); node.TextureSource = this.rtt; node.Scale = new vec3(1, 1, 1) * 6; node.RotationAxis = new vec3(-1, 0, 0); node.RotationAngle = 90; group.Children.Add(node); } const float radius = 3; // arcball. { var model = new HalfSphere(radius, 40, 40); var node = NoShadowNode.Create(model, HalfSphere.strPosition, HalfSphere.strNormal, model.Size); var list = node.RenderUnit.Methods[0].SwitchList; var list1 = node.RenderUnit.Methods[1].SwitchList; var polygonModeSwitch = new PolygonModeSwitch(PolygonMode.Line); var offsetSwitch = new PolygonOffsetFillSwitch(); list.Add(polygonModeSwitch); list1.Add(polygonModeSwitch); var cmd = node.RenderUnit.Methods[0].VertexArrayObjects[0].DrawCommand as DrawElementsCmd; cmd.VertexCount = cmd.VertexCount / 2; // render only half a sphere. group.Children.Add(node); } // lines. { var node = LinesNode.Create(radius); group.Children.Add(node); this.linesNode = node; } // fan { var node = FanNode.Create(radius); group.Children.Add(node); this.fanNode = node; } root.Children.Add(group); this.groupNode = group; } return(root); }
internal void Apply(CelestialBody celestialBody, Transform scaledCelestialTransform, CloudsMaterial cloudsMaterial, string name, float radius, float arc, Tools.Layer layer = Tools.Layer.Scaled) { CloudsManager.Log("Applying 2D clouds..."); Remove(); this.celestialBody = celestialBody; this.scaledCelestialTransform = scaledCelestialTransform; if (arc == 360) { HalfSphere hp = new HalfSphere(radius, ref CloudMaterial, CloudShader); CloudMesh = hp.GameObject; } else { UVSphere hp = new UVSphere(radius, arc, ref CloudMaterial, CloudShader); CloudMesh = hp.GameObject; } CloudMesh.name = name; CloudMaterial.name = "Clouds2D"; this.radius = radius; this.arc = arc; macroCloudMaterial.Radius = radius; this.cloudsMat = cloudsMaterial; this.scaledLayer = layer; CloudMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); if (shadowMaterial != null) { ShadowProjectorGO = new GameObject("EVE ShadowProjector"); ShadowProjector = ShadowProjectorGO.AddComponent <Projector>(); ShadowProjector.nearClipPlane = 10; ShadowProjector.fieldOfView = 60; ShadowProjector.aspectRatio = 1; ShadowProjector.orthographic = true; ShadowProjector.transform.parent = celestialBody.transform; ShadowProjector.material = new Material(CloudShadowShader); shadowMaterial.ApplyMaterialProperties(ShadowProjector.material); // Workaround Unity bug (Case 841236) ShadowProjector.enabled = false; ShadowProjector.enabled = true; // Here create the screenSpaceShadowMaterialStuff screenSpaceShadowGO = new GameObject("EVE ScreenSpaceShadow"); screenSpaceShadowGO.transform.parent = celestialBody.transform; screenSpaceShadow = screenSpaceShadowGO.AddComponent <ScreenSpaceShadow>(); //can this be a single class that will handle the mesh, and meshrenderer and everything? screenSpaceShadow.material = new Material(ScreenSpaceCloudShadowShader); shadowMaterial.ApplyMaterialProperties(screenSpaceShadow.material); screenSpaceShadow.Init(); screenSpaceShadowGO.SetActive(false); screenSpaceShadow.SetActive(false); } Scaled = true; }
public void DrawHalfSphere(ref Vector3 position, float radius, ref Quaternion rotation, ref Color color, bool depthTest = true) { var cmd = new HalfSphere() { Position = position, Radius = radius, Rotation = rotation, Color = color }; var msg = new Renderable(ref cmd); if (depthTest) { renderablesWithDepth.Add(msg); totalPrimitives.HalfSpheres++; } else { renderablesNoDepth.Add(msg); totalPrimitivesNoDepth.HalfSpheres++; } }
public Renderable(ref HalfSphere h) : this() { Type = RenderableType.HalfSphere; HalfSphereData = h; }