当前位置: 首页>>代码示例>>C#>>正文


C# Camera.GetViewMatrix方法代码示例

本文整理汇总了C#中Camera.GetViewMatrix方法的典型用法代码示例。如果您正苦于以下问题:C# Camera.GetViewMatrix方法的具体用法?C# Camera.GetViewMatrix怎么用?C# Camera.GetViewMatrix使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Camera的用法示例。


在下文中一共展示了Camera.GetViewMatrix方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Draw

        public void Draw(Camera camera, GameTime gameTime)
        {
            _device.BlendState = BlendState.Opaque;
            _device.DepthStencilState = DepthStencilState.Default;

            _effect.CurrentTechnique = _effect.Techniques["Colored"];
            _effect.Parameters["xView"].SetValue(camera.GetViewMatrix());
            _effect.Parameters["xProjection"].SetValue(camera.GetProjectionMatrix());
            _effect.Parameters["xWorld"].SetValue(Matrix.Identity);
            Vector3 lightDirection = new Vector3(-1.0f, -2.0f, 4.0f);
            lightDirection.Normalize();
            _effect.Parameters["xLightDirection"].SetValue(lightDirection);
            _effect.Parameters["xAmbient"].SetValue(0.3f);
            _effect.Parameters["xEnableLighting"].SetValue(true);

            _device.SetVertexBuffer(buffer);

            foreach (EffectPass pass in _effect.CurrentTechnique.Passes)
            {
                pass.Apply();

                foreach (var leafNode in _nodes)
                {
                    leafNode.Draw(gameTime);
                }
            }
        }
开发者ID:nordsoyv,项目名称:GraphicsFun,代码行数:27,代码来源:Landscape.cs

示例2: Render

        public void Render(Camera camera, RenderTarget gbuffer, RenderTarget input, RenderTarget output)
        {
            if (ShaderParams == null)
            {
                ShaderParams = new ScreenSpaceReflectionsShaderParams();
                Shader.GetUniformLocations(ShaderParams);
            }

            Matrix4 viewMatrix;
            camera.GetViewMatrix(out viewMatrix);

            Matrix4 projectionMatrix;
            camera.GetProjectionMatrix(out projectionMatrix);

            var viewProjectionMatrix = viewMatrix * projectionMatrix;

            var cameraClipPlane = new Vector2(camera.NearClipDistance, camera.FarClipDistance);

            var itView = Matrix4.Transpose(Matrix4.Invert(viewMatrix));

            Backend.BeginPass(output, new Vector4(0.0f, 0.0f, 0.0f, 1.0f));
            Backend.BeginInstance(Shader.Handle, new int[] { input.Textures[0].Handle, gbuffer.Textures[1].Handle, gbuffer.Textures[3].Handle },
                samplers: new int[] { Backend.DefaultSamplerNoFiltering, Backend.DefaultSamplerNoFiltering, Backend.DefaultSamplerNoFiltering });
            Backend.BindShaderVariable(ShaderParams.SamplerScene, 0);
            Backend.BindShaderVariable(ShaderParams.SamplerNormal, 1);
            Backend.BindShaderVariable(ShaderParams.SamplerDepth, 2);
            Backend.BindShaderVariable(ShaderParams.CameraPosition, ref camera.Position);
            Backend.BindShaderVariable(ShaderParams.ViewProjectionMatrix, ref projectionMatrix);
            Backend.BindShaderVariable(ShaderParams.CameraClipPlane, ref cameraClipPlane);
            Backend.BindShaderVariable(ShaderParams.ItView, ref itView);

            Backend.DrawMesh(QuadMesh.MeshHandle);
            Backend.EndPass();
        }
开发者ID:johang88,项目名称:triton,代码行数:34,代码来源:ScreenSpaceReflections.cs

