Merge branch 'stefnotch-fix-asset-viewports'
This commit is contained in:
@@ -32,9 +32,9 @@ namespace FlaxEditor.Viewport.Cameras
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="objectBounds">The target object bounds.</param>
|
/// <param name="objectBounds">The target object bounds.</param>
|
||||||
/// <param name="marginDistanceScale">The margin distance scale of the orbit radius.</param>
|
/// <param name="marginDistanceScale">The margin distance scale of the orbit radius.</param>
|
||||||
public void SerArcBallView(BoundingBox objectBounds, float marginDistanceScale = 2.0f)
|
public void SetArcBallView(BoundingBox objectBounds, float marginDistanceScale = 2.0f)
|
||||||
{
|
{
|
||||||
SerArcBallView(BoundingSphere.FromBox(objectBounds), marginDistanceScale);
|
SetArcBallView(BoundingSphere.FromBox(objectBounds), marginDistanceScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -42,18 +42,18 @@ namespace FlaxEditor.Viewport.Cameras
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="objectBounds">The target object bounds.</param>
|
/// <param name="objectBounds">The target object bounds.</param>
|
||||||
/// <param name="marginDistanceScale">The margin distance scale of the orbit radius.</param>
|
/// <param name="marginDistanceScale">The margin distance scale of the orbit radius.</param>
|
||||||
public void SerArcBallView(BoundingSphere objectBounds, float marginDistanceScale = 2.0f)
|
public void SetArcBallView(BoundingSphere objectBounds, float marginDistanceScale = 2.0f)
|
||||||
{
|
{
|
||||||
SerArcBallView(new Quaternion(-0.08f, -0.92f, 0.31f, -0.23f), objectBounds.Center, objectBounds.Radius * marginDistanceScale);
|
SetArcBallView(new Quaternion(-0.08f, -0.92f, 0.31f, -0.23f), objectBounds.Center, objectBounds.Radius * marginDistanceScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets view orientation and position to match the arc ball camera style view for the given orbit radius.
|
/// Sets view orientation and position to match the arc ball camera style view for the given orbit radius.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="orbitRadius">The orbit radius.</param>
|
/// <param name="orbitRadius">The orbit radius.</param>
|
||||||
public void SerArcBallView(float orbitRadius)
|
public void SetArcBallView(float orbitRadius)
|
||||||
{
|
{
|
||||||
SerArcBallView(new Quaternion(-0.08f, -0.92f, 0.31f, -0.23f), Vector3.Zero, orbitRadius);
|
SetArcBallView(new Quaternion(-0.08f, -0.92f, 0.31f, -0.23f), Vector3.Zero, orbitRadius);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -62,7 +62,7 @@ namespace FlaxEditor.Viewport.Cameras
|
|||||||
/// <param name="orientation">The view rotation.</param>
|
/// <param name="orientation">The view rotation.</param>
|
||||||
/// <param name="orbitCenter">The orbit center location.</param>
|
/// <param name="orbitCenter">The orbit center location.</param>
|
||||||
/// <param name="orbitRadius">The orbit radius.</param>
|
/// <param name="orbitRadius">The orbit radius.</param>
|
||||||
public void SerArcBallView(Quaternion orientation, Vector3 orbitCenter, float orbitRadius)
|
public void SetArcBallView(Quaternion orientation, Vector3 orbitCenter, float orbitRadius)
|
||||||
{
|
{
|
||||||
// Rotate
|
// Rotate
|
||||||
Viewport.ViewOrientation = orientation;
|
Viewport.ViewOrientation = orientation;
|
||||||
|
|||||||
@@ -138,9 +138,7 @@ namespace FlaxEditor.Viewport
|
|||||||
|
|
||||||
private bool _isControllingMouse;
|
private bool _isControllingMouse;
|
||||||
private int _deltaFilteringStep;
|
private int _deltaFilteringStep;
|
||||||
private Vector2 _startPosMiddle;
|
private Vector2 _startPos;
|
||||||
private Vector2 _startPosRight;
|
|
||||||
private Vector2 _startPosLeft;
|
|
||||||
private Vector2 _mouseDeltaRightLast;
|
private Vector2 _mouseDeltaRightLast;
|
||||||
private Vector2[] _deltaFilteringBuffer = new Vector2[FpsCameraFilteringFrames];
|
private Vector2[] _deltaFilteringBuffer = new Vector2[FpsCameraFilteringFrames];
|
||||||
|
|
||||||
@@ -850,7 +848,7 @@ namespace FlaxEditor.Viewport
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual void OnLeftMouseButtonDown()
|
protected virtual void OnLeftMouseButtonDown()
|
||||||
{
|
{
|
||||||
_startPosLeft = _viewMousePos;
|
_startPos = _viewMousePos;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -865,7 +863,7 @@ namespace FlaxEditor.Viewport
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual void OnRightMouseButtonDown()
|
protected virtual void OnRightMouseButtonDown()
|
||||||
{
|
{
|
||||||
_startPosRight = _viewMousePos;
|
_startPos = _viewMousePos;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -880,7 +878,7 @@ namespace FlaxEditor.Viewport
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual void OnMiddleMouseButtonDown()
|
protected virtual void OnMiddleMouseButtonDown()
|
||||||
{
|
{
|
||||||
_startPosMiddle = _viewMousePos;
|
_startPos = _viewMousePos;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1051,7 +1049,13 @@ namespace FlaxEditor.Viewport
|
|||||||
moveDelta *= 0.3f;
|
moveDelta *= 0.3f;
|
||||||
|
|
||||||
// Calculate smooth mouse delta not dependant on viewport size
|
// Calculate smooth mouse delta not dependant on viewport size
|
||||||
Vector2 offset = _viewMousePos - (_input.IsMouseMiddleDown ? _startPosMiddle : _startPosRight);
|
|
||||||
|
Vector2 offset = _viewMousePos - _startPos;
|
||||||
|
if (_input.IsZooming && !_input.IsMouseRightDown && !_input.IsMouseLeftDown && !_input.IsMouseMiddleDown)
|
||||||
|
{
|
||||||
|
offset = Vector2.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
offset.X = offset.X > 0 ? Mathf.Floor(offset.X) : Mathf.Ceil(offset.X);
|
offset.X = offset.X > 0 ? Mathf.Floor(offset.X) : Mathf.Ceil(offset.X);
|
||||||
offset.Y = offset.Y > 0 ? Mathf.Floor(offset.Y) : Mathf.Ceil(offset.Y);
|
offset.Y = offset.Y > 0 ? Mathf.Floor(offset.Y) : Mathf.Ceil(offset.Y);
|
||||||
_mouseDeltaRight = offset / size;
|
_mouseDeltaRight = offset / size;
|
||||||
@@ -1093,7 +1097,7 @@ namespace FlaxEditor.Viewport
|
|||||||
// Move mouse back to the root position
|
// Move mouse back to the root position
|
||||||
if (centerMouse && (_input.IsMouseRightDown || _input.IsMouseLeftDown || _input.IsMouseMiddleDown))
|
if (centerMouse && (_input.IsMouseRightDown || _input.IsMouseLeftDown || _input.IsMouseMiddleDown))
|
||||||
{
|
{
|
||||||
Vector2 center = PointToWindow(_input.IsMouseMiddleDown ? _startPosMiddle : _startPosRight);
|
Vector2 center = PointToWindow(_startPos);
|
||||||
win.MousePosition = center;
|
win.MousePosition = center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1139,11 +1143,11 @@ namespace FlaxEditor.Viewport
|
|||||||
if (_input.IsMouseLeftDown)
|
if (_input.IsMouseLeftDown)
|
||||||
{
|
{
|
||||||
// Calculate smooth mouse delta not dependant on viewport size
|
// Calculate smooth mouse delta not dependant on viewport size
|
||||||
Vector2 offset = _viewMousePos - _startPosLeft;
|
Vector2 offset = _viewMousePos - _startPos;
|
||||||
offset.X = offset.X > 0 ? Mathf.Floor(offset.X) : Mathf.Ceil(offset.X);
|
offset.X = offset.X > 0 ? Mathf.Floor(offset.X) : Mathf.Ceil(offset.X);
|
||||||
offset.Y = offset.Y > 0 ? Mathf.Floor(offset.Y) : Mathf.Ceil(offset.Y);
|
offset.Y = offset.Y > 0 ? Mathf.Floor(offset.Y) : Mathf.Ceil(offset.Y);
|
||||||
_mouseDeltaLeft = offset / size;
|
_mouseDeltaLeft = offset / size;
|
||||||
_startPosLeft = _viewMousePos;
|
_startPos = _viewMousePos;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ namespace FlaxEditor.Viewport.Previews
|
|||||||
var orbitRadius = 200.0f;
|
var orbitRadius = 200.0f;
|
||||||
if (camera is ArcBallCamera arcBallCamera)
|
if (camera is ArcBallCamera arcBallCamera)
|
||||||
orbitRadius = arcBallCamera.OrbitRadius;
|
orbitRadius = arcBallCamera.OrbitRadius;
|
||||||
camera.SerArcBallView(new Quaternion(-0.08f, -0.92f, 0.31f, -0.23f), Vector3.Zero, orbitRadius);
|
camera.SetArcBallView(new Quaternion(-0.08f, -0.92f, 0.31f, -0.23f), Vector3.Zero, orbitRadius);
|
||||||
|
|
||||||
if (useWidgets)
|
if (useWidgets)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -159,13 +159,14 @@ namespace FlaxEditor.Viewport.Previews
|
|||||||
float prevScale = _viewScale;
|
float prevScale = _viewScale;
|
||||||
_viewScale = Mathf.Clamp(_viewScale + delta * 0.24f, 0.001f, 20.0f);
|
_viewScale = Mathf.Clamp(_viewScale + delta * 0.24f, 0.001f, 20.0f);
|
||||||
|
|
||||||
// Move view to make use of the control much more soother
|
// Compensate for the Rectangle.MakeScaled
|
||||||
//float coeff = (prevScale + (_viewScale - prevScale)) / prevScale;
|
Vector2 sizeDelta = (_viewScale - prevScale) * _textureRect.Size * 0.5f;
|
||||||
//_viewPos += (location * coeff - location) / _viewScale;
|
|
||||||
//_viewPos += location / _viewScale;
|
|
||||||
Vector2 sizeDelta = (_viewScale - prevScale) * _textureRect.Size;
|
|
||||||
_viewPos += sizeDelta * 0.5f;
|
_viewPos += sizeDelta * 0.5f;
|
||||||
|
|
||||||
|
// Move to zoom position
|
||||||
|
Vector2 locationOnTexture = (location - _textureRect.Location) / _textureRect.Size;
|
||||||
|
_viewPos -= sizeDelta * locationOnTexture;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1004,7 +1004,7 @@ namespace FlaxEditor.Windows.Assets
|
|||||||
protected override void OnAssetLoaded()
|
protected override void OnAssetLoaded()
|
||||||
{
|
{
|
||||||
_refreshOnLODsLoaded = true;
|
_refreshOnLODsLoaded = true;
|
||||||
_preview.ViewportCamera.SerArcBallView(Asset.GetBox());
|
_preview.ViewportCamera.SetArcBallView(Asset.GetBox());
|
||||||
UpdateEffectsOnAsset();
|
UpdateEffectsOnAsset();
|
||||||
|
|
||||||
// TODO: disable streaming for this model
|
// TODO: disable streaming for this model
|
||||||
|
|||||||
@@ -1097,7 +1097,7 @@ namespace FlaxEditor.Windows.Assets
|
|||||||
protected override void OnAssetLoaded()
|
protected override void OnAssetLoaded()
|
||||||
{
|
{
|
||||||
_refreshOnLODsLoaded = true;
|
_refreshOnLODsLoaded = true;
|
||||||
_preview.ViewportCamera.SerArcBallView(Asset.GetBox());
|
_preview.ViewportCamera.SetArcBallView(Asset.GetBox());
|
||||||
UpdateEffectsOnAsset();
|
UpdateEffectsOnAsset();
|
||||||
|
|
||||||
// TODO: disable streaming for this model
|
// TODO: disable streaming for this model
|
||||||
|
|||||||
Reference in New Issue
Block a user