平移我是新來的DirectX和Direct3D/2D等,只是當前運行是否繼續製作一臺機器,我們有一個CAD瀏覽器的實驗。2D相機在SharpDX
我使用從這裏Direct2dOnWPF控制,使我使用SharpDX顯示的Direct2D到WPF窗口。
目前我有控制的工作及其負載文件並顯示圖。
我現在已經創建了一個攝像頭和我已經實現縮放(在一定程度上),但我的問題是與平移。問題是,當平移時,我希望繪圖隨鼠標移動,但不是。小的運動有點類似,但更大的運動會導致繪圖移動到鼠標移動之外。幾乎就像我將鼠標移動到一個單一的移動中一樣,它移動得越快。
好一些代碼,所述Direct2DControl是基於圖像控制,所以我有機會獲得鼠標事件等。這裏是一些的代碼與鼠標事件和定時器控制。我嘗試了一個計時器來檢測鼠標何時停止,因爲我發現當鼠標沒有時平移不會停止。
// Timer to detect mouse stop
private Timer tmr;
public Direct2dControl()
{
//
// .... Init stuff
//
// Mouse panning
// get mouse position
MouseOrigin = CurrentMousePosition = new Point(0, 0);
tmr = new Timer { Interval = 50 };
tmr.Elapsed += Tmr_Elapsed;
}
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
if (!DragIsOn)
{
DragIsOn = true;
}
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
if (DragIsOn)
{
DragIsOn = false;
DragStarted = false;
MouseOrigin = CurrentMousePosition = e.GetPosition(this);
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (!DragIsOn) return;
MouseMoved = true;
if (!DragStarted)
{
DragStarted = true;
MouseOrigin = CurrentMousePosition = e.GetPosition(this);
tmr.Start();
}
else
{
CurrentMousePosition = e.GetPosition(this);
var x = (float)(MouseOrigin.X - CurrentMousePosition.X);
var y = (float) (MouseOrigin.Y - CurrentMousePosition.Y);
cam.MoveCamera(cam.ScreenToWorld(new Vector2(x, y)));
tmr.Stop();
tmr.Start();
}
}
private void Tmr_Elapsed(object sender, ElapsedEventArgs e)
{
MouseOrigin = CurrentMousePosition;
tmr.Stop();
MouseMoved = false;
}
以及通過移動位置在相機類中的平移。
public void MoveCamera(Vector2 cameraMovement)
{
Vector2 newPosition = Position + cameraMovement;
Position = newPosition;
}
public Matrix3x2 GetTransform3x2()
{
return TransformMatrix3x2;
}
private Matrix3x2 TransformMatrix3x2
{
get
{
return
Matrix3x2.Translation(new Vector2(-Position.X, -Position.Y)) *
Matrix3x2.Rotation(Rotation) *
Matrix3x2.Scaling(Zoom) *
Matrix3x2.Translation(new Vector2(Bounds.Width * 0.5f, Bounds.Height * 0.5f));
}
}
,並最終在開始時開始渲染我更新渲染目標變換
target.Transform = cam.GetTransform3x2();
感謝您的支持。平移速度現在似乎是正確的,但現在似乎存在與其移動方向有關的問題。如果我點擊並從中心拖到右下角,對象將移動到左上角。如果我然後停下來,然後單擊並拖動並向上移動鼠標,則對象將繼續在其原始路徑中移動到左上角,然後向下移動。如果我然後停下來,然後單擊並拖動以在屏幕上向左移動,則對象將返回到左上角。 – Gaz83
你的'cam'變量的類型是什麼? – user1610015
哦,類型凸輪只是我的相機類。 – Gaz83