Пример #1
0
 // render the mesh using the supplied shader and matrix
 public void RenderKernel(PostKernelShader shader, int textureID, float textureWidth, float textureHeight, Kernel kernel)
 {
     Prepare(shader);
     shader.KernelRender(textureID, textureWidth, textureHeight, kernel);
     RenderQuad(shader);
 }
Пример #2
0
        // initialize
        public void Init()
        {
            // initialize camera
            camera = new Camera(new Vector3(0, 10, 15), Quaternion.FromAxisAngle(Vector3.UnitX, -0.5f));

            // initialize stopwatch
            timer = new Stopwatch();
            timer.Start();

            // create model shaders
            shaderDefault    = Shader.Load("vs", "fs");
            shaderNormal     = Shader.Load("vs_normal", "fs_normal");
            shaderConstant   = Shader.Load("vs", "fs_const");
            shaderFur        = new FurShader("../../shaders/vs_fur.glsl", "../../shaders/fs_fur.glsl");
            shaderSkyBox     = Shader.Load("vs_skybox", "fs_skybox");
            shaderReflective = Shader.Load("vs", "fs_reflective");
            // create post processing shaders
            shaderPostProc       = Shader.Load("vs_post", "fs_post");
            shaderKernel         = new PostKernelShader("../../shaders/vs_post.glsl", "../../shaders/fs_kernel.glsl");
            shaderVigAndChrom    = new PostVigAndChromShader("../../shaders/vs_post.glsl", "../../shaders/fs_vigchrom.glsl");
            shaderPostBloomBlend = Shader.Load("vs_post", "fs_bloomblend");

            // load meshes
            meshTeapot    = new Mesh("../../assets/teapot.obj");
            meshFloor     = new Mesh("../../assets/floor.obj");
            meshCube      = new Mesh("../../assets/cube.obj");
            meshHeightMap = new HeightMap("../../assets/heightmap.png");

            // load textures
            textureFur       = Texture.Load("fur.png");
            textureWood      = Texture.Load("wood.jpg");
            textureTrump     = Texture.Load("thetrump.png");
            textureBrickWall = Texture.Load("brickwall.jpg");
            textureSkyBox    = new CubeTexture(
                "../../assets/sea_rt.JPG", "../../assets/sea_lf.JPG",
                "../../assets/sea_up.JPG", "../../assets/sea_dn.JPG",
                "../../assets/sea_bk.JPG", "../../assets/sea_ft.JPG"
                );
            // load normal maps
            normalNormal    = Texture.Load("normal_normal.png");
            normalBrickWall = Texture.Load("brickwall_normal.jpg");
            normalHeightMap = Texture.Load("heightmap_normal.png");

            ResizeWindow();
            quad = new ScreenQuad();

            // create models
            modelTeapot    = new Model(meshTeapot, textureWood, shaderNormal, Matrix4.CreateTranslation(new Vector3(0, 0.1f, 0)));
            modelFloor     = new Model(meshFloor, textureBrickWall, shaderNormal, Matrix4.Identity);
            modelLightPos  = new Model(meshCube, null, shaderConstant, Matrix4.Identity);
            modelHeightMap = new Model(meshHeightMap, textureTrump, shaderDefault, Matrix4.CreateScale(10f) * Matrix4.CreateTranslation(20f, 0f, 0f));
            Model teapot2 = new Model(meshTeapot, textureWood, shaderDefault, Matrix4.CreateScale(0.5f, 1f, 0.5f) * Matrix4.CreateRotationY(1.5f) * Matrix4.CreateTranslation(new Vector3(0, 24f, 0)));

            // set normal maps of specific models
            modelFloor.normalMap     = normalBrickWall;
            modelTeapot.normalMap    = normalBrickWall;
            modelLightPos.color      = new Vector3(1f, 1f, .5f);
            modelHeightMap.normalMap = normalHeightMap;

            // create special models
            ReflectiveModel refl   = new ReflectiveModel(meshTeapot, shaderReflective, Matrix4.CreateTranslation(0, 12f, 0), textureSkyBox);
            FurModel        furmod = new FurModel(meshTeapot, textureBrickWall, textureFur, shaderDefault, shaderFur, Matrix4.CreateRotationX((float)Math.PI / 2f) * Matrix4.CreateTranslation(new Vector3(0, 36f, 0)));

            // set up scenegraph
            SceneNode mainNode = new SceneNode();

            subScene = new SceneNode();
            subScene.AddChildModel(refl);
            subScene.AddChildModel(furmod);
            subScene.AddChildModel(teapot2);

            mainNode.AddChildNode(subScene);

            mainNode.AddChildModel(modelFloor);
            mainNode.AddChildModel(modelTeapot);
            mainNode.AddChildModel(modelLightPos);
            mainNode.AddChildModel(modelHeightMap);
            scene = new SceneGraph(mainNode);

            // set kernel used for final post processing step
            kernel = Kernel.SmallGaussianBlur;
        }