コード例 #1
0
        // Initialise components
        public void InitialiseComponents()
        {
            // --------------------- //
            // Uncomment for testing //
            // --------------------- //

            // Triangle test
            //tri = new Triangle(ref dev, ref devCon);
            //tri.Initialise();

            // Cube test
            //cube = new Cube(ref dev, ref devCon);
            //cube.setDimensions(form.ClientSize.Width, form.ClientSize.Height);
            //cube.Initialise();

            // Cube import
            ci = new CubeImport(ref dev, ref devCon);
            ci.setDimensions(form.ClientSize.Width, form.ClientSize.Height);
            ci.Initialise();

            // ---- //
            // Live //
            // ---- //
            di = new DXInput();
            di.setDimensions(form.ClientSize.Width, form.ClientSize.Height);

            arc = new ArcCamera();
            arc.setDXInput(ref di);

            cam = new FPSCamera();
            cam.setDXInput(ref di);
            cam.setProjectionMatrix(form.ClientSize.Width, form.ClientSize.Height);

            sky = new Skydome(ref dev, ref devCon);
            sky.setDimensions(form.ClientSize.Width, form.ClientSize.Height);
            sky.Initialise();

            terrain = new Terrain(ref dev, ref devCon);
            terrain.setDimensions(form.ClientSize.Width, form.ClientSize.Height);
            terrain.Initialise();
        }
コード例 #2
0
        // Rotate based on FPSCamera.
        public void Update(ref DXInput di, ref FPSCamera cam)
        {
            viewProj = Matrix.Multiply(cam.GetViewMatrix(), proj);


            // Move up or down using Q and Z.
            if ((di.currKeyboardState.IsPressed(SDI.Key.Q)) && (di.prevKeyboardState.IsPressed(SDI.Key.Q)))
            {
                //cam.ApplyZoom(0.005f);
                cam.MoveVertically(0.01f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.Z)) && (di.prevKeyboardState.IsPressed(SDI.Key.Z)))
            {
                //cam.ApplyZoom(-0.005f);
                cam.MoveVertically(-0.01f);
            }
            // Strafe left or right using A and D.
            if ((di.currKeyboardState.IsPressed(SDI.Key.A)) && (di.prevKeyboardState.IsPressed(SDI.Key.A)))
            {
                cam.Strafe(-0.01f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.D)) && (di.prevKeyboardState.IsPressed(SDI.Key.D)))
            {
                cam.Strafe(0.01f);
            }
            // Move forward or backward using W and S.
            if ((di.currKeyboardState.IsPressed(SDI.Key.W)) && (di.prevKeyboardState.IsPressed(SDI.Key.W)))
            {
                cam.MoveForward(0.01f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.S)) && (di.prevKeyboardState.IsPressed(SDI.Key.S)))
            {
                cam.MoveForward(-0.01f);
            }

            // Pitch the camera using I and K.
            if ((di.currKeyboardState.IsPressed(SDI.Key.I)) && (di.prevKeyboardState.IsPressed(SDI.Key.I)))
            {
                cam.Pitch(-0.0001f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.K)) && (di.prevKeyboardState.IsPressed(SDI.Key.K)))
            {
                cam.Pitch(0.0001f);
            }
            // Yaw the camera using J and L.
            if ((di.currKeyboardState.IsPressed(SDI.Key.J)) && (di.prevKeyboardState.IsPressed(SDI.Key.J)))
            {
                cam.Yaw(-0.0001f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.L)) && (di.prevKeyboardState.IsPressed(SDI.Key.L)))
            {
                cam.Yaw(0.0001f);
            }

            //cam.ApplyRotation(yawDelta, pitchDelta);

            //var rot = Matrix.RotationX(xRot) * Matrix.RotationY(yRot) * Matrix.RotationZ(zRot);
            var wvp = viewProj; // * rot;

            // var wvp = view;
            wvp.Transpose();
            devCon.UpdateSubresource(ref wvp, cBuffer);
        }
