Exemple #1
0
        public static SlimDX.Matrix?DeserializeMatrix(string XMLString)
        {
            var xe = XElement.Parse(XMLString);

            if (xe.Name != "Matrix")
            {
                return(null);
            }
            else
            {
                SlimDX.Matrix mtr = new SlimDX.Matrix();

                mtr.M11 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M11") as XElement).Value);
                mtr.M12 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M12") as XElement).Value);
                mtr.M13 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M13") as XElement).Value);
                mtr.M14 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M14") as XElement).Value);

                mtr.M21 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M21") as XElement).Value);
                mtr.M22 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M22") as XElement).Value);
                mtr.M23 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M23") as XElement).Value);
                mtr.M24 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M24") as XElement).Value);

                mtr.M31 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M31") as XElement).Value);
                mtr.M32 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M32") as XElement).Value);
                mtr.M33 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M33") as XElement).Value);
                mtr.M34 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M34") as XElement).Value);

                mtr.M41 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M41") as XElement).Value);
                mtr.M42 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M42") as XElement).Value);
                mtr.M43 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M43") as XElement).Value);
                mtr.M44 = float.Parse((xe.Nodes().First((x) => (x as XElement).Name == "M44") as XElement).Value);

                return(mtr);
            }
        }
Exemple #2
0
        private static SlimDX.Matrix EM2DXM(Matrix from)
        {
            SlimDX.Matrix to = new SlimDX.Matrix();

            to.M11 = from.element[0, 0];
            to.M12 = from.element[1, 0];
            to.M13 = from.element[2, 0];
            to.M14 = from.element[3, 0];

            to.M21 = from.element[0, 1];
            to.M22 = from.element[1, 1];
            to.M23 = from.element[2, 1];
            to.M24 = from.element[3, 1];

            to.M31 = from.element[0, 2];
            to.M32 = from.element[1, 2];
            to.M33 = from.element[2, 2];
            to.M34 = from.element[3, 2];

            to.M41 = from.element[0, 3];
            to.M42 = from.element[1, 3];
            to.M43 = from.element[2, 3];
            to.M44 = from.element[3, 3];

            return(to);
        }
Exemple #3
0
        private void RenderNode(SceneGraph Node, Camera Camera, SlimDX.Matrix ProjMatrix, int indexOffset, int vertexOffset, out int indicesConsumed, out int verticesConsumed)
        {
            var ic = indexOffset;
            var vc = vertexOffset;

            if (Node.Renderable != null)
            {
                WorldViewProj = Node.WorldTransform * Camera.GetViewMatrix() * ProjMatrix;
                CPO_WorldViewProj.SetMatrix(WorldViewProj);

                int nIndices = Node.Renderable.GetIndexList(EffectName()).Length;
                int nVerts   = Node.Renderable.GetVertexList(EffectName()).Length;

                // TODO KAM: This is horribly inefficient, change this!
                ImmediateContext.DrawIndexed(nIndices, indexOffset, vertexOffset);

                ic += nIndices;
                vc += nVerts;
            }

            foreach (var Child in Node.Children)
            {
                int cic, cvc;
                RenderNode(Child.Value, Camera, ProjMatrix, indexOffset + ic, vertexOffset + vc, out cic, out cvc);
                ic += cic;
                vc += cvc;
            }

            indicesConsumed  = ic;
            verticesConsumed = vc;
        }
Exemple #4
0
        public override void Render(Device device,
                                    SlimDX.Matrix viewMatrix)
        {
            var globals = new VertexShaderGlobals();

            globals.World         = SlimDX.Matrix.Identity;
            globals.WorldViewProj = viewMatrix;
            this._VertexShaderConstantBuffer1.Update(globals);

            device.InputAssembler.SetPrimitiveTopology(PrimitiveTopology.TriangleList);

            device.VertexShader.Set(this._ShaderLoader.VertexShader);
            device.VertexShader.SetConstantBuffer(this._VertexShaderConstantBuffer1.Buffer, 1);

            device.PixelShader.Set(this._ShaderLoader.PixelShader);

            this._MaterialLoader.SetShaderResource(device);
            device.InputAssembler.SetInputLayout(this._ShaderLoader.InputLayout);

            if (this.Block.Unknown28 == 0)
            {
                device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(this._VertexData0Buffer, 40, 0));
            }
            else if (this.Block.Unknown28 == 1)
            {
                device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(this._VertexData0Buffer, 28, 0));
            }

            device.InputAssembler.SetIndexBuffer(this._IndexBuffer, DXGI.Format.R16_UInt, 0);
            device.DrawIndexed(this.Block.Faces.Count, 0, 0);
        }
