Esempio n. 1
0
    private void UpdateMesh(OVROverlay.OverlayShape shape, Vector3 position, Quaternion rotation, Vector3 scale, Rect rect)
    {
        if (_MeshFilter)
        {
            if (_Mesh == null)
            {
                _Mesh = new Mesh()
                {
                    name = "Overlay"
                };
                _Mesh.hideFlags = HideFlags.DontSaveInBuild | HideFlags.DontSaveInEditor;
            }
            _Mesh.Clear();
            _Verts.Clear();
            _UV.Clear();
            _Tris.Clear();

            GenerateMesh(_Verts, _UV, _Tris, shape, position, rotation, scale, rect);

            _Mesh.SetVertices(_Verts);
            _Mesh.SetUVs(0, _UV);
            _Mesh.SetTriangles(_Tris, 0);
            _Mesh.UploadMeshData(false);

            _MeshFilter.sharedMesh = _Mesh;

            if (_MeshCollider)
            {
                _MeshCollider.sharedMesh = _Mesh;
            }
        }
    }
Esempio n. 2
0
    private void Update()
    {
        if (!_Awake)
        {
            Awake();
        }

        if (_Overlay)
        {
            OVROverlay.OverlayShape shape = _Overlay.currentOverlayShape;
            Vector3    position           = _CameraRoot ? (_Transform.position - _CameraRoot.position) : _Transform.position;
            Quaternion rotation           = _Transform.rotation;
            Vector3    scale     = _Transform.lossyScale;
            Rect       rectLeft  = _Overlay.overrideTextureRectMatrix ? _Overlay.destRectLeft : new Rect(0, 0, 1, 1);
            Rect       rectRight = _Overlay.overrideTextureRectMatrix ? _Overlay.destRectRight : new Rect(0, 0, 1, 1);

            if (_Mesh == null || _LastShape != shape || _LastPosition != position || _LastRotation != rotation || _LastScale != scale || _LastRectLeft != rectLeft || _LastRectRight != rectRight)
            {
                UpdateMesh(shape, position, rotation, scale, GetBoundingRect(rectLeft, rectRight));
                _LastShape     = shape;
                _LastPosition  = position;
                _LastRotation  = rotation;
                _LastScale     = scale;
                _LastRectLeft  = rectLeft;
                _LastRectRight = rectRight;
            }
        }
    }
Esempio n. 3
0
    public static void GenerateMesh(List <Vector3> verts, List <Vector2> uvs, List <int> tris, OVROverlay.OverlayShape shape, Vector3 position, Quaternion rotation, Vector3 scale, Rect rect)
    {
        switch (shape)
        {
        case OVROverlay.OverlayShape.Equirect:
            BuildSphere(verts, uvs, tris, position, rotation, scale, rect);
            break;

        case OVROverlay.OverlayShape.Cubemap:
        case OVROverlay.OverlayShape.OffcenterCubemap:
            BuildCube(verts, uvs, tris, position, rotation, scale);
            break;

        case OVROverlay.OverlayShape.Quad:
            BuildQuad(verts, uvs, tris, rect);
            break;

        case OVROverlay.OverlayShape.Cylinder:
            BuildHemicylinder(verts, uvs, tris, scale, rect);
            break;
        }
    }
Esempio n. 4
0
    private void Update()
    {
        if (!Application.isEditor)
        {
            return;
        }

        if (!_Awake)
        {
            Awake();
        }

        if (_Overlay)
        {
            OVROverlay.OverlayShape shape = _Overlay.currentOverlayShape;
            Vector3    position           = _CameraRoot ? (_Transform.position - _CameraRoot.position) : _Transform.position;
            Quaternion rotation           = _Transform.rotation;
            Vector3    scale         = _Transform.lossyScale;
            Rect       destRectLeft  = _Overlay.overrideTextureRectMatrix ? _Overlay.destRectLeft : new Rect(0, 0, 1, 1);
            Rect       destRectRight = _Overlay.overrideTextureRectMatrix ? _Overlay.destRectRight : new Rect(0, 0, 1, 1);
            Rect       srcRectLeft   = _Overlay.overrideTextureRectMatrix ? _Overlay.srcRectLeft : new Rect(0, 0, 1, 1);
            Texture    texture       = _Overlay.textures[0];

            // Re-generate the mesh if necessary
            if (_Mesh == null ||
                _LastShape != shape ||
                _LastPosition != position ||
                _LastRotation != rotation ||
                _LastScale != scale ||
                _LastDestRectLeft != destRectLeft ||
                _LastDestRectRight != destRectRight)
            {
                UpdateMesh(shape, position, rotation, scale, GetBoundingRect(destRectLeft, destRectRight));
                _LastShape         = shape;
                _LastPosition      = position;
                _LastRotation      = rotation;
                _LastScale         = scale;
                _LastDestRectLeft  = destRectLeft;
                _LastDestRectRight = destRectRight;
            }

            // Generate the material and update textures if necessary
            if (_MeshRenderer.sharedMaterial == null)
            {
                Material previewMat = new Material(Shader.Find("Unlit/Transparent"));
                _MeshRenderer.sharedMaterial = previewMat;
            }

            if (_MeshRenderer.sharedMaterial.mainTexture != texture && !_Overlay.isExternalSurface)
            {
                _MeshRenderer.sharedMaterial.mainTexture = texture;
            }

            if (_LastSrcRectLeft != srcRectLeft)
            {
                _MeshRenderer.sharedMaterial.mainTextureOffset = srcRectLeft.position;
                _MeshRenderer.sharedMaterial.mainTextureScale  = srcRectLeft.size;
                _LastSrcRectLeft = srcRectLeft;
            }
        }
    }