示例3: RenderThread

    static unsafe void RenderThread(Sample sample)
    {
        // initialize the renderer
        Bgfx.Init(RendererBackend.Direct3D11);
        Bgfx.Reset(sample.WindowWidth, sample.WindowHeight, ResetFlags.Vsync);

        // enable debug text
        Bgfx.SetDebugFeatures(DebugFeatures.DisplayText);

        // load shaders
        var programTextureLighting = ResourceLoader.LoadProgram("vs_stencil_texture_lighting", "fs_stencil_texture_lighting");
        var programColorLighting = ResourceLoader.LoadProgram("vs_stencil_color_lighting", "fs_stencil_color_lighting");
        var programColorTexture = ResourceLoader.LoadProgram("vs_stencil_color_texture", "fs_stencil_color_texture");
        var programColorBlack = ResourceLoader.LoadProgram("vs_stencil_color", "fs_stencil_color_black");
        var programTexture = ResourceLoader.LoadProgram("vs_stencil_texture", "fs_stencil_texture");

        // load meshes
        var bunnyMesh = ResourceLoader.LoadMesh("bunny.bin");
        var columnMesh = ResourceLoader.LoadMesh("column.bin");
        var hplaneMesh = new Mesh(MemoryBlock.FromArray(StaticMeshes.HorizontalPlane), PosNormalTexcoordVertex.Layout, StaticMeshes.PlaneIndices);
        var vplaneMesh = new Mesh(MemoryBlock.FromArray(StaticMeshes.VerticalPlane), PosNormalTexcoordVertex.Layout, StaticMeshes.PlaneIndices);

        // load textures
        var figureTex = ResourceLoader.LoadTexture("figure-rgba.dds");
        var flareTex = ResourceLoader.LoadTexture("flare.dds");
        var fieldstoneTex = ResourceLoader.LoadTexture("fieldstone-rgba.dds");

        // create uniforms
        var colorTextureHandle = new Uniform("u_texColor", UniformType.Int1);
        var uniforms = new Uniforms();
        uniforms.SubmitConstUniforms();

        // light colors
        uniforms.LightColor = new[] {
            new Vector4(1.0f, 0.7f, 0.2f, 0.0f), // yellow
            new Vector4(0.7f, 0.2f, 1.0f, 0.0f), // purple
            new Vector4(0.2f, 1.0f, 0.7f, 0.0f), // cyan
            new Vector4(1.0f, 0.4f, 0.2f, 0.0f)  // orange
        };

        // camera
        var camera = new Camera(60.0f, sample.WindowWidth, sample.WindowHeight, 0.1f, 100.0f);
        camera.Position = new Vector3(0.0f, 18.0f, -40.0f);

        // start the frame clock
        var clock = new Clock();
        clock.Start();

        // main loop
        while (sample.ProcessEvents(ResetFlags.Vsync)) {
            // tick the clock
            var elapsed = clock.Frame();
            var time = clock.TotalTime();

            // write some debug text
            Bgfx.DebugTextClear();
            Bgfx.DebugTextWrite(0, 1, DebugColor.White, DebugColor.Blue, "SharpBgfx/Samples/13-Stencil");
            Bgfx.DebugTextWrite(0, 2, DebugColor.White, DebugColor.Cyan, "Description: Stencil reflections.");
            Bgfx.DebugTextWrite(0, 3, DebugColor.White, DebugColor.Cyan, "Frame: {0:F3} ms", elapsed * 1000);

            // clear the background
            Bgfx.SetViewClear(BaseId, ClearTargets.Color | ClearTargets.Depth | ClearTargets.Stencil, 0x30303000);
            Bgfx.SetViewRect(BaseId, 0, 0, sample.WindowWidth, sample.WindowHeight);
            Bgfx.Touch(BaseId);

            // set view params for each pass
            var viewMtx = camera.GetViewMatrix();
            var projMtx = camera.GetProjectionMatrix();
            for (byte i = PassId0; i <= PassId4; i++) {
                Bgfx.SetViewRect(i, 0, 0, sample.WindowWidth, sample.WindowHeight);
                Bgfx.SetViewTransform(i, (float*)&viewMtx, (float*)&projMtx);
            }

            // first pass - draw ground plane
            var floorMtx = FloorTransform;
            hplaneMesh.Submit(PassId0, programColorBlack, &floorMtx, StateGroups[PrebuiltRenderState.StencilReflectionCraftStencil], uniforms);

            // second pass - reflected objects
            Bgfx.SetViewClear(PassId1, ClearTargets.Depth, 0);
            uniforms.AmbientPass = true;
            uniforms.LightingPass = true;
            uniforms.Color = new Vector4(0.70f, 0.65f, 0.60f, 0.8f);
            uniforms.LightCount = LightCount;

            // light positions
            var lightPositions = new Vector4[LightCount];
            var reflectedLights = new Vector4[LightCount];
            for (int i = 0; i < lightPositions.Length; i++) {
                var v3 = new Vector3(
                    (float)Math.Sin(time * 1.1 + i * 0.03 + i * 1.07 * Math.PI / 2) * 20.0f,
                    8.0f + (1.0f - (float)Math.Cos(time * 1.5 + i * 0.29 + 1.49f * Math.PI / 2)) * 4.0f,
                    (float)Math.Cos(time * 1.3 + i * 0.13 + i * 1.79 * Math.PI / 2) * 20.0f
                );

                lightPositions[i] = new Vector4(v3, 15.0f);
                reflectedLights[i] = new Vector4(Vector3.Transform(v3, ReflectionTransform), 15.0f);
            }

            uniforms.LightPosRadius = reflectedLights;
            var bunnyMtx =
//.........这里部分代码省略.........
开发者ID:prepare,项目名称:SharpBgfx,代码行数:101,代码来源:Program.cs

示例4: Render

        public RenderTarget Render(Stage stage, Camera camera)
        {
            if (!HandlesInitialized)
            {
                InitializeHandles();
                HandlesInitialized = true;
            }

            RenderedLights = 0;

            // Init common matrices
            Matrix4 view, projection;
            camera.GetViewMatrix(out view);
            camera.GetProjectionMatrix(out projection);

            // Render scene to GBuffer
            var clearColor = stage.ClearColor;
            clearColor.W = 0;
            Backend.ProfileBeginSection(Profiler.GBuffer);
            Backend.BeginPass(GBuffer, clearColor, true);
            RenderScene(stage, camera, ref view, ref projection);
            Backend.EndPass();
            Backend.ProfileEndSection(Profiler.GBuffer);

            // Render light accumulation
            Backend.ProfileBeginSection(Profiler.Lighting);
            Backend.BeginPass(LightAccumulation, new Vector4(0.0f, 0.0f, 0.0f, 1.0f), true);

            RenderAmbientLight(stage);
            RenderLights(camera, ref view, ref projection, stage.GetLights(), stage);

            Backend.EndPass();
            Backend.ProfileEndSection(Profiler.Lighting);

            var currentRenderTarget = Temporary;
            var currentSource = LightAccumulation;

            if (FogSettings.Enable)
            {
                Backend.BeginPass(currentRenderTarget, new Vector4(0.0f, 0.0f, 0.0f, 1.0f), false);

                Backend.BeginInstance(FogShader.Handle, new int[] { currentSource.Textures[0].Handle, GBuffer.Textures[2].Handle }, new int[] { Backend.DefaultSamplerNoFiltering, Backend.DefaultSamplerNoFiltering }, LightAccumulatinRenderState);
                Backend.BindShaderVariable(FogParams.SamplerScene, 0);
                Backend.BindShaderVariable(FogParams.SamplerGBuffer2, 1);
                Backend.BindShaderVariable(FogParams.FogStart, FogSettings.Start);
                Backend.BindShaderVariable(FogParams.FogEnd, FogSettings.End);
                Backend.BindShaderVariable(FogParams.FogColor, ref FogSettings.Color);

                Vector2 screenSize = new Vector2(LightAccumulation.Width, LightAccumulation.Height);
                Backend.BindShaderVariable(FogParams.ScreenSize, ref screenSize);

                Backend.DrawMesh(QuadMesh.MeshHandle);

                Backend.EndPass();

                var tmp = currentRenderTarget;
                currentRenderTarget = currentSource;
                currentSource = tmp;
            }

            Backend.BeginPass(Output, new Vector4(0.0f, 0.0f, 0.0f, 1.0f), false);

            Backend.BeginInstance(CombineShader.Handle, new int[] { currentSource.Textures[0].Handle }, new int[] { Backend.DefaultSamplerNoFiltering }, LightAccumulatinRenderState);
            Backend.BindShaderVariable(CombineParams.SamplerLight, 0);
            Backend.DrawMesh(QuadMesh.MeshHandle);

            Backend.EndPass();

            return Output;
        }
开发者ID:johang88,项目名称:triton,代码行数:70,代码来源:DeferredRenderer.cs


注:本文中的Camera.GetViewMatrix方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。