Exemple #5
0
        private static Matrix DXM2EM(SlimDX.Matrix from)
        {
            Matrix to = new Matrix();

            to.element[0, 0] = from.M11;
            to.element[1, 0] = from.M12;
            to.element[2, 0] = from.M13;
            to.element[3, 0] = from.M14;

            to.element[0, 1] = from.M21;
            to.element[1, 1] = from.M22;
            to.element[2, 1] = from.M23;
            to.element[3, 1] = from.M24;

            to.element[0, 2] = from.M31;
            to.element[1, 2] = from.M32;
            to.element[2, 2] = from.M33;
            to.element[3, 2] = from.M34;

            to.element[0, 3] = from.M41;
            to.element[1, 3] = from.M42;
            to.element[2, 3] = from.M43;
            to.element[3, 3] = from.M44;

            return(to);
        }
        public void Evaluate(int SpreadMax)
        {
            IConstraintContainer inputWorld = this.contraintContainer[0];

            if (inputWorld != null)
            {
                this.persister.UpdateWorld(inputWorld);

                for (int i = 0; i < SpreadMax; i++)
                {
                    if (FCreate[i])
                    {
                        RigidBody body = FBody[i];
                        if (body != null)
                        {
                            SlimDX.Matrix    m   = this.FFrame[i];
                            SliderConstraint cst = new SliderConstraint(body, *(BulletSharp.Matrix *) & m, true);
                            cst.LowerLinLimit     = this.FLinearLimit[i].X;
                            cst.UpperLinLimit     = this.FLinearLimit[i].Y;
                            cst.LowerAngularLimit = this.FAngularLimit[i].X * (float)Math.PI * 2.0f;
                            cst.UpperAngularLimit = this.FAngularLimit[i].Y * (float)Math.PI * 2.0f;
                            cst.DebugDrawSize     = 5.0f;
                            this.persister.Append(cst);
                        }
                    }
                }

                this.persister.Flush();
            }
            else
            {
                this.constraintsOutput.SliceCount = 0;
            }
        }
Exemple #7
0
        public ConstantBuffer(SlimDX.Direct3D11.Device device)
        {
            _device     = device;
            sizeInBytes = 4 * 4 * sizeof(float) * 2 +
                          4 * sizeof(float) * 3 +
                          sizeof(float) * (4 + 4 + 4);
            BufferDescription constBufferDescription = new BufferDescription();

            constBufferDescription.Usage          = ResourceUsage.Default;
            constBufferDescription.SizeInBytes    = sizeInBytes;
            constBufferDescription.BindFlags      = BindFlags.ConstantBuffer;
            constBufferDescription.CpuAccessFlags = CpuAccessFlags.None;
            _constBuffer = new SlimDX.Direct3D11.Buffer(device, constBufferDescription);
            _wasChanged  = true;

            _world      = SlimDX.Matrix.Identity;
            _view       = SlimDX.Matrix.Identity;
            _projection = SlimDX.Matrix.Identity;
            _material   = new Material(new SlimDX.Vector4(0.6f, 0.6f, 0.6f, 1.0f),
                                       new SlimDX.Vector4(1.0f, 1.0f, 1.0f, 1.0f),
                                       new SlimDX.Vector4(0.0f, 0.0f, 0.0f, 1.0f));
            _lightDirection = new SlimDX.Vector4(0.0f, 0.0f, 1.0f, 1.0f);
            _ambientLight   = new SlimDX.Vector4(0.1f, 0.1f, 0.1f, 1.0f);
            _cameraPosition = new SlimDX.Vector4(0.0f, 0.0f, -1.0f, 1.0f);
        }
