refactor in progress

master
chwan1 6 years ago
parent d594138a33
commit 3413ab04f9
  1. 379
      Unity-19050-05-BallPool/Assets/Frozen/Frozen.unity
  2. 187
      Unity-19050-05-BallPool/Assets/Frozen/Script/FrozenPointerEventFilter.cs

@ -1075,7 +1075,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!4 &199010598
Transform:
m_ObjectHideFlags: 0
@ -3804,6 +3804,166 @@ MonoBehaviour:
PlayOnStart: 1
Looping: 1
AudioVolume: 1
--- !u!43 &956046139
Mesh:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: 'Space Ground Mesh: (8x5x3)'
serializedVersion: 9
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 24
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 16
localAABB:
m_Center: {x: 0, y: 1.5, z: 0}
m_Extent: {x: 4, y: 1.5, z: 2.5}
m_Shapes:
vertices: []
shapes: []
channels: []
fullWeights: []
m_BindPose: []
m_BoneNameHashes:
m_RootBoneNameHash: 0
m_MeshCompression: 0
m_IsReadable: 0
m_KeepVertices: 1
m_KeepIndices: 1
m_IndexFormat: 0
m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00
m_VertexData:
serializedVersion: 2
m_VertexCount: 16
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 12
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 24
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 512
_typelessdata: 000080c000000000000020c0000000000000803f00000000e4388e3e00000000000080c00000000000002040000000000000803f00000000e4388e3e0000203f0000804000000000000020c0000000000000803f000000008ee3383f00000000000080400000000000002040000000000000803f000000008ee3383f0000203f000080c000000000000020400000000000000000000080bfe4388e3e0000203f000080c000004040000020400000000000000000000080bfe4388e3e0000803f0000804000000000000020400000000000000000000080bf8ee3383f0000203f0000804000004040000020400000000000000000000080bf8ee3383f0000803f000080c000000000000020c00000803f0000000000000000000000000000203f000080c000004040000020c00000803f0000000000000000000000000000803f000080c000000000000020400000803f0000000000000000e4388e3e0000203f000080c000004040000020400000803f0000000000000000e4388e3e0000803f000080400000000000002040000080bf00000000000000008ee3383f0000203f000080400000404000002040000080bf00000000000000008ee3383f0000803f0000804000000000000020c0000080bf00000000000000000000803f0000203f0000804000004040000020c0000080bf00000000000000000000803f0000803f
m_CompressedMesh:
m_Vertices:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_UV:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Normals:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Tangents:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Weights:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_NormalSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_TangentSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_FloatColors:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_BoneIndices:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_Triangles:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_UVInfo: 0
m_LocalAABB:
m_Center: {x: 0, y: 1.5, z: 0}
m_Extent: {x: 4, y: 1.5, z: 2.5}
m_MeshUsageFlags: 0
m_BakedConvexCollisionMesh:
m_BakedTriangleCollisionMesh:
m_MeshMetrics[0]: 1
m_MeshMetrics[1]: 1
m_MeshOptimized: 0
m_StreamData:
offset: 0
size: 0
path:
--- !u!1 &1000268178
GameObject:
m_ObjectHideFlags: 0
@ -5590,7 +5750,7 @@ MeshFilter:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1379541361}
m_Mesh: {fileID: 1694833583}
m_Mesh: {fileID: 956046139}
--- !u!114 &1379541365
MonoBehaviour:
m_ObjectHideFlags: 0
@ -5885,7 +6045,6 @@ GameObject:
- component: {fileID: 1451842900}
- component: {fileID: 1451842899}
- component: {fileID: 1451842901}
- component: {fileID: 1451842902}
m_Layer: 10
m_Name: Scene Camera
m_TagString: Untagged
@ -6042,31 +6201,7 @@ MonoBehaviour:
serializedVersion: 2
m_Bits: 4294967295
m_MaxRayIntersections: 0
pointerEventFilter: {fileID: 1451842902}
--- !u!114 &1451842902
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1451842896}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: adfcbd7a73e557e4aa57c51c4b86a917, type: 3}
m_Name:
m_EditorClassIdentifier:
roi:
serializedVersion: 2
x: 370
y: 0
width: 1260
height: 800
roiDst:
serializedVersion: 2
x: 0
y: 1840
width: 5040
height: 3200
pointerEventFilter: {fileID: 1817143151}
--- !u!1 &1470412008
GameObject:
m_ObjectHideFlags: 0
@ -6313,7 +6448,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &1640244023
RectTransform:
m_ObjectHideFlags: 0
@ -6830,166 +6965,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
area: 2
--- !u!43 &1694833583
Mesh:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: 'Space Ground Mesh: (8x5x3)'
serializedVersion: 9
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 24
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 16
localAABB:
m_Center: {x: 0, y: 1.5, z: 0}
m_Extent: {x: 4, y: 1.5, z: 2.5}
m_Shapes:
vertices: []
shapes: []
channels: []
fullWeights: []
m_BindPose: []
m_BoneNameHashes:
m_RootBoneNameHash: 0
m_MeshCompression: 0
m_IsReadable: 0
m_KeepVertices: 1
m_KeepIndices: 1
m_IndexFormat: 0
m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00
m_VertexData:
serializedVersion: 2
m_VertexCount: 16
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 12
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 24
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 512
_typelessdata: 000080c000000000000020c0000000000000803f00000000e4388e3e00000000000080c00000000000002040000000000000803f00000000e4388e3e0000203f0000804000000000000020c0000000000000803f000000008ee3383f00000000000080400000000000002040000000000000803f000000008ee3383f0000203f000080c000000000000020400000000000000000000080bfe4388e3e0000203f000080c000004040000020400000000000000000000080bfe4388e3e0000803f0000804000000000000020400000000000000000000080bf8ee3383f0000203f0000804000004040000020400000000000000000000080bf8ee3383f0000803f000080c000000000000020c00000803f0000000000000000000000000000203f000080c000004040000020c00000803f0000000000000000000000000000803f000080c000000000000020400000803f0000000000000000e4388e3e0000203f000080c000004040000020400000803f0000000000000000e4388e3e0000803f000080400000000000002040000080bf00000000000000008ee3383f0000203f000080400000404000002040000080bf00000000000000008ee3383f0000803f0000804000000000000020c0000080bf00000000000000000000803f0000203f0000804000004040000020c0000080bf00000000000000000000803f0000803f
m_CompressedMesh:
m_Vertices:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_UV:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Normals:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Tangents:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Weights:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_NormalSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_TangentSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_FloatColors:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_BoneIndices:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_Triangles:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_UVInfo: 0
m_LocalAABB:
m_Center: {x: 0, y: 1.5, z: 0}
m_Extent: {x: 4, y: 1.5, z: 2.5}
m_MeshUsageFlags: 0
m_BakedConvexCollisionMesh:
m_BakedTriangleCollisionMesh:
m_MeshMetrics[0]: 1
m_MeshMetrics[1]: 1
m_MeshOptimized: 0
m_StreamData:
offset: 0
size: 0
path:
--- !u!1 &1718259912
GameObject:
m_ObjectHideFlags: 0
@ -7578,6 +7553,7 @@ GameObject:
- component: {fileID: 1817143148}
- component: {fileID: 1817143150}
- component: {fileID: 1817143147}
- component: {fileID: 1817143151}
m_Layer: 0
m_Name: Spout Camera
m_TagString: Untagged
@ -7668,6 +7644,31 @@ MonoBehaviour:
m_EditorClassIdentifier:
space: {x: 2880, y: 1800, z: 1080}
material: {fileID: 2100000, guid: f05d2e0d0f372ae48998e59e3d376a63, type: 2}
--- !u!114 &1817143151
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1817143146}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: adfcbd7a73e557e4aa57c51c4b86a917, type: 3}
m_Name:
m_EditorClassIdentifier:
roi:
serializedVersion: 2
x: 370
y: 0
width: 1260
height: 800
roiDst:
serializedVersion: 2
x: 0
y: 1840
width: 5040
height: 3200
space: {x: 2880, y: 1800, z: 1080}
--- !u!1 &1858061292
GameObject:
m_ObjectHideFlags: 0

