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; } } }
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; } } }
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; } }
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; } } }