예제 #1
0
        public static RectNode Create(int x, int y, int width, int height)
        {
            var model = new RectModel();
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", RectModel.strPosition);
            var builder = new RenderMethodBuilder(array, map);

            var node = new RectNode(x, y, width, height, model, builder);

            node.Initialize();

            return(node);
        }
예제 #2
0
        public static SkeletonNode Create(SkeletonModel model)
        {
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", SkeletonModel.strPosition);
            map.Add("inColor", SkeletonModel.strColor);
            map.Add("inBoneIndex", SkeletonModel.strBoneIndex);
            var builder = new RenderMethodBuilder(array, map, new LineWidthSwitch(6));
            var node    = new SkeletonNode(model, builder);

            node.Initialize();

            return(node);
        }
예제 #3
0
        /// <summary>
        /// Render propeller in modern opengl.
        /// </summary>
        /// <returns></returns>
        public static LogicOperationNode Create(Texture texture)
        {
            var vs       = new VertexShader(vertexCode);
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add(inPosition, TexturedCubeModel.strPosition);
            map.Add(inUV, TexturedCubeModel.strUV);
            var builder = new RenderMethodBuilder(provider, map);
            var node    = new LogicOperationNode(new TexturedCubeModel(), TexturedCubeModel.strPosition, builder);

            node.texture = texture;
            node.Initialize();

            return(node);
        }
예제 #4
0
파일: DemoNode.cs 프로젝트: 91yuan/CSharpGL
        public static DemoNode Create()
        {
            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 fs = new FragmentShader(renderFrag);
                renderProvider = new ShaderArray(vs, fs);
            }
            RenderMethodBuilder updateBuilder, updateBuilder2, renderBuilder, renderBuilder2;
            {
                var map = new AttributeMap();
                map.Add(inPosition, DemoModel.inPosition);
                map.Add(inVelocity, DemoModel.inVelocity);
                updateBuilder = new RenderMethodBuilder(updateProvider, map);
            }
            {
                var map = new AttributeMap();
                map.Add(inPosition, DemoModel.inPosition2);
                map.Add(inVelocity, DemoModel.inVelocity2);
                updateBuilder2 = new RenderMethodBuilder(updateProvider, map);
            }
            {
                var map = new AttributeMap();
                map.Add(inPosition, DemoModel.inPosition);
                map.Add(inVelocity, DemoModel.inVelocity);
                renderBuilder = new RenderMethodBuilder(renderProvider, map);
            }
            {
                var map = new AttributeMap();
                map.Add(inPosition, DemoModel.inPosition2);
                map.Add(inVelocity, DemoModel.inVelocity2);
                renderBuilder2 = new RenderMethodBuilder(renderProvider, map);
            }

            var model = new DemoModel();
            var node  = new DemoNode(model, updateBuilder, updateBuilder2, renderBuilder, renderBuilder2);

            node.Initialize();

            return(node);
        }
예제 #5
0
        public static ParticlesNode Create(int groupCount)
        {
            var model = new ParticlesModel(groupCount * 128);
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", ParticlesModel.strPosition);
            var builder = new RenderMethodBuilder(array, map, new BlendSwitch(BlendEquationMode.Add, BlendSrcFactor.One, BlendDestFactor.One));
            var node    = new ParticlesNode(model, builder);

            node.groupCount = groupCount;
            node.Initialize();

            return(node);
        }
예제 #6
0
        public static SmallQuadNode Create()
        {
            var model = new SmallQuadModel();
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", SmallQuadModel.strPosition);
            map.Add("inColor", SmallQuadModel.strColor);
            var builder = new RenderMethodBuilder(array, map);
            var node    = new SmallQuadNode(model, builder);

            node.Initialize();

            return(node);
        }
예제 #7
0
        public static OGLDevParticleNode 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 BlendState(BlendingSourceFactor.One, BlendingDestinationFactor.One);
            {
                var map = new AttributeMap();
                map.Add(inPosition, OGLDevParticleModel.inPosition);
                map.Add(inVelocity, OGLDevParticleModel.inVelocity);
                updateBuilder = new RenderMethodBuilder(updateProvider, map);
            }
            {
                var map = new AttributeMap();
                map.Add(inPosition, OGLDevParticleModel.inPosition2);
                map.Add(inVelocity, OGLDevParticleModel.inVelocity2);
                updateBuilder2 = new RenderMethodBuilder(updateProvider, map);
            }
            {
                var map = new AttributeMap();
                map.Add(vposition, OGLDevParticleModel.inPosition);
                renderBuilder = new RenderMethodBuilder(renderProvider, map, blend);
            }
            {
                var map = new AttributeMap();
                map.Add(vposition, OGLDevParticleModel.inPosition2);
                renderBuilder2 = new RenderMethodBuilder(renderProvider, map, blend);
            }

            var model = new OGLDevParticleModel(particleCount);
            var node  = new OGLDevParticleNode(model, updateBuilder, updateBuilder2, renderBuilder, renderBuilder2);

            node.Initialize();

            return(node);
        }
