전체 글 (46)
Visual Code Extension 만들어보기 (1)

서론

최근에 회사에서 visual code extension을 이용해서 여러가지 툴을 만드는 걸 보고 되게 괜찮다 싶어서 공부해보려한다.

https://opensource.com/article/20/6/vs-code-extension\

 

How to write a VS Code extension

Visual Studio Code (VS Code) is a cross-platform code editor created by Microsoft for Linux, Windows, and macOS.

opensource.com

그래서 위 사이트를 보면서 공부해보려한다.

본론

일단 위에것들을 깔아야한다.

 

노드 js부터 깔기. 

 

그 뒤에,

npm을 깔아야한다, (npm은 node.js package manager의 약자다)_

다른 글들보니까 자꾸 이상한 npm 명령어를 치라고하는데..

대체 그걸 어디쳐야하는지 몰랐었는데 CMD창에서 쳐야한다고 한다.

 

npm install -g yo generator-code

 

거기에 위처럼 코드를 쳐주면 된다.

리눅스하는거 같네..

 

깔았다!

다 깔았으면 yo code를 치란다.

 

오..

 

뭐로 extension 개발할건지 설정하는거같다.

당연히 typeScript다.

javascript는 컴파일 에러를 안잡아준다. 망할놈..

프로젝트 명 치는거같다.

오..신기해 국룰대로 "Hello World"를 친다.

위 대로 따라한다.

 

아.. 이래서 git을 깔아야하는구나?

일반적으로 visual studio로 코딩하는게 아니라 자체적인 프로세스가 있나보다..

git 깐다. 난 svn 쓰는데.. 힝

 

그리고 위에거 다 하고 나니까

프로젝트가 만들어졌다!

와웅

얘가 메인문인가보다.

package.json은 버전 관리 용인거같고.

extension.ts는 ... 설명봐도 뭔소린지 모르겠다 이건 내일 다른 샘플 프로젝트 보면서 알아야겠다.

 

  Comments,     Trackbacks
c++ template iterator 사용시 '식별자'은(는) 예기치 않은 토큰입니다.

위의 코드를 수행하더 도중 C2760 , C7510 오류가 발생하였다.

 

 오류가 발생하는 원인은 컴파일러가 T::iterator이라는 자료형을 이해하지 못하는 것이다.

 

 

 

 

그러므로 위와 같이 T::iterator의 중첩 의존 이름을 만들어준다면 이를 해결할 수있다.

 

  Comments,     Trackbacks
c++ 오퍼레이터 작성시 유의사항

 

위와같이 ()연산자 오버로딩이 있고

fun() 함수의 int , Test2 오버로딩이 있을 때

int() 를 반환해야하는지 Test2()를 반환해야하는지 애매해져 컴파일 에러가 생긴다.

  Comments,     Trackbacks
c++ 기초 - lvalue , rvalue

rvalue 탄생배경

1
2
3
4
5
6
7
8
9
10
11
12
std::vector<float> Math::ConvertToPercentage(const std::vector<float>& scores)
{
    std::vector<float> percentages;
    //여기서 복사를 수행
    return percentages;
}
 
int main()
{
    std::vector<float> scores;
    scores = ConvertToPercentage(scores);
}
cs

 percentages vector 컨테이너를 생성한 뒤 scores값을 복사하는 수행할 때,

위의 코드에선 2번의 복사가 일어난다

1. percentages에 넣을 때.

2. 반환할 때 (percentages는 스택영역에 있기때문에 범위밖으로 벗어날 때 삭제됨)

 

하지만 이걸 rValue가 생기며 바꾸어 주었다.

 

이제 lValue와 rValue를 알아야하는데

 

lValue는 우리가 평소에 알던 변수들이고,

 

//절대 성립할수없는 아래와 같은 경우 ( 상수 , lValue+1 , lValue+lValue, &(참조자) )  : rValue이다.

10 = 20;

(number+1)  = 20;

number+anotherNumber =20;

&number = 20;

 

 

이때 move함수가 바로 lvalue를 rvalue로 만들어주는 함수인데.

 

 

1
2
3
4
5
MyString::MyString(MyString&& other) : mString(other.mString),mSize(other.mSize)
{
    other.mString = nullptr;
    other.mSize = 0;
}
cs

위와 같이 MyString&&를 매개변수로 받는 이동생성자를 만들 시

other를 rValue처럼 lValue에 값을 넘겨주고(진짜 그대로) 임시객체처럼 사라지게 만든다.

 

 

 

  Comments,     Trackbacks
카메라 이미지이펙트 - 그레이톤 , 울렁거림 , 왜곡, 색수차

울렁거림 + 그레이톤

노이즈 텍스처를 사용한 왜곡

색수차 (갑자기 깨지는건 gif캡처문제)

 

 

울렁거림할때 알아둬야할 것

마치 카메라가 움직이는 듯한 효과를 주는것은 uv맵에 있는 값들에 균등하게 값을 높이거나 낮춰준 것이다.

