코드 타입 확인(정의로 이동)

 

kinect의 position값을 받아올려고 하였는데. 

Vector3 type이 아니었다. 

1
var pos = body.Joints[Trackedjoint].Position;
cs

Position에 마우스 커서를 갔다대면 CameraSpacePoint라는 알 수 없는 변수형이 뜬다. ^^;;

어떤 타입으로 받아와야 될지 몰라서 선생님께 질문하였다...

 

이럴 경우 파고들어가고 싶은 코드에 블록처리를 하고 우클릭을 누르고 

'정의로 이동(window-f12/ mac - command + D)' 을 선택하면, 코드 내에 내장된 코드들이 나온다.

 

CameraSpacePoint의 타입은 들어가보니, struct구조로

Vector값을 float형으로 X,Y,Z로 가져오고 있었다.

1
2
3
4
5
public struct CameraSpacePoint
    {
        public float X { get; set; }
        public float Y { get; set; }
        public float Z { get; set; }
cs

 

pos값을 가져오기 위해서 새로운 벡터를 만들고

CameraSpacePoint의 내부에 있는 X, Y, Z값을 가져왔다.

1
2
3
var pos = body.Joints[Trackedjoint].Position;
 
                Vector3 movePos = new Vector3(pos.X, pos.Y, pos.Z);
cs


 

structure과 class의 차이


둘 다 변수와 함수의 집합이다. 

차이는 저장 위치이다. 


structure - 스택에 저장 ex) rayCast.hit

class - 힙에 저장


*스택 : 함수 호출시 생성, 호출 완료되면 사라짐.(임시할당) 

지역변수 매개변수 저장되는 영역.

LIFO(last in first out) - 마지막에 입력된 자료를 가장 먼저 삭제함.

 

*힙 : 할당할 메모리의 크기를 런타임에 정함. (동적할당) 

호출이 끝나도 사라지지 않음.(가비지 컬렉터로 지워야함.) 

static, 전역변수가 저장되는 영역.

FIFO(first in first out) - 가장 먼저 들어간 데이터를 먼저 삭제함.

/-------------------------/  메모리상에서
|                         |       높은 구역
|         Stack           |
|                         |
/-------------------------/
|                         |
|          Heap           |
|                         |
/-------------------------/
|   Uninitialized data    |
| ---------Data---------- |
|    Initialized data     | 
/-------------------------/
|                         |
|          Text           | 
|                         |  메모리상에서
/-------------------------/       낮은 구역

[참고] 

https://m.blog.naver.com/PostView.nhn?blogId=codingspecialist&logNo=221195242403&proxyReferer=https%3A%2F%2Fwww.google.com%2F

http://dsnight.tistory.com/50

https://kldp.org/node/199

 

 

 

보간

 

tracking하는데 position에 multiplier를 적용해서 끊김현상이 심하게 일어나서 보간을 해주었다.

보간 코드는 아래와 같다.

1
transform.position = Vector3.Lerp(transform.position, movePos * multiplier, Time.deltaTime * 10.0f);
cs

 

multiplier는 이동해야될 목적지 코드에 곱해주면 된다.

이후에 곱하면 보간이 잘 작동하지 않더라...

Posted by 도이(doi)
,