예제 #8
0
        // this fragment shader is not needed.
        //        private const string fragmentCode =
        //            @"#version 330 core
        //
        //layout(location = 0) out float fragmentdepth;
        ////out vec4 out_Color;
        //
        //void main(void) {
        //    fragmentdepth = gl_FragCoord.z;
        //
        //}
        //";

        /// <summary>
        /// Render teapot to framebuffer in modern opengl.
        /// </summary>
        /// <returns></returns>
        public static DepthTeapotNode Create()
        {
            RenderMethodBuilder shadowmapBuilder;
            {
                var vs       = new VertexShader(vertexCode, inPosition);
                var provider = new ShaderArray(vs);
                var map      = new AttributeMap();
                map.Add(inPosition, Teapot.strPosition);
                shadowmapBuilder = new RenderMethodBuilder(provider, map);
            }
            var model = new Teapot();
            var node  = new DepthTeapotNode(model, shadowmapBuilder);

            node.Initialize();

            return(node);
        }
예제 #9
0
        public static LayeredRectangleNode Create(Bitmap[] bitmaps)
        {
            var vs       = new VertexShader(vertexCode);
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add(inPosition, LayeredRectangleModel.strPosition);
            map.Add(inUV, LayeredRectangleModel.strUV);
            var builder = new RenderMethodBuilder(provider, map, new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha));
            var node    = new LayeredRectangleNode(new LayeredRectangleModel(), builder);

            node.bitmaps = bitmaps;
            node.Initialize();

            return(node);
        }
예제 #10
0
        public static PBRNode Create(IBufferSource model, vec3 size, string position, string texCoord, string normal)
        {
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("aPos", position);
            map.Add("aTexCoords", texCoord);
            map.Add("aNormal", normal);
            var builder = new RenderMethodBuilder(array, map);
            var node    = new PBRNode(model, builder);

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

            return(node);
        }
예제 #11
0
        public static RectangleNode Create(Texture texture)
        {
            var model           = new RectangleModel();
            var vertexShader    = new VertexShader(vert);
            var fragmentShader  = new FragmentShader(frag);
            var programProvider = new ShaderArray(vertexShader, fragmentShader);
            var map             = new AttributeMap();

            map.Add("inPosition", RectangleModel.strPositoin);
            map.Add("inUV", RectangleModel.strUV);
            var builder = new RenderMethodBuilder(programProvider, map, new BlendSwitch(BlendEquationMode.Add, BlendSrcFactor.SrcAlpha, BlendDestFactor.OneMinusSrcAlpha));
            var node    = new RectangleNode(model, builder);

            node.SetTexture(texture);
            node.Initialize();

            return(node);
        }
예제 #12
0
        public static CubemapViewerNode Create(Texture skybox)
        {
            var model    = new CubemapViewerModel();
            var vs       = new VertexShader(vertexCode);
            var fs       = new FragmentShader(reflectFragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add("inPosition", CubemapViewerModel.strPosition);
            var builder = new RenderMethodBuilder(provider, map);
            var node    = new CubemapViewerNode(model, builder);

            node.skyboxTexture = skybox;

            node.Initialize();

            return(node);
        }
예제 #13
0
        public static BackgroundNode Create(Texture texEnvCubemap)
        {
            var model = new CubeModel();
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("aPos", CubeModel.strPosition);
            var builder = new RenderMethodBuilder(array, map);
            var node    = new BackgroundNode(model, builder);

            node.ModelSize     = new vec3(2, 2, 2);
            node.texEnvCubemap = texEnvCubemap;
            node.Initialize();

            return(node);
        }
예제 #14
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public static TerainNode Create()
        {
            var model = new TerainModel();
            RenderMethodBuilder defaultBuilder;
            {
                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, new PolygonModeState(PolygonMode.Line));
            }

            var node = new TerainNode(model, defaultBuilder);

            node.Initialize();

            return(node);
        }
예제 #15
0
        public static GrayFilterNode Create()
        {
            var model    = new GrayFilterModel();
            var vs       = new VertexShader(renderVert, "a_vertex", "a_texCoord");
            var fs       = new FragmentShader(renderFrag);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add("a_vertex", GrayFilterModel.position);
            map.Add("a_texCoord", GrayFilterModel.texCoord);
            var builder = new RenderMethodBuilder(provider, map);

            var node = new GrayFilterNode(model, GrayFilterModel.position, builder);

            node.Initialize();

            return(node);
        }
