예제 #1
0
        private void InitRenderer()
        {
            //create a default camera, because it's required during the viewport's creation.
            camera = new Camera();
            Scene.RootNode.CreateChildNode("camera", camera);
            //create the renderer and render window from window's native handle
            renderer = Renderer.CreateRenderer();
            //Right now we only support native window handle from Microsoft Windows
            //we'll support more platform on user's demand.
            window = renderer.RenderFactory.CreateRenderWindow(new RenderParameters(), Handle);
            //create 4 viewports, the viewport's area is meanless here because we'll change it to the right area in the SetViewports later
            viewports = new[]
            {
                window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
                window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
                window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
                window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1))
            };
            SetViewports(1);


            //initialize shader for grid

            GLSLSource src = new GLSLSource();

            src.VertexShader   = @"#version 330 core
layout (location = 0) in vec3 position;
uniform mat4 matWorldViewProj;
void main()
{
    gl_Position = matWorldViewProj * vec4(position, 1.0f);
}";
            src.FragmentShader = @"#version 330 core
out vec4 color;
void main()
{
    color = vec4(1, 1, 1, 1);
}";
            //define the input format used by GLSL vertex shader
            //the format is
            // struct ControlPoint {
            //    FVector3 Position;
            //}
            VertexDeclaration fd = new VertexDeclaration();

            fd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Position);
            //compile shader from GLSL source code and specify the vertex input format
            gridShader = renderer.RenderFactory.CreateShaderProgram(src, fd);
            //connect GLSL uniform to renderer's internal variable
            gridShader.Variables = new ShaderVariable[]
            {
                new ShaderVariable("matWorldViewProj", VariableSemantic.MatrixWorldViewProj)
            };

            SceneUpdated("");
        }
        private static ShaderSet CreateDepthShader(Renderer renderer)
        {
            GLSLSource src = new GLSLSource();

            src.VertexShader   = @"#version 330 core
            layout (location = 0) in vec3 position;
            uniform mat4 matWorldViewProj;
            out float depth;
            void main()
            {
                gl_Position = matWorldViewProj * vec4(position, 1.0f);
                float zfar = 200.0;
                float znear = 0.5;
                //visualize the depth by linearize it so we don't get a blank screen
                depth = (2.0 * znear) / (zfar + znear - gl_Position.z /gl_Position.w  * (zfar - znear));
            }";
            src.FragmentShader = @"#version 330 core
            in float depth;
            out vec4 color;
            void main()
            {
                color = vec4(depth, depth, depth, 1);
            }";
            //we only need the position to render the depth map
            VertexDeclaration fd = new VertexDeclaration();

            fd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Position);
            //compile shader from GLSL source code and specify the vertex input format
            var shader = renderer.RenderFactory.CreateShaderProgram(src, fd);

            //connect GLSL uniform to renderer's internal variable
            shader.Variables = new ShaderVariable[]
            {
                new ShaderVariable("matWorldViewProj", VariableSemantic.MatrixWorldViewProj)
            };
            //create a shader set
            ShaderSet ret = new ShaderSet();

            //we only use the fallback, and left other shaders unassigned, so all materials will be rendered by this shader
            ret.Fallback = shader;
            return(ret);
        }
예제 #3
0
        //ExStart:RenderView
        private void InitRenderer()
        {
            // Create a default camera, because it's required during the viewport's creation.
            camera = new Camera();
            Scene.RootNode.CreateChildNode("camera", camera);
            // Create the renderer and render window from window's native handle
            renderer = Renderer.CreateRenderer();
            // Right now we only support native window handle from Microsoft Windows
            // We'll support more platform on user's demand.
            window = renderer.RenderFactory.CreateRenderWindow(new RenderParameters(), Handle);
            // Create 4 viewports, the viewport's area is meanless here because we'll change it to the right area in the SetViewports later
            viewports = new[]
            {
                window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
                window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
                window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
                window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1))
            };
            SetViewports(1);


            //initialize shader for grid

            GLSLSource src = new GLSLSource();
            src.VertexShader = @"#version 330 core
            layout (location = 0) in vec3 position;
            uniform mat4 matWorldViewProj;
            void main()
            {
                gl_Position = matWorldViewProj * vec4(position, 1.0f);
            }";
                        src.FragmentShader = @"#version 330 core
            out vec4 color;
            void main()
            {
                color = vec4(1, 1, 1, 1);
            }";
            // Define the input format used by GLSL vertex shader the format is struct ControlPoint { FVector3 Position;}
            VertexDeclaration fd = new VertexDeclaration();
            fd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Position);
            // Compile shader from GLSL source code and specify the vertex input format
            gridShader = renderer.RenderFactory.CreateShaderProgram(src, fd);
            // Connect GLSL uniform to renderer's internal variable
            gridShader.Variables = new ShaderVariable[]
            {
                new ShaderVariable("matWorldViewProj", VariableSemantic.MatrixWorldViewProj)
            };

            SceneUpdated("");
        }