커서 이동하기전에

일단 화면 중심점을따라 라인트레이싱해서

충돌된 스크린 좌표 가져오는 내용을 했었는데

이렇게 구한 YZ 좌표를 스크린의 XY계로 변경할수 있어야함.

 

정면 스크린의 경우

1470, 0, 640에 위치하고 있으니

 

1920x1080의 절반인 960 x540이 화면 중점 좌표고

아래의 사진의 경우 Y=533이므로

 

저 빨간점의 좌표는 (960 + 533) x 540 -> 1493 x 540쯤 될것이다.

 

 

 

 

 

하지만 좌우에 위치한 기울어진 화면의 경우 문제가 된다.

충돌 지점의 위치가 1064, 1182, 640인데

이걸 어떻게 할까.

 

 

 

 

 

스크린 바로 위에 큐브를 배치해서 대강 중점과 코너 위치를 정리했다.

큐브 z는 1200이라 생략하고 XY만 작성

 

 

 

 

위에 스크린 3에 라인트레이싱 한 결과는

충돌 지점의 위치가 1064, 1182, 640였으므로

 

대충 파란색 지점쯤 될것인데 이걸 어떻게 계산시킬까

영상처리에서 어파인변환 같은느낌으로 해야할것같기도하고.

 

 

 

그냥 가장 간단하게 생각하면

먼저 시작점과 파란점 사이 각도 세타를 구하고

위 그림의 파란점을 - 시작점 한뒤

파란점을 세타만큼 역방향 회전시키면 진짜 위치를 구할수 있을것같다.

 

 

 

오른쪽스크린, 왼쪽스크린 시작점 벡터 추가

각 스크린 시작점은 맨 왼쪽에 있는 지점 사용

 

 

 

 

 

일단 BP_Screen2부터 생각해보자.

 

아까 이사진의 충돌점을 화면상 좌표를 계산했었는데

----

1920x1080의 절반인 960 x540이 화면 중점 좌표고

아래의 사진의 경우 Y=533이므로

저 빨간점의 좌표는 (960 + 533) x 540 -> 1493 x 540쯤 될것이다.

---

스크린X는

Screen_X = (960 + LT_Y)

LT_Y = 533

=> Screen_X = 1493

 

스크린Y는

540 - (LT_Z - 540) = 1080 - LT_Z 

LT_Z  는 640이므로 

=> Screen_Y = 440

?

 

인가 싶은데 좀햇갈린다.

 

 

 

LT_Z=640  일때 Screen_Y = 540

LT_Z= 1180 일땐 Screen_Y = 0

LT_Z = 0    이면 Screen_Y = 1080

이 되어야 한다.

 

이에 대한 방정식은

 

Screen_Y = -LT_Z + 1180이 된다.

스크린 X는 아까 구했고

Screen_X = 960 + LT_Y

 

 

이제 좌표 계산하려고하는데

가져오기 힘들어서 따로 HitLoc 벡터 추가해서사용

 

 

ScreenX, ScreenY int 변수 추가해서 하면 잘동작하는데

 

 

라인트레이싱에서 월드 다이나믹스로 충돌 감지하도록하다보니

BP_Cursor 충돌을 NoCollision으로 해야함.

 

 

 

 

이제 아까 하던 오른쪽 화면을 해보자.

먼저 충돌점 - 시작점 한후 세타부터 계산

해봣는데

 

어딜가든 -60이 나온다.

당연한게 스크린을 -120(뒤집혀서 이럼) 회전시켜서 스크린상 충돌지점은 어딜가나 똑같음

 

 

 

그래서 atan2할필요없이 그냥 60도 회전하면 될줄 알았는데 뭔가 잘안된다.

충돌점, 시작점 차벡터를 구해서 z축 60도 로테이터로 벡터 회전만 시켜주면 끝인줄 알았는데

전과 후나 차이가 없음.

 

그래서 손계산 하다가 생각난 방법은

 

충돌-시작점 차벡터의 놈을 Screen_X로 쓰면될듯하다.

 

벡터 랭스로 놈을 구해서 쓰니 원하던 X축 좌표가 잘나온다.

 

 

 

 

이번에는 좌측 화면 좌표를 잡으려하는데

좌측 화면 중심이 충돌점이라 치자

 

그러면 좌측화면 시작점을 0,0으로 보내서 놈 계산하려면

여기도 충돌점 - 시작점하면 될듯

 

 

 

 

 

좌측 화면도 정상 동작 확인해서

최종 정리하면 이런식이 될듯하다

 

정면 스크린은 x로 +1920

우측스크린은 x로 + 3840

 

 

중간에 추가한 스크란 좌표 출력

 

 

 

실제 스크린에서 비치할 좌표가 정상적으로 나온다.

 

 

 

+ Recent posts