diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab similarity index 87% rename from Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab rename to Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab index ae0f09c..2f3b99b 100644 Binary files a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab and b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab differ diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab.meta b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab.meta similarity index 100% rename from Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab.meta rename to Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab.meta diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab new file mode 100644 index 0000000..6d2132f Binary files /dev/null and b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab differ diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab.meta b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab.meta new file mode 100644 index 0000000..2a70831 --- /dev/null +++ b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 42d6b6dbae38a384e882c2c907915139 +timeCreated: 1478889784 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Examples/Scenes/Multiple Monitors Roundly.unity b/Assets/uDesktopDuplication/Examples/Scenes/Multiple Monitors Roundly.unity index c92a21a..5860a49 100644 Binary files a/Assets/uDesktopDuplication/Examples/Scenes/Multiple Monitors Roundly.unity and b/Assets/uDesktopDuplication/Examples/Scenes/Multiple Monitors Roundly.unity differ diff --git a/Assets/uDesktopDuplication/Examples/Scenes/Primary Monitor.unity b/Assets/uDesktopDuplication/Examples/Scenes/Primary Monitor.unity index 061c591..3b7500d 100644 Binary files a/Assets/uDesktopDuplication/Examples/Scenes/Primary Monitor.unity and b/Assets/uDesktopDuplication/Examples/Scenes/Primary Monitor.unity differ diff --git a/Assets/uDesktopDuplication/Examples/Scenes/Zoom.unity b/Assets/uDesktopDuplication/Examples/Scenes/Zoom.unity index 3883cf7..4b8932d 100644 Binary files a/Assets/uDesktopDuplication/Examples/Scenes/Zoom.unity and b/Assets/uDesktopDuplication/Examples/Scenes/Zoom.unity differ diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs index 9a3bba5..eee40e5 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs @@ -9,6 +9,10 @@ public class MultipleMonitorCreator : MonoBehaviour bool hasMonitorUnsupportStateChecked = false; float removeWaitTimer_ = 0f; + public enum MeshForwardDirection { Y, Z } + [Tooltip("Please specify the upper vector direction of the mesh (e.g. Plane's upper direction is Y.)")] + public MeshForwardDirection meshForwardDirection = MeshForwardDirection.Z; + public class MonitorInfo { public GameObject gameObject { get; set; } @@ -88,7 +92,11 @@ public class MultipleMonitorCreator : MonoBehaviour var monitor = texture.monitor; // Set width / height - go.transform.localScale = new Vector3(monitor.widthMeter, go.transform.localScale.y, monitor.heightMeter); + if (meshForwardDirection == MeshForwardDirection.Y) { + go.transform.localScale = new Vector3(monitor.widthMeter, go.transform.localScale.y, monitor.heightMeter); + } else { + go.transform.localScale = new Vector3(monitor.widthMeter, monitor.heightMeter, go.transform.localScale.z); + } // Set parent as this object go.transform.SetParent(transform); diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs index a45abf8..d28b0c1 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs @@ -36,7 +36,11 @@ public class MultipleMonitorRoundLayouter : MultipleMonitorLayouter uddTex.transform.localRotation = Quaternion.AngleAxis(angle * Mathf.Rad2Deg, Vector3.up) * info.originalRotation; angle += (width * 0.5f + margin) / radius; - uddTex.bend = uDesktopDuplication.Texture.Bend.Y; + if (creator_.meshForwardDirection == MultipleMonitorCreator.MeshForwardDirection.Y) { + uddTex.bend = uDesktopDuplication.Texture.Bend.Y; + } else { + uddTex.bend = uDesktopDuplication.Texture.Bend.Z; + } uddTex.radius = radius; uddTex.width = uddTex.monitor.widthMeter; } diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Standard.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Standard.mat index 29bdade..1a5df84 100644 Binary files a/Assets/uDesktopDuplication/Materials/uDD_Screen_Standard.mat and b/Assets/uDesktopDuplication/Materials/uDD_Screen_Standard.mat differ diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit.mat index d1733a2..79bce7a 100644 Binary files a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit.mat and b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit.mat differ diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_BlackMask.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_BlackMask.mat index 12bc14e..021110e 100644 Binary files a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_BlackMask.mat and b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_BlackMask.mat differ diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Transparent.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Transparent.mat index d07230f..e65f5f4 100644 Binary files a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Transparent.mat and b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Transparent.mat differ diff --git a/Assets/uDesktopDuplication/Models.meta b/Assets/uDesktopDuplication/Models.meta new file mode 100644 index 0000000..ccf1ab0 --- /dev/null +++ b/Assets/uDesktopDuplication/Models.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 75494e992a22ea44d9b614d7fd3dc235 +folderAsset: yes +timeCreated: 1478887431 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Models/uDD_Board.fbx b/Assets/uDesktopDuplication/Models/uDD_Board.fbx new file mode 100644 index 0000000..aa742a3 Binary files /dev/null and b/Assets/uDesktopDuplication/Models/uDD_Board.fbx differ diff --git a/Assets/uDesktopDuplication/Models/uDD_Board.fbx.meta b/Assets/uDesktopDuplication/Models/uDD_Board.fbx.meta new file mode 100644 index 0000000..99a24b3 --- /dev/null +++ b/Assets/uDesktopDuplication/Models/uDD_Board.fbx.meta @@ -0,0 +1,78 @@ +fileFormatVersion: 2 +guid: d6b30b913257fee4d8246bf7a2620fcd +timeCreated: 1478887431 +licenseType: Pro +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2300000: //RootNode + 3300000: //RootNode + 4300000: pCube1 + 4300002: uDD_Board + 9500000: //RootNode + materials: + importMaterials: 0 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 0.1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 2 + importAnimation: 0 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Common.cginc b/Assets/uDesktopDuplication/Shaders/uDD_Common.cginc index 36fcf44..bcc6fb7 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Common.cginc +++ b/Assets/uDesktopDuplication/Shaders/uDD_Common.cginc @@ -92,4 +92,22 @@ inline fixed4 uddGetScreenTextureWithCursor(float2 uv) return color; } +inline void uddBendVertex(inout float4 v, half radius, half width) +{ +#if !defined(_BEND_OFF) + #ifdef _BEND_Y + radius = radius - v.y; + #elif _BEND_Z + radius = radius - v.z; + #endif + half angle = width * v.x / radius; + v.x = radius * sin(angle) / width; + #ifdef _BEND_Y + v.y += radius * (1 - cos(angle)); + #elif _BEND_Z + v.z -= radius * (1 - cos(angle)); + #endif +#endif +} + #endif \ No newline at end of file diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit.shader index 55ca19d..97c8d64 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Unlit.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit.shader @@ -7,7 +7,7 @@ Properties _MainTex ("Texture", 2D) = "white" {} _CursorTex ("Cursor Texture", 2D) = "white" {} [KeywordEnum(Off, Y, Z)] _Bend("Bending", Int) = 0 - [PowerSlider(10.0)]_Radius ("Radius", Range(1, 100)) = 30 + [PowerSlider(10.0)] _Radius("Radius", Range(1, 100)) = 30 [KeywordEnum(Off, Front, Back)] _Cull("Culling", Int) = 2 } @@ -28,15 +28,7 @@ half _Width; v2f vert(appdata v) { v2f o; -#if defined(_BEND_Z) || defined(_BEND_Y) - half a = _Width * v.vertex.x / _Radius; - v.vertex.x = _Radius * sin(a) / _Width; - #ifdef _BEND_Y - v.vertex.y += _Radius * (1 - cos(a)); - #elif _BEND_Z - v.vertex.z += _Radius * (1 - cos(a)); - #endif -#endif + uddBendVertex(v.vertex, _Radius, _Width); o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader index cba3268..56d9854 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader @@ -23,10 +23,13 @@ CGINCLUDE #include "./uDD_Common.cginc" fixed _Mask; +half _Radius; +half _Width; v2f vert(appdata v) { v2f o; + uddBendVertex(v.vertex, _Radius, _Width); o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; @@ -51,6 +54,7 @@ Pass #pragma multi_compile ___ ROTATE90 ROTATE180 ROTATE270 #pragma multi_compile ___ USE_BEND #pragma multi_compile ___ USE_CLIP + #pragma multi_compile _BEND_OFF _BEND_Y _BEND_Z ENDCG } diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader index cacea32..7452553 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader @@ -21,9 +21,13 @@ CGINCLUDE #include "./uDD_Common.cginc" +half _Radius; +half _Width; + v2f vert(appdata v) { v2f o; + uddBendVertex(v.vertex, _Radius, _Width); o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; @@ -46,6 +50,7 @@ Pass #pragma multi_compile ___ ROTATE90 ROTATE180 ROTATE270 #pragma multi_compile ___ USE_BEND #pragma multi_compile ___ USE_CLIP + #pragma multi_compile _BEND_OFF _BEND_Y _BEND_Z ENDCG }