private void DrawScene(Rect _rect) { if (Event.current.type == EventType.Repaint) { m_renderer.BeginPreview(_rect, GUIStyle.none); m_renderer.DrawMesh(m_context.PreviewMesh, m_meshTransform, m_meshRenderer.sharedMaterial, 0); m_renderer.camera.Render(); NPipeGL.PostRenderBegin(m_renderer.camera.projectionMatrix, m_renderer.camera.worldToCameraMatrix, s_materialHandles); Transform t = m_context.PreviewObject.transform; Bounds box = m_meshFilter.sharedMesh.bounds; Vector3 extent = box.extents; NPipeGL.DrawParallelepiped( t.position - new Vector3(extent.x, extent.y, extent.z), new Vector3(box.size.x, 0, 0), new Vector3(0, box.size.y, 0), new Vector3(0, 0, box.size.z), s_colorBox); NPVoxMeshData[] voxMeshData = m_context.MeshOutput.GetVoxMeshData(); Vector3 voxSize = m_context.MeshOutput.VoxelSize; Vector3 voxExtent = voxSize * 0.5f; Color cOutline = new Color(0.3f, 0.3f, 0.3f); Color cNormals = new Color(0.4f, 0.4f, 0.4f); Vector3 v1 = new Vector3(voxSize.x, 0, 0); Vector3 v2 = new Vector3(0, voxSize.y, 0); Vector3 v3 = new Vector3(0, 0, voxSize.z); Vector3[] normals = m_context.PreviewMesh.normals; foreach (NPVoxMeshData vox in voxMeshData) { if (!vox.isHidden) { if (m_previewGUIDrawOutlines) { Vector3 voxPosition = new Vector3(vox.voxelCenter.x, vox.voxelCenter.y, vox.voxelCenter.z); NPipeGL.DrawParallelepiped(voxPosition - voxExtent, v1, v2, v3, cOutline); } if (m_previewGUIDrawNormals) { NPipeGL.DrawLine(vox.voxelCenter, vox.voxelCenter + normals[vox.vertexIndexOffsetBegin] * voxSize.x, cNormals); } } } DrawSceneInternal(_rect); NPipeGL.PostRenderEnd(); GUI.DrawTexture(_rect, m_renderer.EndPreview()); } }
protected override void DrawSceneInternal(Rect _rect) { if (m_context.ViewedProcessor.IsOutputValid()) { NPVoxNormalProcessor_UserOverride processor = (NPVoxNormalProcessor_UserOverride)m_context.ViewedProcessor; Vector3 voxSize = m_context.MeshOutput.VoxelSize; Vector3 voxExtent = voxSize * 0.5f; Vector3 v1 = new Vector3(voxSize.x, 0, 0); Vector3 v2 = new Vector3(0, voxSize.y, 0); Vector3 v3 = new Vector3(0, 0, voxSize.z); NPVoxMeshData[] voxMeshData = m_context.MeshOutput.GetVoxMeshData(); foreach (NPVoxMeshData vox in voxMeshData) { if (!vox.isHidden) { Vector3 voxPosition = new Vector3(vox.voxelCenter.x, vox.voxelCenter.y, vox.voxelCenter.z); if (m_previewHighlightOverrides && processor.m_overrideNormalsRT.ContainsKey(vox.voxCoord)) { NPipeGL.DrawParallelepiped(voxPosition - voxExtent, v1, v2, v3, new Color(0.5f, 0.0f, 0.0f)); } sbyte selection = GetSelection(vox.voxCoord); if (selection != UNSELECTED) { NPipeGL.DrawParallelepiped(voxPosition - voxExtent, v1, v2, v3, selection == SELECTED_TARGET ? Color.red : Color.green); } if (vox.voxCoord.Equals(m_lastSelected)) { m_lastSelectedData = vox; } } } } }