Esempio n. 1
0
    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());
        }
    }
Esempio n. 2
0
    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;
                    }
                }
            }
        }
    }