출처 : http://scosco.com.ne.kr/Stereo3DHtml/vr_0003_gaussian.htm



영상을 부드럽게 처리하기 위해선 저역필터를 통과시켜야 한다. 

다양한 저역필터가 존재하지만 그 중 많이 사용하는 것이 바로 가우시안 필터이다. 


가우시안 함수는 자연현상을 가장 잘 표현하는 함수 식 중의 하나이다.
1차원 가우시안 분포를 식으로 나타내면 아래와 같다.





μ는 일반적으로 0으로 놓는다. σ는 값의 분포를 결정지으며, 표준편차를 의미한다.
일반적으로 μ = 0과 σ^2 = 1를 정규분포라고 부른다.


영상처리에서 가우시안 필터는 2차원 가우시안 함수 값을 이용하여 마스크를 생성하고,
입력영상과 마스크 연산을 수행해주는 것을 의미한다.
이 때, σ에 의해 필터의 크기가 결정되는데, 이 때 값의 분포와 그래프는 아래와 같다.

-4 * σ <= x <= 4 * σ






지금까지는 1차원 가우시안 함수를 설명했지만, 실제 영상에서는 2차원 가우시안 함수가 사용되어야 한다.
2차원 가우시안 함수는 아래와 같다.





위의 식에서 μ = 0 이라고 가정했다. (이후부터 μ는 고려하지 않는다.)
아래는 σ에 따른 이미지의 Bluring을 보여주고 있다.


원본σ = 1.0σ = 2.0


'Programmer의 텅빈 공간 > OpenGL/GLSL' 카테고리의 다른 글

Emboss shader  (0) 2014.05.21
Mosaic Shader  (0) 2014.05.20
Hertzman Painterly Rendering  (0) 2014.05.16
embossing & sharpening  (0) 2014.05.12
GLSL function - mix and clamp  (0) 2014.05.06

 

엄청 간단한 팁 ...

 

 

 

 GUI.Button()

 

사용시 버튼을 클릭을 한 경우 동작 실행이 됩니다.

 

버튼을 누르고 있을 시 동작이 실행되지 않고 멈춰있게되죠.

 

 

 

따라서 게임의 경우 이동하는 버튼을 누르면 캐릭터가 계속 이동해야하는데

 

그냥 GUI 버튼을 사용하게 되면 계속 이동이 되지 않고 한번 클릭할때마다 움직이게 됩니다.

 

 

버튼을 누르고 있을 경우 실행하기 위해선

 

GUI.RepeatButton() 을 사용하면 됩니다.

 

 

 

 

* 금방금방 잊어버리니까 혹시 잊을까봐 정리 !

 




전에 찾은 예제 코드를 이용해서 원하는 형태로 바꾼 코드 !

 

실제 제가 안드로이드에서 실행해본 결과 괜찮게 동작하네요 :D

 