예제 #16
0
        public static AttractorsNode Create(ParticlesNode attractorsSource)
        {
            var model = new Sphere(0.1f, 10, 40);
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", Sphere.strPosition);
            map.Add("inColor", Sphere.strColor);
            var builder = new RenderMethodBuilder(array, map);
            var node    = new AttractorsNode(model, builder);

            node.attractorsSource = attractorsSource;
            node.Initialize();

            return(node);
        }
예제 #17
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="totalBmp"></param>
        /// <returns></returns>
        public static SkyboxNode Create(Bitmap[] bitmaps)
        {
            var vs       = new VertexShader(vertexCode, inPosition);
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add(inPosition, Skybox.strPosition);
            var cullface = new CullFaceState(CullFaceMode.Back);// display back faces only.
            var builder  = new RenderMethodBuilder(provider, map, cullface);
            var model    = new Skybox();
            var node     = new SkyboxNode(model, Skybox.strPosition, bitmaps, builder);

            node.EnablePicking = TwoFlags.Children;// sky box should not take part in picking.
            node.Initialize();

            return(node);
        }
예제 #18
0
        public static FixedSizeQuadNode Create(int width, int height, Texture texture)
        {
            var model = new FixedSizeQuadModel(width, height);
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", FixedSizeQuadModel.strPosition);
            map.Add("inUV", FixedSizeQuadModel.strUV);
            var builder = new RenderMethodBuilder(array, map);

            var node = new FixedSizeQuadNode(model, builder);

            node.texture = texture;
            node.Initialize();

            return(node);
        }
예제 #19
0
        public static BRDFNode Create(Texture texBRDF)
        {
            var model = new QuadModel();
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("aPos", QuadModel.strPosition);
            map.Add("aTexCoords", QuadModel.strTexCoord);
            var builder = new RenderMethodBuilder(array, map);
            var node    = new BRDFNode(model, builder);

            node.ModelSize = new vec3(2, 2, 2);
            node.texBRDF   = texBRDF;
            node.Initialize();

            return(node);
        }
예제 #20
0
        public static ComputeShaderNode Create()
        {
            var list = new List <Config>();

            list.Add(new Config(1, height, 0));             // fuzzy
            list.Add(new Config(1, height, 1));             // inverseColor
            list.Add(new Config(width / 8, height / 8, 2)); // mosaic

            RenderMethodBuilder fuzzy, inverseColor, mosaic, render;
            {
                var cs       = new CSharpGL.ComputeShader(fuzzyComp);
                var provider = new ShaderArray(cs);
                var map      = new AttributeMap();
                fuzzy = new RenderMethodBuilder(provider, map);
            }
            {
                var cs       = new CSharpGL.ComputeShader(inverseColorComp);
                var provider = new ShaderArray(cs);
                var map      = new AttributeMap();
                inverseColor = new RenderMethodBuilder(provider, map);
            }
            {
                var cs       = new CSharpGL.ComputeShader(mosaicComp);
                var provider = new ShaderArray(cs);
                var map      = new AttributeMap();
                mosaic = new RenderMethodBuilder(provider, map);
            }
            {
                var vs       = new VertexShader(vertexCode);
                var fs       = new FragmentShader(fragmentCode);
                var provider = new ShaderArray(vs, fs);
                var map      = new AttributeMap();
                map.Add(inPosition, RectangleModel.strPosition);
                map.Add(inUV, RectangleModel.strUV);
                render = new RenderMethodBuilder(provider, map);
            }

            var node = new ComputeShaderNode(list.ToArray(), new RectangleModel(), RectangleModel.strPosition, fuzzy, inverseColor, mosaic, render);

            node.Initialize();

            return(node);
        }
예제 #21
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="model"></param>
        /// <param name="position"></param>
        /// <param name="normal"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public static SpotLightNode Create(CSharpGL.SpotLight light, IBufferSource model, string position, string normal, vec3 size)
        {
            var vs = new VertexShader(spotLightVert);
            var fs = new FragmentShader(spotLightFrag);
            var provider = new ShaderArray(vs, fs);
            var map = new AttributeMap();
            map.Add(inPosition, position);
            map.Add(inNormal, normal);
            var builder = new RenderMethodBuilder(provider, map);

            var node = new SpotLightNode(model, position, builder);
            node.light = light;
            node.ModelSize = size;
            node.Children.Add(new LegacyBoundingBoxNode(size));

            node.Initialize();

            return node;
        }
예제 #22
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public static ClippedCubeNode Create(Texture texture)
        {
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", TexturedCubeModel.strPosition);
            map.Add("inUV", TexturedCubeModel.strUV);
            var builder = new RenderMethodBuilder(array, map);
            var model   = new TexturedCubeModel();
            var node    = new ClippedCubeNode(model, builder);

            node.texture = texture;
            node.Initialize();
            node.ModelSize = model.ModelSize;

            return(node);
        }
