C++ DirectX11鼠标控件

C++ DirectX11鼠标控件,c++,directx,C++,Directx,我在DirectX中有一个3d程序,我想让鼠标控制相机。问题是鼠标从屏幕上向右移动(在窗口模式下),然后相机不再转动。我尝试使用SetCusorPos在鼠标移动后将其锁定到位。这样我就可以得到一个dx,然后把鼠标放回屏幕中央。我最终得到了一个无尽的白色屏幕。这是到目前为止我的相机/鼠标移动代码。如果你需要更多的信息,尽管问 void PhysicsApp::OnMouseMove(WPARAM btnState, int x, int y) { // Make each pixel co

我在DirectX中有一个3d程序,我想让鼠标控制相机。问题是鼠标从屏幕上向右移动(在窗口模式下),然后相机不再转动。我尝试使用SetCusorPos在鼠标移动后将其锁定到位。这样我就可以得到一个dx,然后把鼠标放回屏幕中央。我最终得到了一个无尽的白色屏幕。这是到目前为止我的相机/鼠标移动代码。如果你需要更多的信息,尽管问

void PhysicsApp::OnMouseMove(WPARAM btnState, int x, int y)
{
    // Make each pixel correspond to a quarter of a degree.
    float dx = XMConvertToRadians(0.25f*static_cast<float>(x - mLastMousePos.x));
    float dy = XMConvertToRadians(0.25f*static_cast<float>(y - mLastMousePos.y));

    // Update angles based on input to orbit camera around box.
    mTheta += -dx;
    mPhi   += -dy;
    // Update players direction to always face forward
    playerRotation.y = -mTheta;

    // Restrict the angle mPhi.
    mPhi = MathHelper::Clamp(mPhi, 0.1f, MathHelper::Pi-0.1f);

    if( (btnState & MK_RBUTTON) != 0 )
    {
        // Make each pixel correspond to 0.2 unit in the scene.
        float dx = 0.05f*static_cast<float>(x - mLastMousePos.x);
        float dy = 0.05f*static_cast<float>(y - mLastMousePos.y);

        // Update the camera radius based on input.
        mRadius += dx - dy;

        // Restrict the radius.
        mRadius = MathHelper::Clamp(mRadius, 5.0f, 50.0f);
    }
    mLastMousePos.x = x;
    mLastMousePos.y = y;
}
void PhysicsApp::OnMouseMove(WPARAM btnState,int x,int y)
{
//使每个像素对应四分之一度。
float dx=xmconvertorradians(0.25f*静态_cast(x-mLastMousePos.x));
float dy=XMConvertToRadians(0.25f*静态_cast(y-mLastMousePos.y));
//根据输入更新角度,使摄影机环绕长方体旋转。
mTheta+=-dx;
mPhi+=-dy;
//更新球员方向,使其始终面向前方
playerRotation.y=-mTheta;
//限制角度mPhi。
mPhi=MathHelper::Clamp(mPhi,0.1f,MathHelper::Pi-0.1f);
如果((bnstate&MK_RBUTTON)!=0)
{
//使每个像素对应于场景中的0.2个单位。
浮动dx=0.05f*静态_型(x-mLastMousePos.x);
浮球dy=0.05f*静态铸型(y-mLastMousePos.y);
//根据输入更新相机半径。
mRadius+=dx-dy;
//限制半径。
mRadius=MathHelper::夹具(mRadius,5.0f,50.0f);
}
mLastMousePos.x=x;
mLastMousePos.y=y;
}

此代码只进行了一些计算,仅此而已-您希望得到什么结果?无论如何,根据您的问题描述,您需要捕获鼠标:。当鼠标离开窗口时,让应用程序窗口仍然接收鼠标消息是一个糟糕的设计。当鼠标进入窗口区域时,调用以接收鼠标输入,当鼠标离开窗口时,调用ReleaseCapture以停止鼠标输入。