최대로 커질때와 최소일때 제한을 둔 형태로 부드럽게 확대 축소 되는 코드입니당 :D

 

 

  void touchZoom()
    {
        if (Input.touchCount == 2 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
        {

            float touchDelta = 0.0F;
            Vector2 prevDist = new Vector2(0, 0);
            Vector2 curDist = new Vector2(0, 0);

            curDist = Input.GetTouch(0).position - Input.GetTouch(1).position;
            //current distance between finger touches
            prevDist = ((Input.GetTouch(0).position - Input.GetTouch(0).deltaPosition) - (Input.GetTouch(1).position - Input.GetTouch(1).deltaPosition));
            //difference in previous locations using delta positions
            touchDelta = curDist.magnitude - prevDist.magnitude;

            distance_two -= touchDelta;
            if (distance_two > 100)
                distance_two = 100;
            else if (distance_two < 20)
                distance_two = 20;
            
           

            if (distance_two < 100 && distance_two >20)
            {
                if ((touchDelta < 0)) //
                {
                    Camera.main.fieldOfView = Mathf.Lerp(camera.fieldOfView, distance_two, Time.deltaTime * 5);
                }

                if ((touchDelta > 0))
                {
                    Camera.main.fieldOfView = Mathf.Lerp(camera.fieldOfView, distance_two, Time.deltaTime * 5);
                }
            }

        }

    }


 

듀얼 모니터 사용하는 사람들에게 유용한 간단한 팁

 

 

유니티 아이콘 속성에서

 

대상(T)에  -projectPath 를 추가해주면 됨

 

"C:Unity\Editor\Unity.exe" -projectPath  

 

 

 

 

 

이건 나도 이제 공부해야 할 과제 !

 

으.. 역시 쉬운 프로그래밍은 없군. 

 

아.. 테스트를 해봐야 하는데 ㅠㅠ!

 

출처 : http://answers.unity3d.com/questions/22500/how-to-zoom-and-pan-when-you-pinchswipe-across-scr.html

 

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class CameraZoomPinch : MonoBehaviour
  5. {
  6.     public int speed = 4;
  7.     public Camera selectedCamera;
  1.     private float touchDelta = 0.0F;
  2.     private Vector2 prevDist = new Vector2(0,0);
  3.     private Vector2 curDist = new Vector2(0,0); 
  4.     // Update is called once per frame
  5.     void Update ()
  6.     {
  7.        if (Input.touchCount == 2 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
  8.        { 
  9.          curDist = Input.GetTouch(0).position - Input.GetTouch(1).position; //current distance between finger touches
  10.          prevDist = ((Input.GetTouch(0).position - Input.GetTouch(0).deltaPosition) -
    (Input.GetTouch(1).position - Input.GetTouch(1).deltaPosition)); //difference in previous locations using delta positions
  11.          touchDelta = curDist.magnitude - prevDist.magnitude;
  12.  
  13.          if ((touchDelta < 0)) //
  14.          {
  15.               selectedCamera.fieldOfView = Mathf.Clamp(selectedCamera.fieldOfView + (1 * speed),15,90);
  16.          }
  17.          if ((touchDelta > 0))
  18.          {
    1.           selectedCamera.fieldOfView = Mathf.Clamp(selectedCamera.fieldOfView - (1 * speed),15,90);
  19.          }
  20.  
  21.        }    
  22.     }
  23. }


 

왜 이렇게 더럽게 코딩을 하냐면 ......

 

전 초보니까요 :D

 

우선 확대 축소가 잘 되긴 합니다.

(처음 시작때 살짝 튀는 현상이 있긴 하지만.. 가끔이니....)

 

간단하게 설명하자면

마우스가 우측으로 이동한지 왼쪽으로 이동한지 확인 후

확대 축소를 결정.

 

물체와 카메라의 거리가 100이 넘거나 20보다 작으면 작은 값으로 이동

 

 

 

 

xDeg = Vector3.Angle(Vector3.right, transform.right);
distance = camera.fieldOfView;

 

 

 if (Input.GetMouseButtonDown(1))
        {
            xDeg += Input.GetAxis("Mouse X") * 10 * 0.02f;
            distance -= Input.GetAxis("Mouse X") * sensitivityDistance;

            if (xDeg > 0)
                zoom_k = true;
            else
                zoom_k = false;
            
            zoom_on = true;

        }

        if (Input.GetMouseButtonUp(1))
            zoom_on = false;

        if (zoom_on)
        {
            if (distance <= 100 && distance >= 20)
            {
                if (zoom_k)
                {
                    xDeg -= Time.deltaTime;
                    distance -= 2;
                }
                else
                {
                    xDeg += Time.deltaTime;
                    distance += 2;
                }
            }

            if (distance > 100)
            {
                if (zoom_k)
                {
                    xDeg -= Time.deltaTime;
                    distance -= 2f;
                }
                else
                {
                    xDeg += Time.deltaTime;
                    distance += 0.05f;
                }
            }
            else if (distance < 20)
            {
                if (zoom_k)
                {
                    xDeg -= Time.deltaTime;
                    distance -= 0.05f;
                }
                else
                {
                    xDeg += Time.deltaTime;
                    distance += 2f;
                }
            }

            Camera.main.fieldOfView = Mathf.Lerp(camera.fieldOfView, distance, Time.deltaTime * 5);

        }

'Programmer의 텅빈 공간 > Unity3D' 카테고리의 다른 글

유니티 창 여러개 띄우기  (0) 2014.05.06
더블 터치로 zoom 1  (0) 2014.05.06
패키지 사용할 때  (0) 2014.05.06
NGUI 참고 사이트  (0) 2014.05.06
Unity 한글 폰트 적용  (0) 2014.05.06

 

방금 겪은 일인데 .

 

패키지를 정리한다고 가지고 있는 패키지들을 모두 한 폴더에 몰아넣어 놨는데

 

 

그 안에 패키지를 사용하자 자꾸

 

 

Unity 충돌뜨며 멈추길래 패키지가 문제인가 했지만........

 

 

간단하게 해결됨

 

 

 

패키지가 있는 경로 중 영어가 아닌 한글이 들어가있으면 충돌하는 듯 하다.

 

 

귀찮더라도 경로에 한글사용은 금물 !

'Programmer의 텅빈 공간 > Unity3D' 카테고리의 다른 글

더블 터치로 zoom 1  (0) 2014.05.06
마우스 우 클릭으로 확대 축소 하기  (0) 2014.05.06
NGUI 참고 사이트  (0) 2014.05.06
Unity 한글 폰트 적용  (0) 2014.05.06
C/C++로 작성한 DLL 사용  (0) 2014.05.06

 

 

 

NGUI 공식 도큐먼트
NGUI 튜토리얼 번역버젼 - Step1
위 블로그의 NGUI 튜토리얼 Step1 ~ Step9 (번역)
버튼 이벤트 핸들링
아틀라스 만들어 활용하기
Bitmap Font 만들어 활용하기

Dynamic Font 사용하기

http://blog.naver.com/progagmer/186757028

(위 블로그의 ”NGUI 강좌” 카테고리 포스트들이 아주 이쁘게 정리가 잘 돼있습니다.)

 

 

 

 출처 :  http://wonsorang.tistory.com/6

'Programmer의 텅빈 공간 > Unity3D' 카테고리의 다른 글

마우스 우 클릭으로 확대 축소 하기  (0) 2014.05.06
패키지 사용할 때  (0) 2014.05.06
Unity 한글 폰트 적용  (0) 2014.05.06
C/C++로 작성한 DLL 사용  (0) 2014.05.06
scene간의 Fade in/out  (0) 2014.05.06

unity3D자체에서 한글폰트 적용이 바로 되는게 아니더군요.

--------------------------------------------------------

1. 유니티에서 한글로 스크립트나 입력받은 문자를 출력하는 것은 아무 문제 없이 됩니다. Font를 한글 폰트를 찾으셔서(*.ttf), 에셋에 던져 넣으신 후, 그 폰트를 이용해서 GUIText 등으로 출력해보시면 됩니다. 단, 스크립트에서 한글을 입력하는 경우에는, 스크립트 파일 자체를 UTF-8 포맷으로 저장하시면 이상없이 나옵니다. 

--------------------------------------------------------

라고 유니티 코리아 측에서 말하네요.

 

1.가을10.ttf이라는 폰트 파일을 testfont.ttf(이름은 상관없음)파일로 변환해 줍니다.

 

2.Assets폴더안에 파일을 복사합니다.(어디에 넣든 상관없습니다)

 

3.그림과 같이 적용되는것을 확인해 줍니다.



4. GUI Text를 생성해 주고 Inspector에 Font를 testfont로 적용해 줍니다.



5. 이제 GUI Text에 한글이 적용되는지 확인해 봅시다.

JavaScript를 생성하고

----------------------------------------------
function Update () {
 guiText.text = "한글 나와라!";
}

---------------------------------------------

GUI Text에 적용시켜 주세요.

 

스크립트를 저장하실때 UTF-8로 바꿔주시는 거 잊지 마시구요


 

6. 확인해 보시면 한글로 출력이 됩니다


 

 

출처 : http://devdata.tistory.com/trackback/94

'Programmer의 텅빈 공간 > Unity3D' 카테고리의 다른 글

패키지 사용할 때  (0) 2014.05.06
NGUI 참고 사이트  (0) 2014.05.06
C/C++로 작성한 DLL 사용  (0) 2014.05.06
scene간의 Fade in/out  (0) 2014.05.06
코루틴을 쓰레드처럼 사용하기  (0) 2014.05.06

CLR - 클래스 라이브러리로 생성합니다 (프로젝트의 이름은 편한대로 해도 상관없습니다)

 

 

프로젝트 생성하면 자동으로 파일들이 생성됩니다.

 

우리에게는 필요없는 파일이니 다 지워줍니다

 

 

구성 부분을 Release로 바꿔줍니다.

 

 

프로젝트 속성으로 들어가서 구성이 Release 인지 확인합니다 Debug라면 Release로 바꿔주세요

구성 속성 -> C/C++ -> 미리 컴파일된 헤더 -> 미리 컴파일된 헤더 사용 안 함 으로 바꿔줍니다

 

 

테스트 코드를 작성하고 빌드(F7)를 해줍니다

 

 

빌드 후 솔루션 폴더로 가보면 Release폴더가 생깁니다

 

 

유니티 프로젝트를 새로 만드시고 

프로젝트탭에 Plugins폴더와 Scripts폴더를 만들어주고

Plugins폴더에 dll파일을 드래그 해서 넣어줍니다.

 

 

 

Scripts폴더에는 C# Script를 생성해줍니다.

스크립트 코드를 작성 해주고

 

 

스크립트는 아무 오브젝트에나 적용시켜주고 콘솔창(Ctrl+Shift+C)을 열어둔 뒤 플레이를 하면

콘솔창에 결과가 나옵니다

 

 

 

 

 

 

출처 : http://blog.naver.com/tarbing/50162214359

 

 

 


'Programmer의 텅빈 공간 > Unity3D' 카테고리의 다른 글

NGUI 참고 사이트  (0) 2014.05.06
Unity 한글 폰트 적용  (0) 2014.05.06
scene간의 Fade in/out  (0) 2014.05.06
코루틴을 쓰레드처럼 사용하기  (0) 2014.05.06
마우스 화면 좌표 -> 월드 좌표  (0) 2014.05.06

+ Recent posts