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); }
public static IntersectionNode Create() { // vertex buffer and index buffer. var model = new IntersectionModel(); // vertex shader and fragment shader. var vs = new VertexShader(vertexCode); var fs = new FragmentShader(fragmentCode); var array = new ShaderArray(vs, fs); // which vertex buffer maps to which attribute in shader. var map = new AttributeMap(); map.Add("inPosition", IntersectionModel.strPosition); // build a render method. var polygonModeSwitch = new PolygonModeSwitch(PolygonMode.Line); var lineWidthSwitch = new LineWidthSwitch(5); var offsetSwitch = new PolygonOffsetFillSwitch(); var builder = new RenderMethodBuilder(array, map, offsetSwitch, polygonModeSwitch, lineWidthSwitch); // create node. var node = new IntersectionNode(model, builder); // initialize node. node.Initialize(); return(node); }
public static PerspectiveNode Create() { // vertex buffer and index buffer. var model = new PerspectiveModel((float)(60.0 * Math.PI / 180.0), 1, 0.5f, 10); // vertex shader and fragment shader. var vs = new VertexShader(vertexCode); var fs = new FragmentShader(fragmentCode); var array = new ShaderArray(vs, fs); // which vertex buffer maps to which attribute in shader. var map = new AttributeMap(); map.Add("inPosition", PerspectiveModel.strPosition); // build a render method. //var cullfaceSwitch = new CullFaceSwitch(CullFaceMode.Back); var polygonModeSwitch = new PolygonModeSwitch(PolygonMode.Line); var lineWidthSwitch = new LineWidthSwitch(5); var builder = new RenderMethodBuilder(array, map, polygonModeSwitch, lineWidthSwitch); // create node. var node = new PerspectiveNode(model, builder); // initialize node. node.Initialize(); return(node); }
protected override void DoInitialize() { base.DoInitialize(); { string folder = System.Windows.Forms.Application.StartupPath; var bitmap = new Bitmap(System.IO.Path.Combine(folder, @"heightmap.png")); var storage = new TexImageBitmap(bitmap); var texture = new Texture(storage); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureWrapS, (int)GL.GL_REPEAT)); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureWrapT, (int)GL.GL_REPEAT)); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureWrapR, (int)GL.GL_REPEAT)); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureMinFilter, (int)GL.GL_LINEAR)); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureMagFilter, (int)GL.GL_LINEAR)); texture.Initialize(); texture.TextureUnitIndex = 0; bitmap.Dispose(); this.displacementMap = texture; } { string folder = System.Windows.Forms.Application.StartupPath; var bitmap = new Bitmap(System.IO.Path.Combine(folder, @"diffuse.png")); var storage = new TexImageBitmap(bitmap); var texture = new Texture(storage); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureWrapS, (int)GL.GL_REPEAT)); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureWrapT, (int)GL.GL_REPEAT)); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureWrapR, (int)GL.GL_REPEAT)); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureMinFilter, (int)GL.GL_LINEAR)); texture.BuiltInSampler.Add(new TexParameteri(TexParameter.PropertyName.TextureMagFilter, (int)GL.GL_LINEAR)); texture.Initialize(); texture.TextureUnitIndex = 1; bitmap.Dispose(); this.colorMap = texture; } { var light = new DirectionalLight(); light.Color = new vec3(1, 1, 1); light.AmbientIntensity = 1.0f; light.DiffuseIntensity = 0.01f; light.direction = new vec3(1, 1, 0); this.directionalLight = light; } { RenderMethod method = this.RenderUnit.Methods[0]; foreach (var vao in method.VertexArrayObjects) { IDrawCommand cmd = vao.DrawCommand; cmd.Mode = DrawMode.Patches; } var polygonModeState = new PolygonModeSwitch(CSharpGL.PolygonMode.Fill); method.SwitchList.Add(polygonModeState); this.PolygonMode = polygonModeState; } }
private SceneNodeBase GetTree() { var children = new List <SceneNodeBase>(); { var bitmap = new Bitmap(@"cubemaps_skybox.png"); Texture cubemapTexture = GetCubemapTexture(bitmap); bitmap.Dispose(); var cubeMapNode = CubeMapNode.Create(new CubeModel(), CubeModel.strPosition, cubemapTexture); children.Add(cubeMapNode); } //{ // var bitmap = new Bitmap(@"cubemaps_skybox2.png"); // Texture cubemapTexture = GetCubemapTexture(bitmap); // bitmap.Dispose(); // var cubeMapNode = CubeMapNode.Create(new CubeModel(), CubeModel.strPosition, cubemapTexture); // cubeMapNode.Scale = new vec3(1, 1, 1) * 0.999f; // children.Add(cubeMapNode); //} { var bitmap = new Bitmap(@"cube_skybox.png"); Texture cubemapTexture = GetCubemapTexture(bitmap); bitmap.Dispose(); var cubeMapNode = CubeMapNode.Create(new CubeModel(), CubeModel.strPosition, cubemapTexture); var polygonModeSwitch = new PolygonModeSwitch(PolygonMode.Line); var lineWidthSwitch = new LineWidthSwitch(1); cubeMapNode.RenderUnit.Methods[0].SwitchList.Add(polygonModeSwitch); cubeMapNode.RenderUnit.Methods[0].SwitchList.Add(lineWidthSwitch); cubeMapNode.RenderUnit.Methods[1].SwitchList.Add(polygonModeSwitch); cubeMapNode.RenderUnit.Methods[1].SwitchList.Add(lineWidthSwitch); children.Add(cubeMapNode); } { var bitmap = new Bitmap(@"cube_skybox.png"); Texture cubemapTexture = GetCubemapTexture(bitmap); bitmap.Dispose(); var cubeMapNode = CubeMapNode.Create(new GroundModel(length: 4), CubeModel.strPosition, cubemapTexture); var polygonModeSwitch = new PolygonModeSwitch(PolygonMode.Line); var lineWidthSwitch = new LineWidthSwitch(1); cubeMapNode.RenderUnit.Methods[0].SwitchList.Add(polygonModeSwitch); cubeMapNode.RenderUnit.Methods[0].SwitchList.Add(lineWidthSwitch); cubeMapNode.RenderUnit.Methods[1].SwitchList.Add(polygonModeSwitch); cubeMapNode.RenderUnit.Methods[1].SwitchList.Add(lineWidthSwitch); children.Add(cubeMapNode); } var peelingNode = new PeelingNode(children.ToArray()); return(peelingNode); }
/// <summary> /// 支持UI布局的渲染器 /// </summary> /// <param name="modernRenderer">要渲染的对象</param> /// <param name="Anchor">绑定到窗口的哪些边?</param> /// <param name="Margin">到绑定边的距离</param> /// <param name="Size">UI大小</param> /// <param name="zNear"></param> /// <param name="zFar"></param> public UIAxisRenderer( System.Windows.Forms.AnchorStyles Anchor, System.Windows.Forms.Padding Margin, System.Drawing.Size Size, int zNear = -1000, int zFar = 1000 ) : base(null, Anchor, Margin, Size, zNear, zFar) { ShaderCode[] shaderCodes = new ShaderCode[2]; shaderCodes[0] = new ShaderCode(File.ReadAllText(@"01Renderer\Simple.vert"), ShaderType.VertexShader); shaderCodes[1] = new ShaderCode(File.ReadAllText(@"01Renderer\Simple.frag"), ShaderType.FragmentShader); var propertyNameMap = new PropertyNameMap(); propertyNameMap.Add("in_Position", "position"); propertyNameMap.Add("in_Color", "color"); PickableRenderer pickableRenderer = PickableRendererFactory.GetRenderer( new Axis(), shaderCodes, propertyNameMap, "position"); pickableRenderer.Name = string.Format("Pickable: [{0}]", "Axis"); pickableRenderer.Initialize(); { GLSwitch lineWidthSwitch = new LineWidthSwitch(10); pickableRenderer.SwitchList.Add(lineWidthSwitch); GLSwitch pointSizeSwitch = new PointSizeSwitch(10); pickableRenderer.SwitchList.Add(pointSizeSwitch); GLSwitch polygonModeSwitch = new PolygonModeSwitch(PolygonModes.Filled); pickableRenderer.SwitchList.Add(polygonModeSwitch); if (pickableRenderer is OneIndexRenderer) { GLSwitch primitiveRestartSwitch = new PrimitiveRestartSwitch((pickableRenderer as OneIndexRenderer).IndexBufferPtr); pickableRenderer.SwitchList.Add(primitiveRestartSwitch); } } this.renderer = pickableRenderer; this.textList.Add(new Tuple <vec3, string, Font, Color>(new vec3(offset, 0, 0), "X", new Font("Courier New", fontSize), Color.Red)); this.textList.Add(new Tuple <vec3, string, Font, Color>(new vec3(0, offset, 0), "Y", new Font("Courier New", fontSize), Color.Green)); this.textList.Add(new Tuple <vec3, string, Font, Color>(new vec3(0, 0, offset), "Z", new Font("Courier New", fontSize), Color.Blue)); }
public static CubeNode Create(Texture texture0, Texture texture1) { // vertex buffer and index buffer. var model = new CubeModel(); RenderMethodBuilder singleColorBuilder, multiTextureBuilder; { // vertex shader and fragment shader. var vs = new VertexShader(singleColorVert); var fs = new FragmentShader(singleColorFrag); var array = new ShaderArray(vs, fs); // which vertex buffer maps to which attribute in shader. var map = new AttributeMap(); map.Add("inPosition", CubeModel.strPosition); // build a render method. var polygonModeSwitch = new PolygonModeSwitch(PolygonMode.Line); var lineWidth = new LineWidthSwitch(4); singleColorBuilder = new RenderMethodBuilder(array, map, polygonModeSwitch, lineWidth); } { // vertex shader and fragment shader. var vs = new VertexShader(multiTextureVert); var fs = new FragmentShader(multiTextureFrag); var array = new ShaderArray(vs, fs); // which vertex buffer maps to which attribute in shader. var map = new AttributeMap(); map.Add("inPosition", CubeModel.strPosition); map.Add("inTexCoord", CubeModel.strTexCoord); // build a render method. multiTextureBuilder = new RenderMethodBuilder(array, map); } // create node. var node = new CubeNode(model, singleColorBuilder, multiTextureBuilder); node.SetTextures(texture0, texture1); // initialize node. node.Initialize(); return(node); }
private void Form01Renderer_Load(object sender, EventArgs e) { { var camera = new Camera(CameraType.Perspecitive, this.glCanvas1.Width, this.glCanvas1.Height); camera.Position = new vec3(0, 0, 5); var rotator = new SatelliteRotator(camera); this.camera = camera; this.rotator = rotator; } { // build several models Random random = new Random(); var bufferables = new IBufferable[] { new Axis(), new BigDipper(), new Chain(new ChainModel(random.Next(7, 100), 5, 5)), new Tetrahedron(), new Cube(), new Sphere(), new Teapot(), }; var keys = new GeometryModel[] { GeometryModel.Axis, GeometryModel.BigDipper, GeometryModel.Chain, GeometryModel.Tetrahedron, GeometryModel.Cube, GeometryModel.Sphere, GeometryModel.Teapot, }; ShaderCode[] simpleShader = new ShaderCode[2]; simpleShader[0] = new ShaderCode(File.ReadAllText(@"01Renderer\Simple.vert"), ShaderType.VertexShader); simpleShader[1] = new ShaderCode(File.ReadAllText(@"01Renderer\Simple.frag"), ShaderType.FragmentShader); ShaderCode[] emitNormalLineShader = new ShaderCode[3]; emitNormalLineShader[0] = new ShaderCode(File.ReadAllText(@"01Renderer\EmitNormalLine.vert"), ShaderType.VertexShader); emitNormalLineShader[1] = new ShaderCode(File.ReadAllText(@"01Renderer\EmitNormalLine.geom"), ShaderType.GeometryShader); emitNormalLineShader[2] = new ShaderCode(File.ReadAllText(@"01Renderer\EmitNormalLine.frag"), ShaderType.FragmentShader); var shaderCodesGroup = new ShaderCode[][] { simpleShader, simpleShader, simpleShader, emitNormalLineShader, emitNormalLineShader, emitNormalLineShader, emitNormalLineShader, }; var simpleShaderPropertyNameMap = new PropertyNameMap(); simpleShaderPropertyNameMap.Add("in_Position", "position"); simpleShaderPropertyNameMap.Add("in_Color", "color"); var emitNormalLineShaderPropertyNameMap = new PropertyNameMap(); emitNormalLineShaderPropertyNameMap.Add("in_Position", "position"); emitNormalLineShaderPropertyNameMap.Add("in_Normal", "normal"); var propertyNameMaps = new PropertyNameMap[] { simpleShaderPropertyNameMap, simpleShaderPropertyNameMap, simpleShaderPropertyNameMap, emitNormalLineShaderPropertyNameMap, emitNormalLineShaderPropertyNameMap, emitNormalLineShaderPropertyNameMap, emitNormalLineShaderPropertyNameMap, }; var positionNameInIBufferables = new string[] { "position", "position", "position", "position", "position", "position", "position", }; var uniformTupleList = new List <Tuple <string, ValueType> >() { new Tuple <string, ValueType>("normalLength", 0.5f), new Tuple <string, ValueType>("showModel", true), new Tuple <string, ValueType>("showNormal", false), }; var uniformVariablesList = new List <List <Tuple <string, ValueType> > >() { new List <Tuple <string, ValueType> >(), new List <Tuple <string, ValueType> >(), new List <Tuple <string, ValueType> >(), uniformTupleList, uniformTupleList, uniformTupleList, uniformTupleList, }; for (int i = 0; i < bufferables.Length; i++) { GeometryModel key = keys[i]; IBufferable bufferable = bufferables[i]; ShaderCode[] shaders = shaderCodesGroup[i]; var propertyNameMap = propertyNameMaps[i]; string positionNameInIBufferable = positionNameInIBufferables[i]; var highlightRenderer = new HighlightRenderer( bufferable, positionNameInIBufferable); highlightRenderer.Name = string.Format("Highlight: [{0}]", key); highlightRenderer.Initialize(); var pickableRenderer = new PickableRenderer( bufferable, shaders, propertyNameMap, positionNameInIBufferable); pickableRenderer.Name = string.Format("Pickable: [{0}]", key); pickableRenderer.Initialize(); var uniformVariables = uniformVariablesList[i]; foreach (var item in uniformVariables) { pickableRenderer.SetUniform(item.Item1, item.Item2); } HighlightedPickableRenderer renderer = new HighlightedPickableRenderer( highlightRenderer, pickableRenderer); renderer.Initialize(); { GLSwitch lineWidthSwitch = new LineWidthSwitch(5); pickableRenderer.SwitchList.Add(lineWidthSwitch); GLSwitch pointSizeSwitch = new PointSizeSwitch(10); pickableRenderer.SwitchList.Add(pointSizeSwitch); GLSwitch polygonModeSwitch = new PolygonModeSwitch(PolygonModes.Filled); pickableRenderer.SwitchList.Add(polygonModeSwitch); //GLSwitch blendSwitch = new BlendSwitch(); //pickableRenderer.SwitchList.Add(blendSwitch); } this.rendererDict.Add(key, renderer); } this.SelectedModel = GeometryModel.Tetrahedron; } { // build the axis var bufferables = new IBufferable[] { new Axis(), }; var keys = new GeometryModel[] { GeometryModel.Axis, }; ShaderCode[] simpleShader = new ShaderCode[2]; simpleShader[0] = new ShaderCode(File.ReadAllText(@"01Renderer\Simple.vert"), ShaderType.VertexShader); simpleShader[1] = new ShaderCode(File.ReadAllText(@"01Renderer\Simple.frag"), ShaderType.FragmentShader); var shaderCodesGroup = new ShaderCode[][] { simpleShader, }; var simpleShaderPropertyNameMap = new PropertyNameMap(); simpleShaderPropertyNameMap.Add("in_Position", "position"); simpleShaderPropertyNameMap.Add("in_Color", "color"); var propertyNameMaps = new PropertyNameMap[] { simpleShaderPropertyNameMap, }; var positionNameInIBufferables = new string[] { "position", }; var uniformVariablesList = new List <List <Tuple <string, ValueType> > >() { new List <Tuple <string, ValueType> >(), }; for (int i = 0; i < bufferables.Length; i++) { GeometryModel key = keys[i]; IBufferable bufferable = bufferables[i]; ShaderCode[] shaders = shaderCodesGroup[i]; var propertyNameMap = propertyNameMaps[i]; string positionNameInIBufferable = positionNameInIBufferables[i]; var pickableRenderer = new PickableRenderer( bufferable, shaders, propertyNameMap, positionNameInIBufferable); pickableRenderer.Name = string.Format("Pickable: [{0}]", key); pickableRenderer.Initialize(); var uniformVariables = uniformVariablesList[i]; foreach (var item in uniformVariables) { pickableRenderer.SetUniform(item.Item1, item.Item2); } } } { var frmBulletinBoard = new FormBulletinBoard(); //frmBulletinBoard.Dump = true; frmBulletinBoard.Show(); this.pickedGeometryBoard = frmBulletinBoard; } { var UIRoot = new GLControl(this.glCanvas1.Size, -100, 100); UIRoot.Initialize(); this.uiRoot = UIRoot; var glAxis = new GLAxis(AnchorStyles.Right | AnchorStyles.Bottom, new Padding(3, 3, 3, 3), new Size(70, 70), -100, 100); glAxis.Initialize(); this.glAxis = glAxis; UIRoot.Controls.Add(glAxis); } { var frmPropertyGrid = new FormProperyGrid(); frmPropertyGrid.DisplayObject(this.rendererDict[this.SelectedModel].PickableRenderer); frmPropertyGrid.Show(); this.pickableRendererPropertyGrid = frmPropertyGrid; } { var frmPropertyGrid = new FormProperyGrid(); frmPropertyGrid.DisplayObject(this.rendererDict[this.SelectedModel].Highlighter); frmPropertyGrid.Show(); this.highlightRendererPropertyGrid = frmPropertyGrid; } { var frmPropertyGrid = new FormProperyGrid(); frmPropertyGrid.DisplayObject(this); frmPropertyGrid.Show(); this.formPropertyGrid = frmPropertyGrid; } { var frmIndexBufferPtrBoard = new FormIndexBufferPtrBoard(); frmIndexBufferPtrBoard.SetTarget(this.rendererDict[this.SelectedModel].PickableRenderer.IndexBufferPtr); frmIndexBufferPtrBoard.Show(); this.frmIndexBufferPtrBoard = frmIndexBufferPtrBoard; } }
private void Form_Load(object sender, EventArgs e) { { var camera = new Camera( new vec3(0, 0, 5), new vec3(), 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; } { // build several models Random random = new Random(); var bufferables = new IBufferable[] { new Axis(), new BigDipper(), new Chain(new ChainModel(random.Next(7, 100), 5, 5)), new Tetrahedron(), new Cube(), new Sphere(), new Teapot(), }; var keys = new GeometryModel[] { GeometryModel.Axis, GeometryModel.BigDipper, GeometryModel.Chain, GeometryModel.Tetrahedron, GeometryModel.Cube, GeometryModel.Sphere, GeometryModel.Teapot, }; ShaderCode[] simpleShader = new ShaderCode[2]; simpleShader[0] = new ShaderCode(File.ReadAllText(@"shaders\Simple.vert"), ShaderType.VertexShader); simpleShader[1] = new ShaderCode(File.ReadAllText(@"shaders\Simple.frag"), ShaderType.FragmentShader); ShaderCode[] emitNormalLineShader = new ShaderCode[3]; emitNormalLineShader[0] = new ShaderCode(File.ReadAllText(@"shaders\EmitNormalLine.vert"), ShaderType.VertexShader); emitNormalLineShader[1] = new ShaderCode(File.ReadAllText(@"shaders\EmitNormalLine.geom"), ShaderType.GeometryShader); emitNormalLineShader[2] = new ShaderCode(File.ReadAllText(@"shaders\EmitNormalLine.frag"), ShaderType.FragmentShader); var shaderCodesGroup = new ShaderCode[][] { simpleShader, simpleShader, simpleShader, emitNormalLineShader, emitNormalLineShader, emitNormalLineShader, emitNormalLineShader, }; var simpleShaderPropertyNameMap = new PropertyNameMap(); simpleShaderPropertyNameMap.Add("in_Position", "position"); simpleShaderPropertyNameMap.Add("in_Color", "color"); var emitNormalLineShaderPropertyNameMap = new PropertyNameMap(); emitNormalLineShaderPropertyNameMap.Add("in_Position", "position"); emitNormalLineShaderPropertyNameMap.Add("in_Normal", "normal"); var propertyNameMaps = new PropertyNameMap[] { simpleShaderPropertyNameMap, simpleShaderPropertyNameMap, simpleShaderPropertyNameMap, emitNormalLineShaderPropertyNameMap, emitNormalLineShaderPropertyNameMap, emitNormalLineShaderPropertyNameMap, emitNormalLineShaderPropertyNameMap, }; var positionNameInIBufferables = new string[] { "position", "position", "position", "position", "position", "position", "position", }; for (int i = 0; i < bufferables.Length; i++) { GeometryModel key = keys[i]; IBufferable bufferable = bufferables[i]; ShaderCode[] shaders = shaderCodesGroup[i]; var propertyNameMap = propertyNameMaps[i]; string positionNameInIBufferable = positionNameInIBufferables[i]; var highlightRenderer = new HighlightRenderer( bufferable, positionNameInIBufferable); highlightRenderer.Name = string.Format("Highlight: [{0}]", key); highlightRenderer.Initialize(); var pickableRenderer = new PickableRenderer( bufferable, shaders, propertyNameMap, positionNameInIBufferable); pickableRenderer.Name = string.Format("Pickable: [{0}]", key); pickableRenderer.Initialize(); if (i > 2) { pickableRenderer.SetUniform("normalLength", 0.5f); pickableRenderer.SetUniform("showModel", true); pickableRenderer.SetUniform("showNormal", false); } HighlightedPickableRenderer renderer = new HighlightedPickableRenderer( highlightRenderer, pickableRenderer); renderer.Initialize(); { GLSwitch lineWidthSwitch = new LineWidthSwitch(5); pickableRenderer.SwitchList.Add(lineWidthSwitch); GLSwitch pointSizeSwitch = new PointSizeSwitch(10); pickableRenderer.SwitchList.Add(pointSizeSwitch); GLSwitch polygonModeSwitch = new PolygonModeSwitch(PolygonModes.Filled); pickableRenderer.SwitchList.Add(polygonModeSwitch); //GLSwitch blendSwitch = new BlendSwitch(); //pickableRenderer.SwitchList.Add(blendSwitch); } this.rendererDict.Add(key, renderer); } this.SelectedModel = GeometryModel.Tetrahedron; } { var frmBulletinBoard = new FormBulletinBoard(); //frmBulletinBoard.Dump = true; frmBulletinBoard.Show(); this.pickedGeometryBoard = frmBulletinBoard; } { var UIRoot = new UIRoot(); UIRoot.Initialize(); this.uiRoot = UIRoot; var uiAxis = new UIAxis(AnchorStyles.Left | AnchorStyles.Bottom, new Padding(3, 3, 3, 3), new Size(128, 128), -100, 100); uiAxis.Initialize(); UIRoot.Children.Add(uiAxis); this.uiAxis = uiAxis; var font = new Font("Courier New", 32); var uiText = new UIText(AnchorStyles.Left | AnchorStyles.Bottom, new Padding(0, 0, 0, 0), new Size(250, 20), -100, 100, font.GetFontBitmap("[index: 0123456789]").GetFontTexture()); uiText.Text = ""; uiRoot.Children.Add(uiText); this.uiText = uiText; } { var frmPropertyGrid = new FormProperyGrid(this.rendererDict[this.SelectedModel].PickableRenderer); frmPropertyGrid.Show(); this.pickableRendererPropertyGrid = frmPropertyGrid; } { var frmPropertyGrid = new FormProperyGrid(this.rendererDict[this.SelectedModel].Highlighter); frmPropertyGrid.Show(); this.highlightRendererPropertyGrid = frmPropertyGrid; } { var frmPropertyGrid = new FormProperyGrid(this); frmPropertyGrid.Show(); this.formPropertyGrid = frmPropertyGrid; } { var frmPropertyGrid = new FormProperyGrid(this.uiText); frmPropertyGrid.Show(); } { var frmIndexBufferPtrBoard = new FormIndexBufferPtrBoard(); frmIndexBufferPtrBoard.SetTarget(this.rendererDict[this.SelectedModel].PickableRenderer.IndexBufferPtr); frmIndexBufferPtrBoard.Show(); this.frmIndexBufferPtrBoard = frmIndexBufferPtrBoard; } }