Unity.EventSystems 네임스페이스에서 Unity는 IPointer 인터페이스를 제공합니다.


인터페이스가 적용되기 위해서는 UI의 경우에는 그래픽레이캐스터가 존재해야하며 Raycast Target이 On이어야 실행되며 3D혹은 2D의 경우에는 Collider가 존재해야 합니다.


IPointer 인터페이스의 종류는 다음과 같습니다.


1. IPointerClickHandler

 - 마우스의 클릭 혹은 터치시에 들어오는 이벤트


1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
 
public class TestIPointer : MonoBehaviour , IPointerClickHandler{
 
    public void OnPointerClick(PointerEventData eventData)
    {
        //Click Event
    }    
}
cs


2. IPointerDownHandler

 - 마우스의 다운 혹은 터치다운 시에 들어오는 이벤트


1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
 
public class TestIPointer : MonoBehaviour , IPointerDownHandler{
 
    public void OnPointerDown(PointerEventData eventData)
    {
        //Down Event
    }
}
cs


3. IPointerEnterHandler

 - 마우스의 포인터가 충돌범위안에 들어 올때 들어오는 이벤트


1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
 
public class TestIPointer : MonoBehaviour , IPointerEnterHandler{
 
    public void OnPointerEnter(PointerEventData eventData)
    {
        //Up Event
    }
}
cs



4. IPointerExitHandler

 - 마우스의 포인터가 충돌범위밖으로 나갈 때 들어오는 이벤트


1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
 
public class TestIPointer : MonoBehaviour , IPointerExitHandler{
 
    public void OnPointerExit(PointerEventData eventData)
    {
        //Exit Event
    }
}
cs


5. IPointerUpHandler

 - 마우스의 업 혹은 터치업 시에 들어오는 이벤트


1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
 
public class TestIPointer : MonoBehaviour , IPointerUpHandler{
 
    public void OnPointerUp(PointerEventData eventData)
    {
        //Up Event
    }
}
cs



'프로그래밍 > Unity 공부' 카테고리의 다른 글

유니티 뷰포리아 AR 이미지인식  (0) 2018.12.21
Posted by Dongkey
,


★DX11 대응

DX11 대응 그래픽 장치는 반드시 D3D11 능력 집합 전체를 지원합니다.

( DX9에서는 하드웨어의 기능점검이 필요했지만 DX11에서는 기능정검이 불필요)



★COM 객체 (Component Object Model)

 - MSDN 에서 제공하는 ABI(Application Binary Interface) 입니다.


특성

1. 언어독립성 (언어에 국한X)

2. Binary Standard ( VC++ 소스 필요없음 )

3. Version Control 하위 및 상위 호환성 제공

4. 자기만의 고유한 메모리 관리 ( delete 가 아닌 Realse로 호출로 자원해제 )

-> DX11 에서는 보통 대문자 I 로 시작


★텍스처 및 자료 자원 형식

2차원 텍스처는 사실상 2차원 배열 or 행렬


용도  

1. 2차원 이미지 자료를 저장 ( 각 원소는 픽셀의 색상을 담음)

2. 색상이 아닌 3차원 벡터를 담는용도 등등


형식

DXGI_FORMAT 열거형으로 지정


DXGI_FORMAT_성분_방식 

성분 - R32G32B32 , R16G16B16A16 등.

방식 - FLOAT,UNROM,UINT 등


★교환사슬과 페이지 전환

presenting(제시) : 후면 버퍼와 전면 버퍼의 포인터 변경 ( 더블버퍼링 시스템 )

교환사슬(SwapChain) : 버퍼를 제시(presenting)하기 위한 변경시스템


★깊이 버퍼 ( Depth Buffer or Z-Buffer )

텍스처의 이미지 자료를 담지 않는 형식중 하나 , 0(가까움) ~ 1.0(멈) 까지의 값

픽셀의 깊이 정보를 담는 하나의 텍스쳐


작동원리

1.백버퍼 지우기

2.물체그리기

3.충돌된 픽셀의 depth 조사

4.결과값에 의한 픽셀 갱신


★스텐실 버퍼 ( Stencil Buffer )

일정부분 렌더링을 막기위해 사용 ( Masking 효과 )

깊이-스텐실버퍼 사용 (  스텐실 버퍼를 사용한다면 반드시 깊이버퍼에 부착해야함으로 )


※ 깊이-스텐실 이라고 많이 부른다고 합니다....


★텍스처 자원 뷰

렌더링 파이프라인에는 묶을(Bind) 수 있는 단계(Stage)들이 존재


흔한 용도

