Пример #1
0
        public static HighlightGeometryNode Create()
        {
            var model = new HighlightGeometryModel();
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", HighlightGeometryModel.strPosition);
            map.Add("inColor", HighlightGeometryModel.strColor);
            var polygonOffset = new PolygonOffsetFillSwitch();
            var polygonMode   = new PolygonModeSwitch(PolygonMode.Line);
            var lineWidth     = new LineWidthSwitch(5.0f);
            var pointSize     = new PointSizeSwitch(5.0f);
            var builder       = new RenderMethodBuilder(array, map, polygonOffset, polygonMode, lineWidth, pointSize);

            var node = new HighlightGeometryNode(model, builder);

            node.polygonOffset = polygonOffset;
            node.polygonMode   = polygonMode;
            node.lineWidth     = lineWidth;
            node.pointSize     = pointSize;

            node.Initialize();

            return(node);
        }
Пример #2
0
        public static NoShadowNode Create(IBufferSource model, string position, string normal, vec3 size)
        {
            RenderMethodBuilder ambientBuilder, blinnPhongBuilder;
            {
                var vs    = new VertexShader(ambientVert);
                var fs    = new FragmentShader(ambientFrag);
                var array = new ShaderArray(vs, fs);
                var map   = new AttributeMap();
                map.Add("inPosition", position);
                ambientBuilder = new RenderMethodBuilder(array, map);
            }
            {
                var vs    = new VertexShader(blinnPhongVert);
                var fs    = new FragmentShader(blinnPhongFrag);
                var array = new ShaderArray(vs, fs);
                var map   = new AttributeMap();
                map.Add("inPosition", position);
                map.Add("inNormal", normal);
                blinnPhongBuilder = new RenderMethodBuilder(array, map);
            }

            var node = new NoShadowNode(model, ambientBuilder, blinnPhongBuilder);

            node.Initialize();
            node.ModelSize = size;

            return(node);
        }
Пример #3
0
        private TextBillboardNode(int width, int height, GlyphsModel model, RenderMethodBuilder renderUnitBuilder, GlyphServer glyphServer = null)
            : base(model, renderUnitBuilder)
        {
            if (width <= 0)
            {
                width = 1;
            }
            if (height <= 0)
            {
                height = 1;
            }

            this._width        = width;
            this._height       = height;
            this.widthByHeight = (float)width / (float)height;
            this.heightByWidth = (float)height / (float)width;

            this.textModel = model;

            if (glyphServer == null)
            {
                this.glyphServer = GlyphServer.DefaultServer;
            }
            else
            {
                this.glyphServer = glyphServer;
            }
        }
Пример #4
0
        /// <summary>
        /// Render a teapot in modern opengl.
        /// </summary>
        /// <returns></returns>
        public static TeapotNode Create(bool adjacent = false)
        {
            IBufferSource model; vec3 size;

            if (adjacent)
            {
                var m = new AdjacentTeapot(); size = m.GetModelSize(); model = m;
            }
            else
            {
                var m = new Teapot(); size = m.GetModelSize(); model = m;
            }
            string position = adjacent ? AdjacentTeapot.strPosition : Teapot.strPosition;
            string color    = adjacent ? AdjacentTeapot.strColor : Teapot.strColor;

            var vs       = new VertexShader(vertexCode);
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add(inPosition, position);
            map.Add(inColor, color);
            var builder = new RenderMethodBuilder(provider, map);
            var node    = new TeapotNode(model, position, builder);

            node.Initialize();
            node.ModelSize = size;

            return(node);
        }
Пример #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="capacity"></param>
        /// <param name="anchor"></param>
        public CtrlLabel(int capacity, GUIAnchorStyles anchor)
            : base(anchor)
        {
            if (capacity < 0)
            {
                throw new ArgumentException("capacity");
            }

            this.Size = new GUISize(20, 20);

            var model = new GlyphsModel(capacity);

            this.labelModel = model;
            var vs    = new VertexShader(vert);
            var fs    = new FragmentShader(frag);
            var codes = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add(inPosition, GlyphsModel.position);
            map.Add(inSTR, GlyphsModel.STR);
            var blend         = new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha);
            var methodBuilder = new RenderMethodBuilder(codes, map, blend);

            this.RenderUnit = new ModernRenderUnit(model, methodBuilder);

            this.Initialize();
        }
