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); }
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); }
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; } }
/// <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); }
/// <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(); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
/// <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; }
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); }
/// <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(); }
/// <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); }
/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <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(); }
/// <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); }
/// <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; }
/// <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; }
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); }
private TextBillboardNode(ITextureSource textureSource, int width, int height, IBufferSource model, RenderMethodBuilder renderUnitBuilder) : base(model, renderUnitBuilder) { this.TextureSource = textureSource; this.Width = width; this.Height = height; }