public static ParticleNode Create() { var blend = new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha); var depthTest = new DepthTestSwitch(false); RenderMethodBuilder defaultBuilder, textureBuilder; { var vs = new VertexShader(vert); var fs = new FragmentShader(frag); var provider = new ShaderArray(vs, fs); var map = new AttributeMap(); defaultBuilder = new RenderMethodBuilder(provider, map, blend, depthTest); } { var vs = new VertexShader(vert); var fs = new FragmentShader(texturedFrag); var provider = new ShaderArray(vs, fs); var map = new AttributeMap(); textureBuilder = new RenderMethodBuilder(provider, map, blend, depthTest); } var model = new ParticleModel(); var node = new ParticleNode(model, defaultBuilder, textureBuilder); node.Initialize(); return(node); }
private void Form_Load(object sender, EventArgs e) { { var camera = new Camera( new vec3(0, 0, 5), new vec3(0, 0, 0), new vec3(0, 1, 0), CameraType.Perspecitive, this.glCanvas1.Width, this.glCanvas1.Height); var rotator = new SatelliteManipulater(); rotator.Bind(camera, this.glCanvas1); this.camera = camera; this.rotator = rotator; } { IBufferable bufferable = new Teapot(); var shaderCodes = new ShaderCode[2]; shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\Transparent.vert"), ShaderType.VertexShader); shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\Transparent.frag"), ShaderType.FragmentShader); var map = new PropertyNameMap(); map.Add("in_Position", "position"); map.Add("in_Color", "color"); var renderer = new PickableRenderer(bufferable, shaderCodes, map, "position"); renderer.Name = "Order-Dependent Transparent Renderer"; renderer.Initialize(); { GLSwitch blendSwitch = new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha); renderer.SwitchList.Add(blendSwitch); } this.renderer = renderer; } { var frmPropertyGrid = new FormProperyGrid(); frmPropertyGrid.DisplayObject(this.renderer); frmPropertyGrid.Show(); this.formPropertyGrid = frmPropertyGrid; } }
private void Form02OrderIndependentTransparency_Load(object sender, EventArgs e) { { var camera = new Camera( new vec3(0, 0, 5), new vec3(0, 0, 0), new vec3(0, 1, 0), CameraType.Perspecitive, this.glCanvas1.Width, this.glCanvas1.Height); var rotator = new SatelliteRotator(camera); this.camera = camera; this.rotator = rotator; } { IBufferable bufferable = new Teapot(); var shaderCodes = new ShaderCode[2]; shaderCodes[0] = new ShaderCode(File.ReadAllText(@"03OrderDependentTransparency\Transparent.vert"), ShaderType.VertexShader); shaderCodes[1] = new ShaderCode(File.ReadAllText(@"03OrderDependentTransparency\Transparent.frag"), ShaderType.FragmentShader); var map = new PropertyNameMap(); map.Add("in_Position", "position"); map.Add("in_Color", "color"); var renderer = new PickableRenderer(bufferable, shaderCodes, map, "position"); renderer.Name = "Order-Dependent Transparent Renderer"; renderer.Initialize(); { GLSwitch blendSwitch = new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha); renderer.SwitchList.Add(blendSwitch); } this.renderer = renderer; } { var frmPropertyGrid = new FormProperyGrid(); frmPropertyGrid.DisplayObject(this.renderer); frmPropertyGrid.Show(); this.formPropertyGrid = frmPropertyGrid; } }
/// <summary> /// Create a label renderer. /// </summary> /// <param name="maxCharCount">Max char count to display for this label. Careful to set this value because greater <paramref name="maxCharCount"/> means more space ocupied in GPU nemory.</param> /// <param name="labelHeight">Label height(in pixels)</param> /// <param name="fontTexture">Use which font to render text?</param> /// <returns></returns> public static LabelRenderer Create(int maxCharCount = 64, int labelHeight = 32, IFontTexture fontTexture = null) { if (fontTexture == null) { fontTexture = FontTexture.Default; } var model = new TextModel(maxCharCount); var shaderCodes = new ShaderCode[2]; shaderCodes[0] = new ShaderCode(ManifestResourceLoader.LoadTextFile( @"Resources\Label.vert"), ShaderType.VertexShader); shaderCodes[1] = new ShaderCode(ManifestResourceLoader.LoadTextFile( @"Resources\Label.frag"), ShaderType.FragmentShader); var map = new AttributeMap(); map.Add("in_Position", TextModel.strPosition); map.Add("in_UV", TextModel.strUV); var blendSwitch = new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.One); var renderer = new LabelRenderer(model, shaderCodes, map, blendSwitch); renderer.blendSwitch = blendSwitch; renderer.fontTexture = fontTexture; renderer.LabelHeight = labelHeight; return(renderer); }
public static ParticleNode Create(int particleCount) { IShaderProgramProvider updateProvider, renderProvider; { var vs = new VertexShader(updateVert); var feedbackVaryings = new string[] { outPosition, outVelocity }; updateProvider = new ShaderArray(feedbackVaryings, ShaderProgram.BufferMode.Separate, vs); } { var vs = new VertexShader(renderVert); var gs = new GeometryShader(renderGeom); var fs = new FragmentShader(renderFrag); renderProvider = new ShaderArray(vs, gs, fs); } RenderMethodBuilder updateBuilder, updateBuilder2, renderBuilder, renderBuilder2; var blend = new BlendSwitch(BlendEquationMode.Add, BlendSrcFactor.One, BlendDestFactor.One); { var map = new AttributeMap(); map.Add(inPosition, ParticleModel.inPosition); map.Add(inVelocity, ParticleModel.inVelocity); updateBuilder = new RenderMethodBuilder(updateProvider, map); } { var map = new AttributeMap(); map.Add(inPosition, ParticleModel.inPosition2); map.Add(inVelocity, ParticleModel.inVelocity2); updateBuilder2 = new RenderMethodBuilder(updateProvider, map); } { var map = new AttributeMap(); map.Add(inPosition, ParticleModel.inPosition); map.Add(inVelocity, ParticleModel.inVelocity); renderBuilder = new RenderMethodBuilder(renderProvider, map, blend); } { var map = new AttributeMap(); map.Add(inPosition, ParticleModel.inPosition2); map.Add(inVelocity, ParticleModel.inVelocity2); renderBuilder2 = new RenderMethodBuilder(renderProvider, map, blend); } var model = new ParticleModel(particleCount); var node = new ParticleNode(model, updateBuilder, updateBuilder2, renderBuilder, renderBuilder2); node.Initialize(); return(node); }
public static RectGlassNode Create(float width, float height) { var model = new RectGlassModel(width, height); var vs = new VertexShader(vert); var fs = new FragmentShader(frag); var array = new ShaderArray(vs, fs); var map = new AttributeMap(); map.Add("inPosition", RectGlassModel.strPosition); var blend = new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha); var depthMask = new DepthMaskSwitch(false); var builder = new RenderMethodBuilder(array, map, blend, depthMask); var node = new RectGlassNode(model, builder); node.Blend = blend; node.ModelSize = new vec3(width, height, 0); node.Initialize(); return(node); }
public static AccumulationNode Create() { var model = new Sphere(); RenderMethodBuilder renderBuilder; { var vs = new VertexShader(renderVert); var fs = new FragmentShader(renderFrag); var provider = new ShaderArray(vs, fs); var map = new AttributeMap(); map.Add("inPosition", Sphere.strPosition); map.Add("inColor", Sphere.strColor); var blend = new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha); renderBuilder = new RenderMethodBuilder(provider, map); } var node = new AccumulationNode(model, renderBuilder); node.ModelSize = model.Size; node.Initialize(); return(node); }
public static StaticSlicesNode Create(int sliceCount, Texture texture1D, Texture texture3D) { var vs = new VertexShader(vertexCode); var fs = new FragmentShader(fragmentCode); var array = new ShaderArray(vs, fs); var map = new AttributeMap(); map.Add("inPosition", StaticSlicesModel.strPosition); map.Add("inTexCoord", StaticSlicesModel.strTexCoord); //var depthTestSwitch = new DepthTestSwitch(false); //var polygonModeSwitch = new PolygonModeSwitch(PolygonMode.Line); var blendSwitch = new BlendSwitch(BlendEquationMode.Add, BlendSrcFactor.SrcAlpha, BlendDestFactor.OneMinusSrcAlpha); var builder = new RenderMethodBuilder(array, map, blendSwitch); var model = new StaticSlicesModel(sliceCount); var node = new StaticSlicesNode(model, builder); node.texture1D = texture1D; node.texture3D = texture3D; node.Initialize(); return(node); }
private void Form_Load(object sender, EventArgs e) { { this.glCanvas1.ShowSystemCursor = false; } { var camera = new Camera( new vec3(0, 0, 1), new vec3(0, 0, 0), new vec3(0, 1, 0), CameraType.Perspecitive, this.glCanvas1.Width, this.glCanvas1.Height); var rotator = new SatelliteManipulater(); rotator.Bind(camera, this.glCanvas1); this.rotator = rotator; this.scene = new Scene(camera, this.glCanvas1); this.glCanvas1.Resize += this.scene.Resize; } { var labelRenderer = new LabelRenderer(1000, 640); labelRenderer.Text = "LABEL 1"; labelRenderer.Initialize(); labelRenderer.SetPosition(new vec3(1, 0, 0)); SceneObject obj = labelRenderer.WrapToSceneObject("label 1"); this.scene.RootObject.Children.Add(obj); this.blendSwitch1 = labelRenderer.SwitchList.Find(x => x is BlendSwitch) as BlendSwitch; this.labelRenderer1 = labelRenderer; } { var labelRenderer = new LabelRenderer(1000, 640); labelRenderer.Text = "LABEL 2"; labelRenderer.Initialize(); labelRenderer.SetPosition(new vec3(-1, 0, 0)); SceneObject obj = labelRenderer.WrapToSceneObject("label 2"); this.scene.RootObject.Children.Add(obj); this.blendSwitch2 = labelRenderer.SwitchList.Find(x => x is BlendSwitch) as BlendSwitch; this.labelRenderer2 = labelRenderer; } }
/// <summary> /// /// </summary> /// <param name="source"></param> /// <param name="dest"></param> public BlendingGroupNode(BlendingSourceFactor source, BlendingDestinationFactor dest) { this.blending = new BlendSwitch(source, dest); }
void FormMain_Load(object sender, EventArgs e) { { var camera = new Camera(CameraType.Perspecitive, this.glCanvas1.Width, this.glCanvas1.Height); camera.Position = new vec3(0, 0, (float)(Earth.revolutionRadius * 1.1)); camera.Target = new vec3(0, 0, 0); camera.UpVector = new vec3(0, 1, 0); IPerspectiveViewCamera perspecitve = camera; perspecitve.Near = 1; perspecitve.Far = Earth.revolutionRadius * 2; var rotator = new SatelliteRotator(camera); this.camera = camera; this.rotator = rotator; } { const int latitude = 180; //从南到北,纬度共有180° const int hour = 24; //24小时,24个时区 const int longitudePerHour = 15; // 每个时区占有的经度为15° const int longitude = hour * longitudePerHour; // 从东到西,经度共有360° IBufferable bufferable = new CelestialBody((float)Earth.radius, latitude, longitude); var shaderCodes = new ShaderCode[2]; shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\CelestialBody.vert"), ShaderType.VertexShader); shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\CelestialBody.frag"), ShaderType.FragmentShader); var map = new PropertyNameMap(); map.Add("inPosition", CelestialBody.strPosition); map.Add("inUV", CelestialBody.strUV); var earthRenderer = new PickableRenderer(bufferable, shaderCodes, map, CelestialBody.strPosition); earthRenderer.Initialize(); earthRenderer.Name = "Earth 地球"; this.earthRenderer = earthRenderer; } { // Ecliptic: 黄道 IBufferable bufferable = new Circle((float)Earth.revolutionRadius, 360); var shaderCodes = new ShaderCode[2]; shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\Circle.vert"), ShaderType.VertexShader); shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\Circle.frag"), ShaderType.FragmentShader); var map = new PropertyNameMap(); map.Add("inPosition", Circle.strPosition); var eclipticRenderer = new Renderer(bufferable, shaderCodes, map); eclipticRenderer.Initialize(); eclipticRenderer.Name = "Ecliptic 黄道"; this.eclipticRenderer = eclipticRenderer; } { var glAxis = new GLAxis(AnchorStyles.Left | AnchorStyles.Bottom, new Padding(5, 5, 5, 5), new Size(100, 100), -100, 100); glAxis.Initialize(); this.glAxis = glAxis; } { var uiRoot = new GLControl(this.glCanvas1.Size, -100, 100); uiRoot.Initialize(); this.uiRoot = uiRoot; } { this.uiRoot.Controls.Add(this.glAxis); } { var earthColorTexture = new sampler2D(); var bitmap = new Bitmap(@"Images\earth-color-map-10800-5400.jpg"); earthColorTexture.Initialize(bitmap); bitmap.Dispose(); this.earthColorTexture = earthColorTexture; } { this.eclipticRenderer.SetUniform("color", new vec4(1.0f, 1.0f, 0.0f, 0.1f)); this.eclipticRenderer.SwitchList.Add(new PolygonModeSwitch(PolygonModes.Lines)); } { this.earthRenderer.SetUniform("colorTexture", new samplerValue(BindTextureTarget.Texture2D, this.earthColorTexture.Id, OpenGL.GL_TEXTURE0)); this.earthRenderer.SwitchList.Add(new CullFaceSwitch()); } { var earth = new Earth(); this.earth = earth; this.thingList.Add(earth); } { var blendSwitch = new BlendSwitch(); this.blendSwitch = blendSwitch; } { var frmPropertyGrid = new FormProperyGrid(); frmPropertyGrid.DisplayObject(this); frmPropertyGrid.Show(); } { var frmPropertyGrid = new FormProperyGrid(); frmPropertyGrid.DisplayObject(this.earthRenderer); frmPropertyGrid.Show(); } { var frmPropertyGrid = new FormProperyGrid(); frmPropertyGrid.DisplayObject(this.eclipticRenderer); frmPropertyGrid.Show(); } { this.TimeSpeed = 14400; } }