Exemple #8
0
 public override void Render(SlimDX.Direct3D10.Device device, SlimDX.Matrix viewMatrix)
 {
     /*
      * VertexBuffer vertices;
      *
      * device.VertexDeclaration = this.VertexDeclaration;
      * vertices = new VertexBuffer(
      *  device,
      *  block.Vertices.Count * 32,
      *  BufferUsage.WriteOnly);
      * vertices.SetData(block.Vertices.ToArray());
      *
      * device.Vertices[0].SetSource(vertices, 0, 32);
      *
      * var indices = new IndexBuffer(
      *      device,
      *      typeof(short),
      *      block.Faces.Count,
      *      BufferUsage.WriteOnly);
      * indices.SetData(block.Faces.ToArray(), 0, block.Faces.Count);
      * device.Indices = indices;
      *
      * device.Textures[0] = this.TextureDif;
      * device.Textures[1] = this.TextureNrm; // not "working" yet (needs shader~)
      *
      * device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, block.Faces.Count, 0, block.Faces.Count / 3);
      */
 }
 public static Microsoft.Xna.Framework.Matrix xna(this SlimDX.Matrix v)
 {
     return(new Microsoft.Xna.Framework.Matrix(v.M11, v.M12, v.M13, v.M14,
                                               v.M21, v.M22, v.M23, v.M24,
                                               v.M31, v.M32, v.M33, v.M34,
                                               v.M41, v.M42, v.M43, v.M44));
 }
 public TouchObject(int index, SlimDX.Matrix trans)
 {
     sliceIndex       = index;
     initialTransform = trans;
     objectTransform  = trans;
     hitIds           = new List <TouchFinger>();
 }
    public int Update(List <TouchFinger> allFingers, Vector2D scaleLimit)
    {
        //clean list (check if touches still exist)
        cleanList(allFingers);

        //check how many fingers are still on list and perform actions
        //TRANSLATE
        if (hitIds.Count == 1)
        {
            SlimDX.Vector2 delta = hitIds.First().touchPosition - hitIds.First().lastPosition;
            objectTransform = objectTransform * SlimDX.Matrix.Translation(delta.X, delta.Y, 0);
            return(1);
        }

        //SCALE AND ROTATE
        if (hitIds.Count > 1)
        {
            //SCALE
            float sx = new SlimDX.Vector3(objectTransform.M11, objectTransform.M12, objectTransform.M13).Length();
            float sy = new SlimDX.Vector3(objectTransform.M21, objectTransform.M22, objectTransform.M23).Length();
            //previous distance
            float pd = (float)new Vector2D((hitIds.Last().lastPosition.X - hitIds.First().lastPosition.X),
                                           (hitIds.Last().lastPosition.Y - hitIds.First().lastPosition.Y)).Length;

            //current distance
            float cd = (float)new Vector2D((hitIds.Last().touchPosition.X - hitIds.First().touchPosition.X),
                                           (hitIds.Last().touchPosition.Y - hitIds.First().touchPosition.Y)).Length;

            float scaleFactor = cd - pd;
            float fscale      = 1;
            if (scaleLimit.x < sx + scaleFactor && sx + scaleFactor < scaleLimit.y &&
                scaleLimit.x < sy + scaleFactor && sy + scaleFactor < scaleLimit.y)
            {
                fscale += scaleFactor;
            }

            //ROTATION
            //previous angle
            double pa = Math.Atan2(hitIds.Last().lastPosition.Y - hitIds.First().lastPosition.Y,
                                   hitIds.Last().lastPosition.X - hitIds.First().lastPosition.X);
            //current angle
            double ca = Math.Atan2(hitIds.Last().touchPosition.Y - hitIds.First().touchPosition.Y,
                                   hitIds.Last().touchPosition.X - hitIds.First().touchPosition.X);

            double da = ca - pa;
            //Final matrices
            SlimDX.Matrix  scale  = SlimDX.Matrix.Scaling(fscale, fscale, 1);
            SlimDX.Matrix  rot    = SlimDX.Matrix.RotationZ((float)da);
            SlimDX.Vector3 srcPos = new SlimDX.Vector3(objectTransform.M41, objectTransform.M42, 0);
            //Translate to origin
            objectTransform.M41 = 0;
            objectTransform.M42 = 0;
            //rotate scale and translate back to srcpos
            objectTransform = objectTransform * rot * scale * SlimDX.Matrix.Translation(srcPos);
            return(2);
        }

        return(0);
    }