예제 #23
0
        public static AnimationNode Create(AnimationModel model)
        {
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", AnimationModel.strPosition);
            map.Add("inNormal", AnimationModel.strNormal);
            map.Add("inTexCoord", AnimationModel.strTexCoord);
            map.Add("inBoneIDs", AnimationModel.strBoneIDs);
            map.Add("inWeights", AnimationModel.strWeights);
            var builder = new RenderMethodBuilder(array, map);
            var node    = new AnimationNode(model, builder);

            node.Initialize();

            return(node);
        }
예제 #24
0
        public static SimplexNoiseNode Create()
        {
            var model = new Sphere(1, 180, 360);
            RenderMethodBuilder renderBuilder;
            {
                var vs       = new VertexShader(renderVert);
                var fs       = new FragmentShader(renderFrag);
                var provider = new ShaderArray(vs, fs);
                var map      = new AttributeMap();
                map.Add("in_Position", Sphere.strPosition);
                renderBuilder = new RenderMethodBuilder(provider, map);
            }
            var node = new SimplexNoiseNode(model, Sphere.strPosition, renderBuilder);

            node.ModelSize = model.Size;
            node.Initialize();

            return(node);
        }
예제 #25
0
        public static StencilTestNode Create()
        {
            var model    = new StencilTestModel();
            var vs       = new VertexShader(vertexCode);
            var fs       = new FragmentShader(fragmentCode);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add(inPosition, StencilTestModel.strPosition);
            var polygonModeState = new PolygonModeState(PolygonMode.Line);
            var lineWidthState   = new LineWidthState(10);
            var builder          = new RenderMethodBuilder(provider, map, polygonModeState, lineWidthState);
            var node             = new StencilTestNode(model, builder);

            node.polygonModeState = polygonModeState;
            node.lineWidthState   = lineWidthState;
            node.Initialize();

            return(node);
        }
예제 #26
0
        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 BlendFuncSwitch(BlendSrcFactor.SrcAlpha, BlendDestFactor.OneMinusSrcAlpha);
            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);
        }
예제 #27
0
        public static NormalMappingNode Create()
        {
            var model = new NormalMappingModel();
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", NormalMappingModel.strPosition);
            map.Add("inTexCoord", NormalMappingModel.strTexCoord);
            map.Add("inNormal", NormalMappingModel.strNormal);
            map.Add("inTangent", NormalMappingModel.strTangent);
            var builder = new RenderMethodBuilder(array, map);
            var node    = new NormalMappingNode(model, builder);

            node.ModelSize = new vec3(2, 2, 0.1f);
            node.Initialize();

            return(node);
        }
예제 #28
0
        public static BasicTessellationNode Create(ObjVNF model)
        {
            var vs       = new VertexShader(renderVert, "Position_VS_in", "TexCoord_VS_in", "Normal_VS_in");
            var tc       = new TessControlShader(renderTesc);
            var te       = new TessEvaluationShader(renderTese);
            var fs       = new FragmentShader(renderFrag);
            var provider = new ShaderArray(vs, tc, te, fs);
            var map      = new AttributeMap();

            map.Add("Position_VS_in", ObjVNF.strPosition);
            map.Add("TexCoord_VS_in", ObjVNF.strTexCoord);
            map.Add("Normal_VS_in", ObjVNF.strNormal);
            var builder = new RenderMethodBuilder(provider, map);

            var node = new BasicTessellationNode(model, builder);

            node.ModelSize = model.GetSize();
            node.Initialize();

            return(node);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <param name="position"></param>
        /// <param name="normal"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public static DirectionalLightNode Create(CSharpGL.DirectionalLight light, IBufferSource model, string position, string normal, vec3 size)
        {
            var vs       = new VertexShader(directionalLightVert, vPosition, vNormal);
            var fs       = new FragmentShader(directionalLightFrag);
            var provider = new ShaderArray(vs, fs);
            var map      = new AttributeMap();

            map.Add(vPosition, position);
            map.Add(vNormal, normal);
            var builder = new RenderUnitBuilder(provider, map);

            var node = new DirectionalLightNode(model, position, builder);

            node.Light     = light;
            node.ModelSize = size;
            node.Children.Add(new LegacyBoundingBoxNode(size));

            node.Initialize();

            return(node);
        }
예제 #30
0
        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 BlendState(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha);
                renderBuilder = new RenderMethodBuilder(provider, map);
            }
            var node = new AccumulationNode(model, renderBuilder);

            node.ModelSize = model.Size;
            node.Initialize();

            return(node);
        }