コード例 #3
0
        // Rotate based on FPSCamera.
        public void Update(ref DXInput di, ref FPSCamera cam)
        {
            float t = sw.ElapsedMilliseconds / 1000.0f;

            viewProj = Matrix.Multiply(cam.GetViewMatrix(), proj);

            // Left mouse button
            if ((di.currMouseState.Buttons[0] == true) && (di.prevMouseState.Buttons[0] == true))
            {
                xRot += 0.0025f;
            }
            // Middle mouse button
            else if ((di.currMouseState.Buttons[2] == true) && (di.prevMouseState.Buttons[2] == true))
            {
                zRot += 0.0025f;
            }
            // Right mouse button
            else if ((di.currMouseState.Buttons[1] == true) && (di.prevMouseState.Buttons[1] == true))
            {
                yRot += 0.0025f;
            }

            float yawDelta   = 0.0f;
            float pitchDelta = 0.0f;

            // Move up or down using Q and Z.
            if ((di.currKeyboardState.IsPressed(SDI.Key.Q)) && (di.prevKeyboardState.IsPressed(SDI.Key.Q)))
            {
                //cam.ApplyZoom(0.005f);
                cam.MoveVertically(0.001f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.Z)) && (di.prevKeyboardState.IsPressed(SDI.Key.Z)))
            {
                //cam.ApplyZoom(-0.005f);
                cam.MoveVertically(-0.001f);
            }
            // Strafe left or right using A and D.
            if ((di.currKeyboardState.IsPressed(SDI.Key.A)) && (di.prevKeyboardState.IsPressed(SDI.Key.A)))
            {
                yawDelta = -0.001f;
                cam.Strafe(-0.001f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.D)) && (di.prevKeyboardState.IsPressed(SDI.Key.D)))
            {
                yawDelta = 0.001f;
                cam.Strafe(0.001f);
            }
            // Move forward or backward using W and S.
            if ((di.currKeyboardState.IsPressed(SDI.Key.W)) && (di.prevKeyboardState.IsPressed(SDI.Key.W)))
            {
                pitchDelta = -0.001f;
                cam.MoveForward(0.001f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.S)) && (di.prevKeyboardState.IsPressed(SDI.Key.S)))
            {
                pitchDelta = 0.001f;
                cam.MoveForward(-0.001f);
            }

            // Pitch the camera using I and K.
            if ((di.currKeyboardState.IsPressed(SDI.Key.I)) && (di.prevKeyboardState.IsPressed(SDI.Key.I)))
            {
                cam.Pitch(-0.001f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.K)) && (di.prevKeyboardState.IsPressed(SDI.Key.K)))
            {
                cam.Pitch(0.001f);
            }
            // Yaw the camera using J and L.
            if ((di.currKeyboardState.IsPressed(SDI.Key.J)) && (di.prevKeyboardState.IsPressed(SDI.Key.J)))
            {
                cam.Yaw(-0.001f);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.L)) && (di.prevKeyboardState.IsPressed(SDI.Key.L)))
            {
                cam.Yaw(0.001f);
            }

            //cam.ApplyRotation(yawDelta, pitchDelta);
            var trn = Matrix.Translation(cBufferData.lightDir.X, cBufferData.lightDir.Y, cBufferData.lightDir.Z);
            var rot = Matrix.RotationX(xRot) * Matrix.RotationY(yRot) * Matrix.RotationZ(zRot);

            cBufferData.world = rot * trn;
            var wvp = rot * trn * viewProj;

            wvp.Transpose();
            cBufferData.wvp = wvp;
            devCon.UpdateSubresource(ref cBufferData, cBuffer);
        }