Exemple #12
0
 public static string MatrixToString(SlimDX.Matrix matrix)
 {
     return
         (matrix.M11.ToString("00.0") + ", " + matrix.M12.ToString("00.0") + ", " + matrix.M13.ToString("00.0") + ", " + matrix.M14.ToString("00.0") + "\n" +
          matrix.M21.ToString("00.0") + ", " + matrix.M22.ToString("00.0") + ", " + matrix.M23.ToString("00.0") + ", " + matrix.M24.ToString("00.0") + "\n" +
          matrix.M31.ToString("00.0") + ", " + matrix.M32.ToString("00.0") + ", " + matrix.M33.ToString("00.0") + ", " + matrix.M34.ToString("00.0") + "\n" +
          matrix.M41.ToString("00.0") + ", " + matrix.M42.ToString("00.0") + ", " + matrix.M43.ToString("00.0") + ", " + matrix.M44.ToString("00.0") + "\n");
 }
Exemple #13
0
 public void Write(SlimDX.Matrix data)
 {
     unsafe
     {
         SlimDX.Matrix *pPtr = &data;
         Write((IntPtr)pPtr, sizeof(SlimDX.Matrix));
     }
 }
Exemple #14
0
        public void Begin(SlimDX.Matrix vp, DX11RenderState shapes, DX11RenderState aabb)
        {
            this.shapesRenderState = shapes != null ? shapes : this.defaultRenderState;
            this.aabbRenderState   = aabb != null ? aabb : this.shapesRenderState;

            this.solidColorShader.ApplyCamera(vp);
            context.RenderStateStack.Push(shapesRenderState);
            context.CleanShaderStages();
        }
Exemple #15
0
 public Camera()
 {
     Position = new SlimDX.Vector3(0.0f, 0.0f, -5.0f);
     right = new SlimDX.Vector3(1.0f, 0.0f, 0.0f);
     up = new SlimDX.Vector3(0.0f, 1.0f, 0.0f);
     forward = new SlimDX.Vector3(0.0f, 0.0f, 1.0f);
     speed = 2.0f;
     View = SlimDX.Matrix.Identity;
 }
 public static PhysX.Math.Matrix AsPhysX(this SlimDX.Matrix m)
 {
     return(new Math.Matrix
            (
                m.M11, m.M12, m.M13, m.M14,
                m.M21, m.M22, m.M23, m.M24,
                m.M31, m.M32, m.M33, m.M34,
                m.M41, m.M42, m.M43, m.M44
            ));
 }
Exemple #17
0
 public void Draw(SlimDX.Matrix transform, bool noShader = false)
 {
     lock (mGroups)
     {
         foreach (var group in mGroups)
         {
             group.RenderGroup(transform, noShader);
         }
     }
 }
Exemple #18
0
 public override void RenderADT(SlimDX.Matrix preTransform)
 {
     lock (mChunks)
     {
         foreach (var chunk in mChunks)
         {
             chunk.Render(preTransform);
         }
     }
 }
Exemple #19
0
        public static bool IsWmoHit(out WMOHitInformation info, out SlimDX.Vector3 hitPos)
        {
            info = null;
            bool hasHit   = false;
            uint uniqueId = 0;
            uint refId    = 0;

            hitPos = SlimDX.Vector3.Zero;
            SlimDX.Matrix modelMatrix = SlimDX.Matrix.Identity;
            WMOFile       hitFile     = null;
            WMORender     renderer    = null;
            uint          instanceID  = 0;

            lock (lockobj)
            {
                float curNear = 99999;

                foreach (var rndr in mRenders)
                {
                    float          curHit  = 0;
                    uint           curInst = 0;
                    uint           curRef  = 0;
                    SlimDX.Vector3 pos;
                    SlimDX.Matrix  tmpMatrix;
                    uint           tmpId = 0;
                    if (rndr.Value.IsInstanceHit(out curHit, out curInst, out curRef, out pos, out tmpMatrix, out tmpId))
                    {
                        hasHit = true;
                        if (curHit < curNear)
                        {
                            curNear     = curHit;
                            uniqueId    = curInst;
                            refId       = curRef;
                            hitPos      = pos;
                            modelMatrix = tmpMatrix;
                            hitFile     = rndr.Value.File;
                            renderer    = rndr.Value;
                            instanceID  = tmpId;
                        }
                    }
                }
            }

            if (hasHit)
            {
                info             = ADT.ADTManager.GetWmoInformation(uniqueId, refId);
                info.HitPoint    = hitPos;
                info.ModelMatrix = modelMatrix;
                info.Model       = hitFile;
                info.Renderer    = renderer;
                info.InstanceID  = instanceID;
            }

            return(hasHit);
        }
