浏览代码

Add rotation to inspector mesh preview

/main
Jens Holm 7 年前
当前提交
cbc52afe
共有 3 个文件被更改,包括 35 次插入5 次删除
  1. 18
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Inspector/GraphInspectorView.cs
  2. 19
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Manipulators/Draggable.cs
  3. 3
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/PreviewManager.cs

18
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Inspector/GraphInspectorView.cs


List<INode> m_SelectedNodes;
Vector2 m_PreviewScrollPosition;
public Action onUpdateAssetClick { get; set; }
public Action onShowInProjectClick { get; set; }

}
bottomContainer.Add(propertiesContainer);
m_PreviewTextureView = new PreviewTextureView {name = "preview", image = Texture2D.blackTexture};
m_PreviewTextureView = new PreviewTextureView { name = "preview", image = Texture2D.blackTexture };
m_PreviewTextureView.AddManipulator(new Draggable(OnMouseDrag, true));
m_PreviewScrollPosition = new Vector2(0f, 0f);
m_PreviewMeshPicker = new ObjectField() { objectType = typeof(Mesh) };
m_PreviewMeshPicker.OnValueChanged(OnPreviewMeshChanged);

MasterNode masterNode
{
get { return m_PreviewRenderHandle.shaderData.node as MasterNode; }
}
void OnMouseDrag(Vector2 deltaMouse)
{
Vector2 previewSize = m_PreviewTextureView.contentRect.size;
m_PreviewScrollPosition -= deltaMouse * (Event.current.shift ? 3f : 1f) / Mathf.Min(previewSize.x, previewSize.y) * 140f;
m_PreviewScrollPosition.y = Mathf.Clamp(m_PreviewScrollPosition.y, -90f, 90f);
Quaternion previewRotation = Quaternion.Euler(m_PreviewScrollPosition.y, 0, 0) * Quaternion.Euler(0, m_PreviewScrollPosition.x, 0);
m_Graph.previewRotation = previewRotation;
}
void OnAddProperty()

19
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Manipulators/Draggable.cs


bool m_Active;
public Draggable(Action<Vector2> handler)
bool m_OutputDeltaMovement;
Vector2 m_PreviousMousePosition;
public Draggable(Action<Vector2> handler, bool outputDeltaMovement = false)
m_OutputDeltaMovement = outputDeltaMovement;
activators.Add(new ManipulatorActivationFilter()
{
button = MouseButton.LeftMouse

void OnMouseDown(MouseDownEvent evt)
{
m_PreviousMousePosition = evt.localMousePosition;
target.TakeMouseCapture();
m_Active = true;
evt.StopPropagation();

{
if (m_Active)
{
m_Handler(evt.localMousePosition);
if (m_OutputDeltaMovement)
{
Vector2 deltaMouse = evt.localMousePosition - m_PreviousMousePosition;
m_PreviousMousePosition = evt.localMousePosition;
m_Handler(deltaMouse);
}
else
{
m_Handler(evt.localMousePosition);
}
}
}

3
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/PreviewManager.cs


GL.Clear(true, true, Color.black);
Graphics.Blit(Texture2D.whiteTexture, renderData.renderTexture, m_SceneResources.checkerboardMaterial);
var mesh = (renderData == masterRenderData && m_Graph.previewMesh) ? m_Graph.previewMesh : m_SceneResources.sphere;
Graphics.DrawMesh(mesh, Matrix4x4.TRS(-mesh.bounds.center, Quaternion.identity, Vector3.one), m_PreviewMaterial, 1, m_SceneResources.camera, 0, m_PreviewPropertyBlock, ShadowCastingMode.Off, false, null, false);
Quaternion rotation = (renderData == masterRenderData) ? m_Graph.previewRotation : Quaternion.identity;
Graphics.DrawMesh(mesh, Matrix4x4.TRS(-mesh.bounds.center, rotation, Vector3.one), m_PreviewMaterial, 1, m_SceneResources.camera, 0, m_PreviewPropertyBlock, ShadowCastingMode.Off, false, null, false);
var previousUseSRP = Unsupported.useScriptableRenderPipeline;
Unsupported.useScriptableRenderPipeline = renderData.shaderData.node is IMasterNode;
m_SceneResources.camera.Render();

正在加载...
取消
保存