コード例 #4
0
        // Rotate based on FPSCamera.
        public void Update(ref DXInput di, ref FPSCamera cam, ref RenderForm form)
        {
            float t = sw.ElapsedMilliseconds / 1000.0f;

            viewProj = Matrix.Multiply(cam.GetViewMatrix(), proj);

            // Left mouse button
            if ((di.currMouseState.Buttons[0] == true) && (di.prevMouseState.Buttons[0] == true))
            {
                xRot += 0.0025f;
            }
            // Middle mouse button
            else if ((di.currMouseState.Buttons[2] == true) && (di.prevMouseState.Buttons[2] == true))
            {
                zRot += 0.0025f;
            }
            // Right mouse button
            else if ((di.currMouseState.Buttons[1] == true) && (di.prevMouseState.Buttons[1] == true))
            {
                yRot += 0.0025f;
            }

            float yawDelta   = 0.0f;
            float pitchDelta = 0.0f;

            float moveFactorV    = 0.001f;
            float moveFactorH    = 0.001f;
            float pitchYawFactor = 0.00005f;

            // Move up or down using Q and Z.
            if ((di.currKeyboardState.IsPressed(SDI.Key.Q)) && (di.prevKeyboardState.IsPressed(SDI.Key.Q)))
            {
                //cam.ApplyZoom(0.005f);
                cam.MoveVertically(moveFactorV);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.Z)) && (di.prevKeyboardState.IsPressed(SDI.Key.Z)))
            {
                //cam.ApplyZoom(-0.005f);
                cam.MoveVertically(-moveFactorV);
            }
            // Strafe left or right using A and D.
            if ((di.currKeyboardState.IsPressed(SDI.Key.A)) && (di.prevKeyboardState.IsPressed(SDI.Key.A)))
            {
                yawDelta = -0.001f;
                cam.Strafe(-moveFactorH);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.D)) && (di.prevKeyboardState.IsPressed(SDI.Key.D)))
            {
                yawDelta = 0.001f;
                cam.Strafe(moveFactorH);
            }
            // Move forward or backward using W and S.
            if ((di.currKeyboardState.IsPressed(SDI.Key.W)) && (di.prevKeyboardState.IsPressed(SDI.Key.W)))
            {
                pitchDelta = -0.001f;
                cam.MoveForward(moveFactorH);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.S)) && (di.prevKeyboardState.IsPressed(SDI.Key.S)))
            {
                pitchDelta = 0.001f;
                cam.MoveForward(-moveFactorH);
            }

            // Pitch the camera using I and K.
            if ((di.currKeyboardState.IsPressed(SDI.Key.I)) && (di.prevKeyboardState.IsPressed(SDI.Key.I)))
            {
                cam.Pitch(-pitchYawFactor);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.K)) && (di.prevKeyboardState.IsPressed(SDI.Key.K)))
            {
                cam.Pitch(pitchYawFactor);
            }
            // Yaw the camera using J and L.
            if ((di.currKeyboardState.IsPressed(SDI.Key.J)) && (di.prevKeyboardState.IsPressed(SDI.Key.J)))
            {
                cam.Yaw(-pitchYawFactor);
            }
            else if ((di.currKeyboardState.IsPressed(SDI.Key.L)) && (di.prevKeyboardState.IsPressed(SDI.Key.L)))
            {
                cam.Yaw(pitchYawFactor);
            }

            //cam.ApplyRotation(yawDelta, pitchDelta);


            // Limit camera position.
            float camX    = cam.getCamX();
            float camY    = cam.getCamY();
            float camZ    = cam.getCamZ();
            int   updated = 0;

            int te_size = te.getTerrainSize();

            for (int i = 0; i < te_size; i++)
            {
                for (int j = 0; j < te_size; j++)
                {
                    if (((int)vt[te_size * i + j].Position.X == (int)camX) &&
                        ((int)vt[te_size * i + j].Position.Z == (int)camZ))
                    {
                        if (camY < vt[te_size * i + j].Position.Y)
                        {
                            cam.setCamY(vt[te_size * i + j].Position.Y + 0.5f);
                        }

                        updated = 1;
                        break;
                    }
                }

                if (updated == 1)
                {
                    break;
                }
            }

            viewProj = Matrix.Multiply(cam.GetViewMatrix(), proj);

            var rot = Matrix.RotationX(xRot) * Matrix.RotationY(yRot) * Matrix.RotationZ(zRot);

            cBufferData.world = rot;
            var wvp = viewProj;// * rot;

            wvp.Transpose();
            cBufferData.wvp         = wvp;
            cBufferData.view        = cam.GetViewMatrix();
            cBufferData.modelViewIT = Matrix.Transpose(Matrix.Invert(cBufferData.world));
            devCon.UpdateSubresource(ref cBufferData, cBuffer);

            // Get mouse coordinates
            float xc = di.mouseX;
            float yc = di.mouseY;
            float zc = di.mouseZ;

            // Get the system cursor position.
            System.Drawing.Point p = new System.Drawing.Point(Cursor.Position.X, Cursor.Position.Y);
            //xc = p.X;
            //yc = p.Y;

            xc = form.PointToClient(p).X;
            yc = form.PointToClient(p).Y;
            //xc = (2.0f * xc / formWidth) - 1.0f;
            //yc = ((2.0f * yc / formHeight) - 1.0f) * -1.0f;


            //int minCursorX = form.DesktopLocation.X;
            //int minCursorY = form.DesktopLocation.Y;
            //int maxCursorX = form.DesktopBounds.Right;
            //int maxCursorY = form.DesktopBounds.Bottom;

            /*if(xc < minCursorX) { xc = minCursorX; }
            *  if(yc < minCursorY) { yc = minCursorY; }
            *  if(xc > maxCursorX) { xc = maxCursorX; }
            *  if(yc > maxCursorY) { yc = maxCursorY; }*/

            //System.Console.WriteLine("{0} {1} {2}", xc, yc, zc);
            //System.Console.WriteLine("{0} {1} {2} {3}", minCursorX, minCursorY, maxCursorX, maxCursorY);

            //System.Console.WriteLine("{0} {1}", xc, yc);

            bool rp = rayPick(new Vector2(xc, yc), bb);

            if (rp == true)
            {
                cBufferData.lightCol2 = new Vector4(1.3f, 1.4f, 1.45f, 1.0f);
            }
            else
            {
                cBufferData.lightCol2 = new Vector4(0.13f, 0.14f, 0.145f, 1.0f);
            }

            devCon.UpdateSubresource(ref cBufferData, cBuffer);
        }