예제 #1
0
 public ModelBatch(RenderContext context, ShaderProvider shaderProvider, RenderableSorter sorter)
 {
     this.sorter         = sorter ?? new DefaultRenderableSorter();
     this.ownContext     = (context == null);
     this.context        = context ?? new RenderContext(new DefaultTextureBinder(DefaultTextureBinder.WEIGHTED, 1));
     this.shaderProvider = shaderProvider ?? new DefaultShaderProvider();
 }
예제 #2
0
        private void SetContextStates()
        {
            InputElement[] inputElements =
            {
                new InputElement("POSITION", 0, Format.R32G32B32A32_Float,  0, 0),
                new InputElement("NORMAL",   0, Format.R32G32B32A32_Float, 16, 0)
            };

            layout = new InputLayout(device, ShaderProvider.GetSignatureFromShader("Shader/GoL.fx"), inputElements);

            deviceContext.InputAssembler.InputLayout       = layout;
            deviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
            deviceContext.OutputMerger.BlendState          = States.Instance.blendDisabled;
            deviceContext.OutputMerger.DepthStencilState   = States.Instance.depthEnabledStencilDisabledWriteEnabled;
            deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, RenderForm.ClientSize.Width, RenderForm.ClientSize.Height));
        }
예제 #3
0
        public static void AddAxesToNode(ShaderProvider provider, INode node)
        {
            var x = new LineRenderer(provider.DefaultWorldShader);

            x.SetLine(Vector3.Zero, Vector3.UnitX * _scale);
            x.Color = Color4.Red;
            var y = new LineRenderer(provider.DefaultWorldShader);

            y.SetLine(Vector3.Zero, Vector3.UnitY * _scale);
            y.Color = Color4.Green;
            var z = new LineRenderer(provider.DefaultWorldShader);

            z.SetLine(Vector3.Zero, Vector3.UnitZ * _scale);
            z.Color     = Color4.Blue;
            x.LineWidth = y.LineWidth = z.LineWidth = 1.5f;
            node.AttachComponents(x, y, z);
        }
예제 #4
0
        public SpriteBatch()
        {
            ps = ShaderProvider.CompilePS("Shader/Sprite2D.fx");
            vs = ShaderProvider.CompileVS("Shader/Sprite2D.fx");

            InputElement[] inputElements =
            {
                new InputElement("POSITION", 0, Format.R32G32B32A32_Float,  0, 0),
                new InputElement("COLOR",    0, Format.R32G32B32A32_Float, 16, 0)
            };

            layoutSprite = new InputLayout(RenderFrame.Instance.device, ShaderProvider.GetSignatureFromShader("Shader/Sprite2D.fx"), inputElements);

            tex        = Texture2D.FromFile(RenderFrame.Instance.device, @".\Content\Font.png");
            res        = new ShaderResourceView(RenderFrame.Instance.device, tex);
            textVS     = ShaderProvider.CompileVS("Shader/Font.fx");
            textPS     = ShaderProvider.CompilePS("Shader/Font.fx");
            layoutFont = new InputLayout(RenderFrame.Instance.device, ShaderProvider.GetSignatureFromShader("Shader/Font.fx"), inputElements);
        }
예제 #5
0
        public JellySimulation(SceneManager sceneManager, ShaderProvider shaderProvider)
        {
            _sceneManager   = sceneManager;
            _shaderProvider = shaderProvider;

            ControlFrame         = new Node(new Transform(Vector3.Zero, Quaternion.Identity /* Quaternion.FromEulerAngles(1.0f, 1.0f, 0.0f)*/, Vector3.One), "controlFrame");
            ControlFrameRenderer = new LineRenderer(shaderProvider.DefaultShader);
            var jellyControlFrame = new JellyControlFrame(ControlFrameRenderer, 1.0);

            ControlFrame.AttachComponents(ControlFrameRenderer, jellyControlFrame);

            Jelly = new Node(new Transform(Vector3.Zero, Quaternion.Identity, Vector3.One), "jelly");

            var boundingBoxRenderer = new LineRenderer(shaderProvider.DefaultShader);
            var jellyBoundingBox    = new JellyBoundingBox(boundingBoxRenderer, 5.0);

            var jellyData = new JellyData();

            JellyRenderer   = new DynamicPatchRenderer(shaderProvider.SurfaceShaderBezier, new Mesh(VertexLayout.Type.Position), jellyData);
            JellyController = new JellyController(jellyControlFrame);

            WireframeRenderer = new LineRenderer(shaderProvider.DefaultShader);
            var jellyCPVisualizer = new JellyControlPointVisualizer(WireframeRenderer);

            Jelly.AttachComponents(jellyData, JellyRenderer, JellyController, boundingBoxRenderer, jellyBoundingBox,
                                   WireframeRenderer, jellyCPVisualizer);


            _sceneManager.CurrentScene.AttachChild(Jelly);
            _sceneManager.CurrentScene.AttachChild(ControlFrame);

            var meshData  = MeshLoader.LoadObj("monkey2.obj");
            var monkey    = new Node(new Transform(Vector3.Zero, Quaternion.Identity, Vector3.One), "monkey");
            var jellyMesh = new JellyMesh(jellyData, meshData.positions, meshData.normals);

            JellyMeshRenderer = new DynamicMeshRenderer(shaderProvider.PhongShader, meshData.mesh);

            monkey.AttachComponents(JellyMeshRenderer, jellyMesh);
            _sceneManager.CurrentScene.AttachChild(monkey);
        }