Esempio n. 1
0
        static void Main(string[] args)
        {
            uint hHD = HDAPI.hdInitDevice(null);

            Console.WriteLine(HLAPI.hlGetString(HLGetStringParameters.HL_VENDOR));

            HDAPI.hdMakeCurrentDevice(hHD);

            IntPtr hHLRC = HLAPI.hlCreateContext(hHD);

            HLAPI.hlMakeCurrent(hHLRC);
            //禁用GL
            HLAPI.hlDisable(HLCapabilityParameters.HL_USE_GL_MODELVIEW);

            uint spring = HLAPI.hlGenEffects(1);

            Console.WriteLine("spring:{0}", spring);
            //添加回调处理按扭按下
            HLAPI.hlAddEventCallback(HLCallbackEvents.HL_EVENT_1BUTTONDOWN, HLAPI.HL_OBJECT_ANY, HLCallbackThreads.HL_CLIENT_THREAD, ButtonCB, new IntPtr(spring));
            HLAPI.hlAddEventCallback(HLCallbackEvents.HL_EVENT_1BUTTONUP, HLAPI.HL_OBJECT_ANY, HLCallbackThreads.HL_CLIENT_THREAD, ButtonCB, new IntPtr(spring));
            HLAPI.hlAddEventCallback(HLCallbackEvents.HL_EVENT_2BUTTONDOWN, HLAPI.HL_OBJECT_ANY, HLCallbackThreads.HL_CLIENT_THREAD, ButtonCB, new IntPtr(0));

            uint friction = HLAPI.hlGenEffects(1);

            HLAPI.hlBeginFrame();
            HLAPI.hlEffectd(HLEffectParams.HL_EFFECT_PROPERTY_GAIN, 0.2);
            HLAPI.hlEffectd(HLEffectParams.HL_EFFECT_PROPERTY_MAGNITUDE, 0.5);
            HLAPI.hlStartEffect(HLStartEffectTypes.HL_EFFECT_FRICTION, friction);
            HLAPI.hlEndFrame();

            HLError error;

            while (true)
            {
                HLAPI.hlBeginFrame();
                //轮询事件。请注意,客户端线程事件回调是从这里的一个框架内分派的,因此我们可以安全地直接启动/停止事件回调的效果
                HLAPI.hlCheckEvents();
                HLAPI.hlEndFrame();

                error = HLAPI.hlGetError();
                if (error.CheckedError())
                {
                    Console.WriteLine("HL Error:{0}", error.GetErrorCodeString());
                }
            }

            //Stop the friction effect.
            HLAPI.hlBeginFrame();
            HLAPI.hlStopEffect(friction);
            HLAPI.hlEndFrame();

            HLAPI.hlDeleteEffects(friction, 1);
            HLAPI.hlDeleteEffects(spring, 1);

            HLAPI.hlDeleteContext(hHLRC);
            HDAPI.hdDisableDevice(hHD);

            Console.ReadKey();
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            #region

            /*
             * hHD = HDAPI.hdInitDevice(null);
             * Console.WriteLine("Test..{0}", HDAPI.hdGetString(HDGetStringParameters.HD_DEVICE_SERIAL_NUMBER));
             * Console.WriteLine("Test..{0}", Marshal.PtrToStringAnsi(HDAPI.hdGetString(HDGetStringParameters.HD_DEVICE_MODEL_TYPE)));
             *
             * IntPtr hHLRC = HLAPI.hlContextDevice(hHD);
             * HLAPI.hlEnable(HLCapabilityParameters.HL_PROXY_RESOLUTION);
             * error = HLAPI.hlGetError();
             * Console.WriteLine("ErrorCode:{0}", error.GetErrorCodeStr());
             *
             * String ver = "HL_VENDOR";
             * IntPtr ps = HLAPI.GetVariables(ver);    // Marshal.StringToHGlobalAnsi(ver);
             *
             * IntPtr ptr = HLAPI.hlGetString(ref ps);
             * if(ptr == IntPtr.Zero)
             *  Console.WriteLine("Zero IntPtr..");
             *
             * Console.WriteLine("BOOl::{0}", ptr);
             * Console.WriteLine(Marshal.PtrToStringAnsi(ptr));
             *
             * error = HLAPI.hlGetError();
             * Console.WriteLine("ErrorCode:{0}", error.GetErrorCodeStr());
             *
             * HDAPI.hdDisableDevice(hHD);
             */
            #endregion

            //IntPtr ptr = HLAPI.GetVariables("HL_VENDOR");
            //IntPtr p2 = Marshal.ReadIntPtr(ptr);        //这才是我要的常数
            //Console.WriteLine(Marshal.PtrToStringAnsi(HL_VENDOR));


            //IntPtr tr = HLAPI._hlGetString(p2);
            //IntPtr tr = HLAPI._hlGetString(HL_VENDOR);
            //Console.WriteLine(Marshal.PtrToStringAnsi(tr));


            Console.WriteLine(HLAPI.hlGetString(HLGetStringParameters.HL_VERSION));

            Console.ReadKey();
        }