Пример #6
0
        /// <summary>
        /// Creates a billboard in 3D world. Its size is described by Width\Height(in pixels).
        /// </summary>
        /// <param name="textureSource"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <returns></returns>
        public static TextBillboardNode Create(ITextureSource textureSource, int width, int height)
        {
            var vs       = new VertexShader(vertexCode);// this vertex shader has no vertex attributes.
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();
            var builder  = new RenderMethodBuilder(provider, map);
            var node     = new TextBillboardNode(textureSource, width, height, new TextBillboard(), builder);

            node.Initialize();

            return(node);
        }
Пример #7
0
        /// <summary>
        ///
        /// </summary>
        public CtrlButtonRenderer()
        {
            var model = new CtrlImageModel();
            var vs    = new VertexShader(vert, inPosition, inUV);
            var fs    = new FragmentShader(frag);
            var codes = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add(inPosition, CtrlImageModel.position);
            var methodBuilder = new RenderMethodBuilder(codes, map);

            this.RenderUnit = new ModernRenderUnit(model, methodBuilder);
        }
Пример #8
0
        public GLButtonRenderer()
        {
            var model = new CtrlButtonModel();
            var vs    = new VertexShader(vert);
            var fs    = new FragmentShader(frag);
            var codes = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add(inPosition, CtrlButtonModel.strPosition);
            map.Add(inColor, CtrlButtonModel.strColor);
            var methodBuilder = new RenderMethodBuilder(codes, map, new PolygonModeSwitch(PolygonMode.Fill), new LineWidthSwitch(2));

            this.renderMethod = methodBuilder.ToRenderMethod(model);
        }
Пример #9
0
        /// <summary>
        /// this helps clear stencil buffer because `glClear(GL_STENCIL_BUFFER_BIT);` doesn't work on my laptop.
        /// </summary>
        /// <returns></returns>
        public static ClearStencilNode Create()
        {
            var model   = new ClearStencilModel();
            var vs      = new VertexShader(vertexCode);
            var fs      = new FragmentShader(fragmentCode);
            var array   = new ShaderArray(vs, fs);
            var map     = new AttributeMap();
            var builder = new RenderMethodBuilder(array, map, new DepthMaskState(false), new ColorMaskState(false, false, false, false));
            var node    = new ClearStencilNode(model, builder);

            node.Initialize();

            return(node);
        }
Пример #10
0
        /// <summary>
        /// Render propeller in modern opengl.
        /// </summary>
        /// <returns></returns>
        public static CubeNode Create()
        {
            var vs       = new VertexShader(vertexCode);
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add(inPosition, CubeModel.strPosition);
            var builder = new RenderMethodBuilder(provider, map);
            var node    = new CubeNode(new CubeModel(), CubeModel.strPosition, builder);

            node.Initialize();

            return(node);
        }
Пример #11
0
        /// <summary>
        /// Creates a billboard in 3D world. Its size is described by Width\Height(in pixels).
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="capacity">Maximum characters count.</param>
        /// <param name="glyphServer"></param>
        /// <returns></returns>
        public static TextBillboardNode Create(int width, int height, int capacity, GlyphServer glyphServer = null)
        {
            var vs = new VertexShader(vertexCode);// this vertex shader has no vertex attributes.
            var fs = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map = new AttributeMap();
            map.Add(inPosition, GlyphsModel.position);
            map.Add(inSTR, GlyphsModel.STR);
            var blendState = new BlendFuncSwitch(BlendSrcFactor.SrcAlpha, BlendDestFactor.OneMinusSrcAlpha);
            var builder = new RenderMethodBuilder(provider, map, blendState);
            var node = new TextBillboardNode(width, height, new GlyphsModel(capacity), builder, glyphServer);
            node.Initialize();
            node.blend = blendState;

            return node;
        }