1. 텍스처를 렌더 대상으로 묶는 것 ( D3D가 텍스처에 렌더링 하는 경우 )

2. 셰이더 자원으로 묶는 것 ( 셰이더 안에서 텍스처를 추출하는 경우 )


이 두가지 용도로 사용할 텍스쳐를 생성 할 때 파이프 라인 단계를 지정한 결속플래그 (Bind Flag)를 사용


직접 바인딩 되는 것이 아닌

자원 뷰(Resource View)라는 것을 생성해야 하고 이 자원 뷰가 바인딩 됨

Flag값을 지정해야  이 값에 따른 특정 자원 뷰를 생성or불가능 해짐


★앨리어싱 ( Aliasing , 계단현상 )

화면의 계단현상을 제거(앨리어싱제거AntiAliasing) 기법


SSAA(SuperSamlingAntiAliasing,초과표본화) : 후면버퍼+깊이-스텐실버퍼 4배 후 하향표본화(DownSampling)하는 기법


- 픽셸처리량과 메모리소비량의 비용이 큼


MSAA(MultiSamlingAntiAliasing,다중표본화) : 도형과 겹치는 픽셀칸에서 가운데 한점 + 주변에서 정보를 수집하여 처리하는 기법


- 가장보편적인 AA기법 , 디퍼드와 같이 쓰기에 무겁다고 함 , CPU기반

- 이미징 대해 상관없이 그냥 여러 번 샘플링


그 외 기법들 ( 자세한 설명은 생략하겠습니다...)

FXAA(Fast Approximate AA)

QAA (Quincunx AA)

EQAA (Enhanced Quality AA)

MLAA (Morphological AA)

DLAA (Directionally Localized Anti-Aliasing

TXAA (Temporal Approximate(?) AA)

SMAA(Enhanced Subpixel Morphological AA)

SPUAA(The Saboteur Anti-Aliasing)

SRAA(Subpixel Reconstruction Antialiasing)

DEAA(Distance-to-Edge AA)

GBAA(Geometry Buffer AA)

CSAA(Coverage Sampling AA)

HRAA(High Resolution AA)

SMAA(Enhanced Subpixel Morphological Antialiasing)

MSAA(Multi Frame AA)

FXAA (Fast Approximate AA)


★기능 수준 (Feature Level)

DirectX11 은 버전을 어느 수준까지 지원하는지 파악하고 순서대로 점검후 사용 가능

( DirectX11 이 지원이 안된다면 DirectX9 으로 Feature Level 을 줄일 수 있음 )

Posted by Dongkey
,

(DX11 물방울 책 보고 공부한 내용을 정리.)



(들어가기전 사전공부)

DirectX 11의 D3DX 라이브러리에는 3차원 수학코드가 포함되어 있지 않다고 합니다.

그 대신 D3D와 개별적으로 개봘된 XNAMath 라이브러리를 제공합니다.


※ XNAMath 라이브러리 ->  DirectXMath 라이브러리

     (2.xx대 버전)                  (3.xx 대 버전)


이 라이브러리는 SSE2 명령 집합을 사용합니다.

(Streaming SIMD Extension 2)


※ SIMD ( Single Instruction Multiple Data) 

하나의 명령어로 여러개의 데이터 처리


ex)


XMVECTOR : 16바이트 정렬, SIMD 지원 ,레지스터 타입 ( 지역변수 or 전역변수로 사용 )

XMFLOAT4 : SIMD 미지원 , 스토리지 타입 , 클래스 자료 멤버 ( 흔히 사용하는 Vector의 4성분 )

XMFLOAT3 : SIMD 미지원 , 스토리지 타입 , 클래스 자료 멤버 ( 흔히 사용하는 Vector의 3성분 )

XMFLOAT2 : SIMD 미지원 , 스토리지 타입 , 클래스 자료 멤버 ( 흔히 사용하는 Vector의 2성분 )


XMMATRIX : SIMD 지원

XMFLOAT4X4 : SIMD 미지원


XMVECTOR는 쉽게 생각하면 FLOAT가 연속되게 저장되어 있다고 생각하시면 됩니다.

연속되어 있기 때문에 따로뜯기가 조금 어렵다고 생각하시면 편할 것 같습니다.


사용법

1. XMFLOAT4(~2)를 XMVECTOR로 적재

2. XMVECTOR를 계산

3. XMVECTOR를 XMFLOAT4(~2)로 바꾸어 사용

(SIMD 로 인해 덧셈,뺄셈,스칼라 곱셈 등 의 이점을 가져올 수 있습니다.)

Posted by Dongkey
,