Esempio n. 3
0
        static void ButtonCB(String evt, uint obj, String thread, IntPtr cache, IntPtr pUserData)
        {
            uint             spring = (uint)pUserData;
            HLCallbackEvents cEvent = (HLCallbackEvents)Enum.Parse(typeof(HLCallbackEvents), evt);

            if (cEvent == HLCallbackEvents.HL_EVENT_1BUTTONDOWN)
            {
                double[] anchor = new double[3];
                HLAPI.hlCacheGetDoublev(cache, HLCacheGetParameters.HL_PROXY_POSITION, anchor);

                HLAPI.hlEffectd(HLEffectParams.HL_EFFECT_PROPERTY_GAIN, 0.8);
                HLAPI.hlEffectd(HLEffectParams.HL_EFFECT_PROPERTY_MAGNITUDE, 1.0);
                HLAPI.hlEffectdv(HLEffectParams.HL_EFFECT_PROPERTY_POSITION, anchor);
                HLAPI.hlStartEffect(HLStartEffectTypes.HL_EFFECT_SPRING, spring);     //弹力
                //HLAPI.hlStartEffect(HLStartEffectTypes.HL_EFFECT_FRICTION, friction);     //摩擦力
                //HLAPI.hlStartEffect(HLStartEffectTypes.HL_EFFECT_VISCOUS, viscous);     //粘滞效果
            }
            else if (cEvent == HLCallbackEvents.HL_EVENT_1BUTTONUP)
            {
                HLAPI.hlStopEffect(spring);
            }
        }
Esempio n. 4
0
        static void ButtonCB(String evt, uint obj, String thread, IntPtr cache, IntPtr pUserData)
        {
            //Console.WriteLine(Marshal.PtrToStringAnsi(evt));
            Console.WriteLine("{0}  {1}  {2}", obj, (uint)pUserData, evt);
            Console.WriteLine("{0}  {1}", evt, thread);

            uint              spring    = (uint)pUserData;
            HLCallbackEvents  cb_event  = (HLCallbackEvents)Enum.Parse(typeof(HLCallbackEvents), evt);
            HLCallbackThreads cb_thread = (HLCallbackThreads)Enum.Parse(typeof(HLCallbackThreads), thread);

            if (cb_event == HLCallbackEvents.HL_EVENT_1BUTTONDOWN)
            {
                double[] anchor = new double[3];
                HLAPI.hlCacheGetDoublev(cache, HLCacheGetParameters.HL_PROXY_POSITION, anchor);

                HLAPI.hlEffectd(HLEffectParams.HL_EFFECT_PROPERTY_GAIN, 0.8);
                HLAPI.hlEffectd(HLEffectParams.HL_EFFECT_PROPERTY_MAGNITUDE, 1.0);
                HLAPI.hlEffectdv(HLEffectParams.HL_EFFECT_PROPERTY_POSITION, anchor);
                HLAPI.hlStartEffect(HLStartEffectTypes.HL_EFFECT_SPRING, spring);
            }
            else if (cb_event == HLCallbackEvents.HL_EVENT_1BUTTONUP)
            {
                HLAPI.hlStopEffect(spring);
            }
            else if (cb_event == HLCallbackEvents.HL_EVENT_2BUTTONDOWN)
            {
                double[] direction = new double[3] {
                    0.0, 0.0, 1.0
                };
                double duration = 100; //持续 100ms

                //通过在短时间内指挥具有方向和大小的力来触发脉冲。
                HLAPI.hlEffectd(HLEffectParams.HL_EFFECT_PROPERTY_DURATION, duration);
                HLAPI.hlEffectd(HLEffectParams.HL_EFFECT_PROPERTY_MAGNITUDE, 0.8);
                HLAPI.hlEffectdv(HLEffectParams.HL_EFFECT_PROPERTY_DIRECTION, direction);
                HLAPI.hlTriggerEffect(HLTriggerEffectTypes.HL_EFFECT_CONSTANT);
            }
        }
Esempio n. 5
0
        static void Main(string[] args)
        {
            uint        hHD   = HDAPI.hdInitDevice(null);
            HDErrorInfo error = HDAPI.hdGetError();

            if (error.CheckedError())
            {
                Console.WriteLine("Initialize Device Failed.");
                Console.ReadKey();
                return;
            }

            HDAPI.hdMakeCurrentDevice(hHD);
            IntPtr hHLRC = HLAPI.hlCreateContext(hHD);

            HLAPI.hlMakeCurrent(hHLRC);

            HLAPI.hlDisable(HLCapabilityParameters.HL_USE_GL_MODELVIEW);
            uint   spring = HLAPI.hlGenEffects(1);
            IntPtr ptr    = new IntPtr(spring);

            HLAPI.hlAddEventCallback(HLCallbackEvents.HL_EVENT_1BUTTONDOWN, HLAPI.HL_OBJECT_ANY, HLCallbackThreads.HL_CLIENT_THREAD, ButtonCB, ptr);
            HLAPI.hlAddEventCallback(HLCallbackEvents.HL_EVENT_1BUTTONUP, HLAPI.HL_OBJECT_ANY, HLCallbackThreads.HL_CLIENT_THREAD, ButtonCB, ptr);

            while (true)
            {
                HLAPI.hlBeginFrame();
                //轮询事件。请注意,客户端线程事件回调是从这里的一个框架内分派的,因此我们可以安全地直接启动/停止事件回调的效果。
                HLAPI.hlCheckEvents();
                HLAPI.hlEndFrame();
            }

            HLAPI.hlDeleteEffects(spring, 1);
            HLAPI.hlDeleteContext(hHLRC);
            HDAPI.hdDisableDevice(hHD);
        }