Exemple #20
0
        public override void RenderADT(SlimDX.Matrix preTransform)
        {
            if (loadFinished == false)
            {
                return;
            }

            foreach (var chunk in mChunks)
            {
                chunk.Render();
            }
        }
 public static SlimDX.Matrix ToSlimDXMatrix(this OpenTK.Matrix4 matrix)
 {
   var matrixDX = new SlimDX.Matrix();
   for (int row = 0; row < 4; row++)
   {
     for (int column = 0; column < 4; column++)
     {
       matrixDX[row, column] = matrix[row, column];
     }
   }
   return matrixDX;
 }
Exemple #22
0
        public bool IsPositionIn(SlimDX.Vector3 pos, SlimDX.Matrix invMat)
        {
            var triggerSpacePos = SlimDX.Vector3.TransformCoordinate(pos, invMat);

            if ((Math.Abs(triggerSpacePos.X) < (0.5f)) &&
                //(Math.Abs(triggerSpacePos.Y) < (0.5f)) &&
                (Math.Abs(triggerSpacePos.Z) < (0.5f)))
            {
                return(true);
            }

            return(false);
        }
Exemple #23
0
        public static SlimDX.Matrix ToSlimDXMatrix(this OpenTK.Matrix4 matrix)
        {
            var matrixDX = new SlimDX.Matrix();

            for (int row = 0; row < 4; row++)
            {
                for (int column = 0; column < 4; column++)
                {
                    matrixDX[row, column] = matrix[row, column];
                }
            }
            return(matrixDX);
        }
Exemple #24
0
        /// <summary>
        /// Sets the Transform.
        /// </summary>
        /// <param name="matrix">The Matrix.</param>
        public void SetTransform(Matrix2x3 matrix)
        {
            Matrix m = Matrix.Identity;

            m.M12 = matrix[1, 0];
            m.M21 = matrix[0, 1];
            m.M11 = matrix[0, 0];
            m.M22 = matrix[1, 1];
            m.M33 = 1f;
            m.M41 = matrix.OffsetX;
            m.M42 = matrix.OffsetY;
            m.M43 = 0;

            _sprite.Transform = m;
        }
Exemple #25
0
        protected override SliderConstraint CreateConstraint(RigidBody body, int slice)
        {
            SlimDX.Matrix m = this.FMatrix[slice];

            SliderConstraint cst = new SliderConstraint(body, *(BulletSharp.Matrix *) & m, FLinearRef[slice])
            {
                LowerLinLimit = -15.0f,
                UpperLinLimit = -5.0f,
                //LowerLinearLimit = -10.0f,
                //UpperLinearLimit = -10.0f,
                LowerAngularLimit = -(float)Math.PI / 3.0f,
                UpperAngularLimit = (float)Math.PI / 3.0f,
            };

            return(cst);
        }
Exemple #26
0
        void RenderStaticPlaneShape(Mesh mesh)
        {
            Cull cullMode = device.GetRenderState <Cull>(RenderState.CullMode);

            device.SetRenderState(RenderState.CullMode, Cull.None);
            planeShader.Begin();
            Matrix matrix = device.GetTransform(TransformState.World);

            planeShader.SetValue("World", matrix);
            matrix = device.GetTransform(TransformState.View) * device.GetTransform(TransformState.Projection);
            planeShader.SetValue("ViewProjection", matrix);
            planeShader.BeginPass(0);
            mesh.DrawSubset(0);
            planeShader.EndPass();
            planeShader.End();
            device.SetRenderState(RenderState.CullMode, cullMode);
        }