Пример #12
0
        public static KleinBottleNode Create(KleinBottleModel model)
        {
            var vs       = new VertexShader(vertexShaderCode, "in_Position", "in_TexCoord");
            var fs       = new FragmentShader(fragmentShaderCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add("in_Position", KleinBottleModel.strPosition);
            map.Add("in_TexCoord", KleinBottleModel.strTexCoord);
            var builder = new RenderMethodBuilder(provider, map, new LineWidthState(3));
            var node    = new KleinBottleNode(model, KleinBottleModel.strPosition, builder);

            node.ModelSize = model.Size;

            return(node);
        }
Пример #13
0
        /// <summary>
        ///
        /// </summary>
        public CtrlButton()
        {
            var model = new CtrlButtonModel();
            var vs    = new VertexShader(vert, inPosition, inColor);
            var fs    = new FragmentShader(frag);
            var codes = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add(inPosition, CtrlButtonModel.position);
            map.Add(inColor, CtrlButtonModel.color);
            var methodBuilder = new RenderMethodBuilder(codes, map, new PolygonModeState(PolygonMode.Fill), new LineWidthState(2));

            this.RenderUnit = new ModernRenderUnit(model, methodBuilder);

            this.Initialize();
        }
Пример #14
0
        /// <summary>
        /// Render propeller in modern opengl.
        /// </summary>
        /// <returns></returns>
        public static DepthGroundNode Create()
        {
            RenderMethodBuilder shadowmapBuilder;
            {
                var vs       = new VertexShader(vertexCode);
                var provider = new ShaderArray(vs);
                var map      = new AttributeMap();
                map.Add(inPosition, GroundModel.strPosition);
                shadowmapBuilder = new RenderMethodBuilder(provider, map);
            }
            var node = new DepthGroundNode(new GroundModel(), GroundModel.strPosition, shadowmapBuilder);

            node.Initialize();

            return(node);
        }
Пример #15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="bitmap">bitmap to be displayed.</param>
        /// <param name="autoDispose">auto dispose <paramref name="bitmap"/> after this object's initialization.</param>
        public CtrlImageRenderer(Bitmap bitmap, bool autoDispose = false)
        {
            var model = new CtrlImageModel();
            var vs    = new VertexShader(vert, inPosition, inUV);
            var fs    = new FragmentShader(frag);
            var codes = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add(inPosition, CtrlImageModel.position);
            map.Add(inUV, CtrlImageModel.uv);
            var methodBuilder = new RenderMethodBuilder(codes, map, new BlendState(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha));

            this.RenderUnit = new ModernRenderUnit(model, methodBuilder);

            this.bitmap      = bitmap;
            this.autoDispose = autoDispose;
        }
Пример #16
0
        /// <summary>
        /// Render propeller in modern opengl.
        /// </summary>
        /// <returns></returns>
        public static PropellerRenderer Create()
        {
            var vs       = new VertexShader(vertexCode, "inPositoin", "inColor");
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add("inPosition", Propeller.strPosition);
            map.Add("inColor", Propeller.strColor);
            var model   = new Propeller();
            var builder = new RenderMethodBuilder(provider, map);
            var node    = new PropellerRenderer(model, builder);

            node.Initialize();

            return(node);
        }
Пример #17
0
        /// <summary>
        /// </summary>
        /// <returns></returns>
        public static PlaneNode Create()
        {
            RenderMethodBuilder renderBuilder;
            {
                var vs       = new VertexShader(vertexCode);
                var fs       = new FragmentShader(fragmentCode);
                var provider = new ShaderArray(vs, fs);
                var map      = new AttributeMap();
                map.Add(inPosition, GroundModel.strPosition);
                renderBuilder = new RenderMethodBuilder(provider, map);
            }
            var node = new PlaneNode(new GroundModel(), GroundModel.strPosition, renderBuilder);

            node.Initialize();

            return(node);
        }
Пример #18
0
        /// <summary>
        /// Render flabellum in modern opengl.
        /// </summary>
        /// <returns></returns>
        public static FlabellumNode Create()
        {
            var vs       = new VertexShader(vertexCode);
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add("inPosition", Flabellum.strPosition);
            map.Add("inColor", Flabellum.strColor);
            var model   = new Flabellum();
            var builder = new RenderMethodBuilder(provider, map);
            var node    = new FlabellumNode(model, builder);

            node.Initialize();

            return(node);
        }
Пример #19
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="textureSource">source of texture.</param>
        public CtrlTexture(ITextureSource textureSource)
            : base(GUIAnchorStyles.Left | GUIAnchorStyles.Top)
        {
            var model = new CtrlTextureModel();
            var vs    = new VertexShader(vert);
            var fs    = new FragmentShader(frag);
            var codes = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add(inPosition, CtrlTextureModel.position);
            map.Add(inUV, CtrlTextureModel.uv);
            var methodBuilder = new RenderMethodBuilder(codes, map, new BlendFuncSwitch(BlendSrcFactor.SrcAlpha, BlendDestFactor.OneMinusSrcAlpha));

            this.RenderUnit    = new ModernRenderUnit(model, methodBuilder);
            this.textureSource = textureSource;

            this.Initialize();
        }
Пример #20
0
        /// <summary>
        /// Creates a <see cref="LightPositionNode"/> which displays and updates light's position.
        /// </summary>
        /// <param name="light"></param>
        /// <param name="initAngle"></param>
        /// <returns></returns>
        public static LightPositionNode Create(CSharpGL.LightBase light, float initAngle = 0)
        {
            var model    = new Sphere(0.3f, 2, 3);
            var vs       = new VertexShader(vertexCode);
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add(inPosition, Sphere.strPosition);
            var builder = new RenderMethodBuilder(provider, map, new PolygonModeSwitch(PolygonMode.Line));
            var node    = new LightPositionNode(model, Sphere.strPosition, builder);

            node.Initialize();
            node.light         = light;
            node.RotationAngle = initAngle;

            return(node);
        }
Пример #21
0
        /// <summary>
        /// A rectangle control that displays an image.
        /// </summary>
        public CtrlButton()
            : base(GUIAnchorStyles.Left | GUIAnchorStyles.Top)
        {
            var model = new CtrlButtonModel();
            var vs    = new VertexShader(vert);
            var fs    = new FragmentShader(frag);
            var codes = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add(inPosition, CtrlButtonModel.position);
            map.Add(inColor, CtrlButtonModel.color);
            var methodBuilder = new RenderMethodBuilder(codes, map, new PolygonModeState(PolygonMode.Fill), new LineWidthState(2));

            this.RenderUnit = new ModernRenderUnit(model, methodBuilder);

            this.Initialize();

            this.MouseDown += CtrlButton_MouseDown;
            this.MouseUp   += CtrlButton_MouseUp;
        }
Пример #22
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static ObjVNFNode Create(ObjVNFMesh mesh)
        {
            var model = new ObjVNF(mesh);
            RenderMethodBuilder builder;
            {
                var vs = new VertexShader(vertexCode);
                var fs = new FragmentShader(fragmentCode);
                var provider = new ShaderArray(vs, fs);
                var map = new AttributeMap();
                map.Add(inPosition, Teapot.strPosition);
                map.Add(inNormal, Teapot.strNormal);
                builder = new RenderMethodBuilder(provider, map);
            }
            var node = new ObjVNFNode(model, ObjVNF.strPosition, builder);
            node.ModelSize = model.GetSize();
            node.WorldPosition = model.GetPosition();

            node.Initialize();

            return node;
        }
Пример #23
0
        public static AxisNode Create()
        {
            // vertex buffer and index buffer.
            var model = new AxisModel();
            // 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", AxisModel.strPosition);
            map.Add("inColor", AxisModel.strColor);
            // build a render method.
            var builder = new RenderMethodBuilder(array, map, new LineWidthSwitch(3));
            // create node.
            var node = new AxisNode(model, builder);

            // initialize node.
            node.Initialize();

            return(node);
        }
Пример #24
0
 private TextBillboardNode(ITextureSource textureSource, int width, int height, IBufferSource model, RenderMethodBuilder renderUnitBuilder)
     : base(model, renderUnitBuilder)
 {
     this.TextureSource = textureSource;
     this.Width         = width;
     this.Height        = height;
 }