그러므로 이런 uv맵을 균등하게 움직일때는 https://www.desmos.com/calculator/geupxd7k4h을 이용해서 움직여주자

예를들어 이렇게 uv에 값을 주면 카메라가 원모양으로 움직이게 된다.

  Comments,     Trackbacks
카메라 이미지 이펙트 만들기 - 기초지식, 반전효과

[공부한 걸 정리하는 글이므로 자세한 내용은 알아갈 수 없습니다.]

[혹시라도 배우기 위해 제 블로그를 찾아주신거라면 다른 블로그를 찾아주시면 감사드리겠습니다.]

 

 

 

필요한 사전 이해가 필요한 API

https://docs.unity3d.com/kr/530/ScriptReference/Graphics.Blit.html

 

Unity - 스크립팅 API: Graphics.Blit

This is mostly used for implementing image effects. Blit sets dest as the render target, sets source _MainTex property on the material, and draws a full-screen quad. Note that if you want to use depth or stencil buffer that is part of the source (Render)te

docs.unity3d.com

 

Graphics.Blit

카메라에 랜더링할 이미지를 교체해주는 작업이라고 생각하면 됨 자세한 내용은 확인

 

https://docs.unity3d.com/kr/530/ScriptReference/MonoBehaviour.OnRenderImage.html

 

Unity - 스크립팅 API: MonoBehaviour.OnRenderImage(RenderTexture,RenderTexture)

포스트프로세싱 효과. 쉐이더 기반의 필터로 처리하여 최종 이미지를 변경할 수 있습니다. incoming 이미지는 source 렌더텍스쳐입니다. 결과로는 destination render texture. You must always issue a Graphics.Blit()

docs.unity3d.com

OnRenderImage()

OnDestroy()나 Update같이 특정 상황에 발동되는 함수로 화면에 랜더링 될때

최종이미지를 변경하기 위해 사용되는 함수

 

 

 

 

 

 

 

 

위의 스크립트들을 이용해서  이미지 이펙트 쉐이더작성하고 머테리얼로 만들어 넣어주면 된다.

 

1번째 결과물 인버스 쉐이더

 

 

이미지 이펙트 쉐이더 작성시 주의할 점

 

Cull off ( 모델의 앞 뒤 모두 랜더링 해야하고)

ZWrite off ( 뒤에있는 오브젝트들이 랜더링 되도록 해야한다)

자세한 내용

https://m.blog.naver.com/PostView.nhn?blogId=ateliersera&logNo=220398051030&proxyReferer=https:%2F%2Fwww.google.com%2F

 

알기 쉬운 유니티 쉐이더 강좌 #004 -ShaderLab : Culling & Depth Testing / Blending / Tags / Pass Tags

이번엔 앞에서 언급한 컬링과 뎁스 테스팅, 블랜딩 등에 대해서 알아보겠습니다. Culling & Depth T...

blog.naver.com

 

 

  Comments,     Trackbacks
c++ 배열 붕괴 현상

https://ko.coder.work/so/c/270811

 

c - C의 배열이 포인터로 붕괴되는 이유는 무엇입니까? - IT 툴 넷

c - C의 배열이 포인터로 붕괴되는 이유는 무엇입니까? c arrays pointers

ko.coder.work

 

c++ 을 하다보면 sizeof(array)로 배열의 크기를 찾거나 배열을 매개변수로 넘겨줄 때 가 있다.

 

그러면 배열 붕괴현상 즉, 매개변수로 배열을 넘겨줄 때 배열이 포인터형식으로 되는 경험을 할 수있다.

 

이는 1970년대의 컴퓨터에서 스택 크기를 초과할 경우를 방지하기 위해 디자인 된 방식이다.

 

즉,

int main()

{

int arr[10] = {1,2,3,4,5,6,7,8,9,10};

sizeof(arr);  // 을 했을때 4가 나오지만

solution(arr);  // << arr의 사이즈 반환하는 함수

//이때는 4를 반환하게 된다.

//왜냐하면 배열이 포인터형식으로 바뀌기 때문이다.

//또한, sizeof(배열)을 했을 때 컴파일 시 상수화된다. 같은함수에서는 상수화된 이 크기를 보고 알 수 있는 것

//하지만 매개변수로 넘겨주엇을 때는 포인터로 넘겨주어 포인터인지 배열인지도 알 수 없고, 같은 함수에서 그 크기를 찾을 방법이 없기 때문에 알 수없다.

}

 

 

  Comments,     Trackbacks
Arctangent2(y,x) 4사분면에서 기울기 구하는 공식

 

y가 음수 x 음수일때  -1/2π ~

 

y가 음수 x 양수일때  0 ~ -1/2π

 

y가 양수 x 음수일 때 1/2π ~ π

 

y가 양수 x 양수일 때 0 ~ π

대충 이런 그림이 나온다

 

'개발 > 쉐이더 - 필요 개념 설명' 카테고리의 다른 글

Baked GI? GI?  (0) 2020.06.28
  Comments,     Trackbacks