Exemple #27
0
        private void SetOrthoProjection()
        {
            SlimDX.Matrix orthoProj = SlimDX.Matrix.OrthoOffCenterRH(
                mCoords.Left, mCoords.Right, mCoords.Bottom, mCoords.Top, -1, 1);

            // TODO: figure out why this method sometimes gets called when mDevice is null?
            if (mDevice != null)
            {
                try
                {
                    mDevice.SetTransform(TransformState.Projection, orthoProj);
                }
                catch (NullReferenceException e)
                {
                    System.Diagnostics.Debug.Print("NullReferenceException when setting transformation.");
                }
            }
        }
        public void Matrix_Conversion_ToMath()
        {
            var slimDXMatrix = new SlimDXMatrix
            {
                M11 = 11,
                M12 = 12,
                M13 = 13,
                M14 = 14,
                M21 = 21,
                M22 = 22,
                M23 = 23,
                M24 = 24,
                M31 = 31,
                M32 = 32,
                M33 = 33,
                M34 = 34,
                M41 = 41,
                M42 = 42,
                M43 = 43,
                M44 = 44
            };

            Matrix matrix = slimDXMatrix.ToMath();

            Assert.AreEqual(slimDXMatrix.M11, matrix.R1C1);
            Assert.AreEqual(slimDXMatrix.M12, matrix.R1C2);
            Assert.AreEqual(slimDXMatrix.M13, matrix.R1C3);
            Assert.AreEqual(slimDXMatrix.M14, matrix.R1C4);

            Assert.AreEqual(slimDXMatrix.M21, matrix.R2C1);
            Assert.AreEqual(slimDXMatrix.M22, matrix.R2C2);
            Assert.AreEqual(slimDXMatrix.M23, matrix.R2C3);
            Assert.AreEqual(slimDXMatrix.M24, matrix.R2C4);

            Assert.AreEqual(slimDXMatrix.M31, matrix.R3C1);
            Assert.AreEqual(slimDXMatrix.M32, matrix.R3C2);
            Assert.AreEqual(slimDXMatrix.M33, matrix.R3C3);
            Assert.AreEqual(slimDXMatrix.M34, matrix.R3C4);

            Assert.AreEqual(slimDXMatrix.M41, matrix.R4C1);
            Assert.AreEqual(slimDXMatrix.M42, matrix.R4C2);
            Assert.AreEqual(slimDXMatrix.M43, matrix.R4C3);
            Assert.AreEqual(slimDXMatrix.M44, matrix.R4C4);
        }
Exemple #29
0
        public void Transform(SlimDX.Matrix rotation)
        {
            SlimDX.Vector4 coords  = SlimDX.Vector4.Transform(new SlimDX.Vector4(X, Y, Z, 1.0f), rotation);
            SlimDX.Vector4 normals = SlimDX.Vector4.Transform(new SlimDX.Vector4(NX, NY, NZ, 1.0f), rotation);

            X = coords.X;
            Y = coords.Y;
            Z = coords.Z;

            NX = normals.X;
            NY = normals.Y;
            NZ = normals.Z;

            if (Math.Abs((float)Math.Sqrt(NX * NX + NY * NY + NZ * NZ) - 1.0f) > 1e-3)
            {
                throw new ApplicationException(
                          "Internal error: rotation matrix also performs translation and/or scaling");
            }
        }