@ -13,13 +13,198 @@ namespace UltraCombos
[Header("Event Target")]
public Rect roiDst = new Rect(0, 0, 1920, 1080);
public Vector3 space;
List<Matrix4x4> homos = new List<Matrix4x4>();
Rect LeftWall;
Rect TopWall;
Rect RightWall;
// Rect Floor;
private void Start()
{
float dim = space.x + space.z * 2.0f;
float offset = 0.5f;
var src = new List<Vector2>();
var dst = new List<Vector2>();
// front
{
src.Clear();
src.Add(new Vector2(0, dim - 0));
src.Add(new Vector2(dim, dim - 0));
src.Add(new Vector2(space.z, dim - space.z));
src.Add(new Vector2(space.z + space.x, dim - space.z));
TopWall = new Rect(space.z, dim - space.z, space.x, space.z);
dst.Clear();
dst.Add(new Vector2(TopWall.xMin, TopWall.yMax));
dst.Add(new Vector2(TopWall.xMax, TopWall.yMax));
dst.Add(new Vector2(TopWall.xMin, TopWall.yMin));
dst.Add(new Vector2(TopWall.xMax, TopWall.yMin));
var matrix = Matrix4x4.identity;
FindHomography(dst.ToArray(), src.ToArray(), ref matrix);
homos.Add(matrix);
}
// left
{
src.Clear();
src.Add(new Vector2(0, dim - 0));
src.Add(new Vector2(0, dim - dim));
src.Add(new Vector2(space.z, dim - space.z));
src.Add(new Vector2(space.z, dim - (space.z + space.x)));
dst.Clear();
dst.Add(new Vector2(0, dim - space.z));
dst.Add(new Vector2(0, dim - (space.z + space.x)));
dst.Add(new Vector2(space.z, dim - space.z));
dst.Add(new Vector2(space.z, dim - (space.z + space.x)));
LeftWall = new Rect(0, dim - (space.z + space.x), space.z, space.x);
var matrix = Matrix4x4.identity;
FindHomography(dst.ToArray(), src.ToArray(), ref matrix);
homos.Add(matrix);
}
// right
{
src.Clear();
src.Add(new Vector2(dim, dim - 0));
src.Add(new Vector2(dim, dim - dim));
src.Add(new Vector2(space.z + space.x, dim - space.z));
src.Add(new Vector2(space.z + space.x, dim - (space.z + space.x)));
dst.Clear();
dst.Add(new Vector2(dim, dim - space.z));
dst.Add(new Vector2(dim, dim - (space.z + space.x)));
dst.Add(new Vector2(space.z + space.x, dim - space.z));
dst.Add(new Vector2(space.z + space.x, dim - (space.z + space.x)));
var matrix = Matrix4x4.identity;
FindHomography(dst.ToArray(), src.ToArray(), ref matrix);
homos.Add(matrix);
}
}
public override void Filter(PointerEventData eventData)
{
Vector2 position = eventData.position;
position = Rect.PointToNormalized(roi, position);
position = Rect.NormalizedToPoint(roiDst, position);
// Debug.Log(position);
Debug.Log(position);
if (homos.Count == 0)
{
eventData.position = Vector2.negativeInfinity;
return;
}
if (TopWall.Contains(position))
{
position = homos[0].MultiplyPoint(position);
Debug.Log("inside top wall");
}
else
{
position = Vector2.negativeInfinity;
Debug.Log("outside");
}
Debug.Log(position);
eventData.position = position;
}
private void FindHomography(Vector2[] src, Vector2[] dest, ref Matrix4x4 homography)
{
float[,] P = new float[,]{
{-src[0].x, -src[0].y, -1, 0, 0, 0, src[0].x*dest[0].x, src[0].y*dest[0].x, -dest[0].x }, // h11
{ 0, 0, 0, -src[0].x, -src[0].y, -1, src[0].x*dest[0].y, src[0].y*dest[0].y, -dest[0].y }, // h12
{-src[1].x, -src[1].y, -1, 0, 0, 0, src[1].x*dest[1].x, src[1].y*dest[1].x, -dest[1].x }, // h13
{ 0, 0, 0, -src[1].x, -src[1].y, -1, src[1].x*dest[1].y, src[1].y*dest[1].y, -dest[1].y }, // h21
{-src[2].x, -src[2].y, -1, 0, 0, 0, src[2].x*dest[2].x, src[2].y*dest[2].x, -dest[2].x }, // h22
{ 0, 0, 0, -src[2].x, -src[2].y, -1, src[2].x*dest[2].y, src[2].y*dest[2].y, -dest[2].y }, // h23
{-src[3].x, -src[3].y, -1, 0, 0, 0, src[3].x*dest[3].x, src[3].y*dest[3].x, -dest[3].x }, // h31
{ 0, 0, 0, -src[3].x, -src[3].y, -1, src[3].x*dest[3].y, src[3].y*dest[3].y, -dest[3].y }, // h32
};
GaussianElimination(ref P, 9);
float[] aux_H ={ P[0,8],P[3,8],0,P[6,8], // h11 h21 0 h31
P[1,8],P[4,8],0,P[7,8], // h12 h22 0 h32
0 , 0,1,0, // 0 0 0 0
P[2,8],P[5,8],0,1}; // h13 h23 0 h33
for (int i = 0; i < 16; i++) homography[i] = aux_H[i];
}
private void GaussianElimination(ref float[,] A, int n)
{
int i = 0;
int j = 0;
int m = n - 1;
while (i < m && j < n)
{
int maxi = i;
for (int k = i + 1; k < m; k++)
{
if (Mathf.Abs(A[k, j]) > Mathf.Abs(A[maxi, j]))
{
maxi = k;
}
}
if (A[maxi, j] != 0)
{
if (i != maxi)
for (int k = 0; k < n; k++)
{
float aux = A[i, k];
A[i, k] = A[maxi, k];
A[maxi, k] = aux;
}
float A_ij = A[i, j];
for (int k = 0; k < n; k++)
{
A[i, k] /= A_ij;
}
for (int u = i + 1; u < m; u++)
{
float A_uj = A[u, j];
for (int k = 0; k < n; k++)
{
A[u, k] -= A_uj * A[i, k];
}
}
i++;
}
j++;
}
for (int k = m - 2; k >= 0; k--)
{
for (int l = k + 1; l < n - 1; l++)
{
A[k, m] -= A[k, l] * A[l, m];
}
}
}
}
}
Loading…
Cancel
Save