Exemple #30
0
        public void Render(SceneGraph SceneGraph, Camera Camera, SlimDX.Matrix ProjMatrix)
        {
            // Set input assembler information...
            ImmediateContext.InputAssembler.InputLayout = InputLayout;

            // TODO KAM: Shouldn't the primitive topology be set by the objects being rendered themselves?
            ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;

            // Build our vertex and index buffer...
            var verts   = GetAllVertices(SceneGraph);
            var indices = GetAllIndices(SceneGraph);

            var vertBufferDesc = new BufferDescription(TestEffectVertex.Stride * verts.Length,
                                                       ResourceUsage.Default, BindFlags.VertexBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0);

            Util.ReleaseCom(ref VertexBuffer); // TODO KAM: Make this dirtyable instead
            VertexBuffer = new SlimDX.Direct3D11.Buffer(Device, new SlimDX.DataStream(verts, true, false), vertBufferDesc);

            var indexBuferDesc = new BufferDescription(
                sizeof(uint) * indices.Length,
                ResourceUsage.Default,
                BindFlags.IndexBuffer,
                CpuAccessFlags.None,
                ResourceOptionFlags.None,
                0
                );

            Util.ReleaseCom(ref IndexBuffer);
            IndexBuffer = new SlimDX.Direct3D11.Buffer(Device, new SlimDX.DataStream(indices, false, false), indexBuferDesc);

            // Set our vertex and index buffers
            ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(VertexBuffer, TestEffectVertex.Stride, 0));
            ImmediateContext.InputAssembler.SetIndexBuffer(IndexBuffer, SlimDX.DXGI.Format.R32_UInt, 0);

            // Go through, render all nodes
            var renderPass = EffectTechnique.GetPassByIndex(0);

            renderPass.Apply(ImmediateContext);
            int a, b;

            RenderNode(SceneGraph, Camera, ProjMatrix, 0, 0, out a, out b);
        }
        /// <summary>
        /// Creates the local and world transform matrices for the bone
        /// </summary>
        public void CreateMatrices()
        {
            // creates the individual matrix components
            SlimDX.Matrix scale_matrix     = SlimDX.Matrix.Scaling(scaleAmount, scaleAmount, scaleAmount);
            SlimDX.Matrix rotate_matrix    = SlimDX.Matrix.RotationQuaternion(rotationQuaternion);
            SlimDX.Matrix translate_matrix = SlimDX.Matrix.Translation(translationVector);

            TransformMatrixLocal = SlimDX.Matrix.Identity;

            // multiply the matrices together
            TransformMatrixLocal *= scale_matrix;
            TransformMatrixLocal *= rotate_matrix;
            TransformMatrixLocal *= translate_matrix;

            // multiply by the parents world matrix (if present) to get this bones world matrix
            TransformMatrixWorld = TransformMatrixLocal;
            if (ParentNode != null)
            {
                TransformMatrixWorld = TransformMatrixLocal * ParentNode.TransformMatrixWorld;
            }
        }
        /// <summary>
        /// Create our test RenderEffect.
        /// </summary>
        /// <param name="Device"></param>
        public TestEffect(Device Device)
        {
            this.Device = Device;
            ImmediateContext = Device.ImmediateContext;

            // Compile our shader...
            string compileErrors;
            var compiledShader = SlimDX.D3DCompiler.ShaderBytecode.CompileFromFile
            (
                "../../Effects/TestEffect/TestEffect.fx",
                null,
                "fx_5_0",
                SlimDX.D3DCompiler.ShaderFlags.None,
                SlimDX.D3DCompiler.EffectFlags.None,
                null,
                null,
                out compileErrors
            );

            if (compileErrors != null && compileErrors != "")
            {
                throw new EffectBuildException(compileErrors);
            }

            Effect = new Effect(Device, compiledShader);
            EffectTechnique = Effect.GetTechniqueByName("TestTechnique");

            var vertexDesc = new[]
            {
                new InputElement("POSITION", 0, SlimDX.DXGI.Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0),
                new InputElement("COLOR", 0, SlimDX.DXGI.Format.R32G32B32A32_Float, 12, 0, InputClassification.PerVertexData, 0)
            };

            WorldViewProj = SlimDX.Matrix.Identity;
            CPO_WorldViewProj = Effect.GetVariableByName("gWorldViewProj").AsMatrix();
            InputLayout = new InputLayout(Device, EffectTechnique.GetPassByIndex(0).Description.Signature, vertexDesc);

            Util.ReleaseCom(ref compiledShader);
        }
Exemple #33
0
        /// <summary>
        /// Create our test RenderEffect.
        /// </summary>
        /// <param name="Device"></param>
        public TestEffect(Device Device)
        {
            this.Device      = Device;
            ImmediateContext = Device.ImmediateContext;

            // Compile our shader...
            string compileErrors;
            var    compiledShader = SlimDX.D3DCompiler.ShaderBytecode.CompileFromFile
                                    (
                "../../Effects/TestEffect/TestEffect.fx",
                null,
                "fx_5_0",
                SlimDX.D3DCompiler.ShaderFlags.None,
                SlimDX.D3DCompiler.EffectFlags.None,
                null,
                null,
                out compileErrors
                                    );

            if (compileErrors != null && compileErrors != "")
            {
                throw new EffectBuildException(compileErrors);
            }

            Effect          = new Effect(Device, compiledShader);
            EffectTechnique = Effect.GetTechniqueByName("TestTechnique");

            var vertexDesc = new[]
            {
                new InputElement("POSITION", 0, SlimDX.DXGI.Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0),
                new InputElement("COLOR", 0, SlimDX.DXGI.Format.R32G32B32A32_Float, 12, 0, InputClassification.PerVertexData, 0)
            };

            WorldViewProj     = SlimDX.Matrix.Identity;
            CPO_WorldViewProj = Effect.GetVariableByName("gWorldViewProj").AsMatrix();
            InputLayout       = new InputLayout(Device, EffectTechnique.GetPassByIndex(0).Description.Signature, vertexDesc);

            Util.ReleaseCom(ref compiledShader);
        }
Exemple #34
0
        /// <summary>
        /// Draws a Texture.
        /// </summary>
        /// <param name="spriteSheet">The SpriteSheet.</param>
        /// <param name="rectangle">The Rectangle.</param>
        /// <param name="color">The Color.</param>
        /// <param name="opacity">The Opacity.</param>
        public void DrawTexture(SpriteSheet spriteSheet, Rectangle rectangle, Color color, float opacity = 1)
        {
            var dxTexture = spriteSheet.Texture2D as DirectXTexture;

            if (dxTexture == null)
            {
                throw new ArgumentException("DirectX9 expects a DirectXTexture as resource.");
            }

            //calc percentages for scaling

            float scaleX = rectangle.Width / spriteSheet.Rectangle.Width;
            float scaleY = rectangle.Height / spriteSheet.Rectangle.Height;

            _sprite.Transform = Matrix.Scaling(scaleX, scaleY, 1f);

            _sprite.Draw(dxTexture.GetTexture(), DirectXHelper.ConvertToWinRectangle(spriteSheet.Rectangle), null,
                         DirectXHelper.ConvertVector3(new Vector2(rectangle.X / scaleX, rectangle.Y / scaleY)),
                         DirectXHelper.ConvertColor(color));

            _sprite.Transform = Matrix.Identity;
        }
Exemple #35
0
        public static SlimDX.Matrix ToSlimDX(this Math.Matrix matrix)
        {
            var result = new SlimDX.Matrix
            {
                M11 = matrix.R1C1,
                M12 = matrix.R1C2,
                M13 = matrix.R1C3,
                M14 = matrix.R1C4,
                M21 = matrix.R2C1,
                M22 = matrix.R2C2,
                M23 = matrix.R2C3,
                M24 = matrix.R2C4,
                M31 = matrix.R3C1,
                M32 = matrix.R3C2,
                M33 = matrix.R3C3,
                M34 = matrix.R3C4,
                M41 = matrix.R4C1,
                M42 = matrix.R4C2,
                M43 = matrix.R4C3,
                M44 = matrix.R4C4
            };

            return result;
        }
 public TransformComponent(Entity entity)
     : base(entity)
 {
     matrix = SlimDX.Matrix.Identity;
 }
        private void RenderNode(SceneGraph Node, Camera Camera, SlimDX.Matrix ProjMatrix, int indexOffset, int vertexOffset, out int indicesConsumed, out int verticesConsumed)
        {
            var ic = indexOffset;
            var vc = vertexOffset;

            if (Node.Renderable != null)
            {
                WorldViewProj = Node.WorldTransform * Camera.GetViewMatrix() * ProjMatrix;
                CPO_WorldViewProj.SetMatrix(WorldViewProj);

                int nIndices = Node.Renderable.GetIndexList(EffectName()).Length;
                int nVerts = Node.Renderable.GetVertexList(EffectName()).Length;

                // TODO KAM: This is horribly inefficient, change this!
                ImmediateContext.DrawIndexed(nIndices, indexOffset, vertexOffset);

                ic += nIndices;
                vc += nVerts;
            }

            foreach (var Child in Node.Children)
            {
                int cic, cvc;
                RenderNode(Child.Value, Camera, ProjMatrix, indexOffset + ic, vertexOffset + vc, out cic, out cvc);
                ic += cic;
                vc += cvc;
            }

            indicesConsumed = ic;
            verticesConsumed = vc;
        }