전체 글

전체 글

    [C++] Define Macro

    Define Macro Function VS Macro - 단순 반복 작업일 경우 Macro는 치환 방식이므로 Macro를 통해 연산하는 방식이 빠르다. Macro 함수의 장점 - Macro 함수는 단순 치환만을 해주므로, 인수의 타입을 신경쓰지 않고 처리한다. - 여러 개의 명령문을 동시에 포함할 수 있다.- 함수 호출 비용이 줄어드므로 속도 향상에 도움이된다. Macro 함수의 단점 - 디버깅의 어려움.. 정말 까다롭긴하다.. - Macro 함수가 길어지면 길어질수록 괄호를 쓰게 되어 가독성이 매우 떨어지게된다. Macro 함수 사용시 주의점 - token 단위의 연산에서 사용되는 연산자로는 #과 ##이 있다. -> # : Macro를 통해 들어온 token을 문자열로 변환시켜준다. -> ## : M..

    [DLL] DLL Interface

    DLL Interface Interface를 통한 DLL 배포 방식 - Interface는 순수 가상 함수들로만 이루어진 최상위 Class 라고 보면된다. 해당 Interface Class를 상속받아 실질적인 배포를 할 Class의 내부는 숨길 수 있다는 장점과, 해당 Interface를 통해 여러가지 버전의 Library를 제공 할 수 있다는 장점이 있다. Interface를 통한 배포방식의 장점 - 먼저 이전 방식에선 해당 DLL Header의 namespace로 기능별로 묶어 제공을 하였는데, 이렇게 되면 해당 Class를 반환해서 사용하려면 내보내야 하는 것들이 너무 많아져 불편하다. 하지만 Interface를 통해 전역으로 생성해주는 함수를 통해 해당 Class를 반환해 준다면 이런 문제들이 사..

    [Shader / HLSL] RunTime Compile Shader / Shader Macro

    RunTime Compile Shader Binary File Load - 해당 Shader File을 Compile 해둔 파일을 Binary로 읽어들여 사용하는 방식. - 이미 Compile 된 Shader를 사용하기 때문에 원본 Shader는 필요가 없으며, Compile 된 파일만 필요하다. - RunTime Compile시에 사용할 수 있는 Macro, EntryPoint, Shader Model Version 설정은 불가능. - Shader File Compile 시 Shader Model Version, EntryPoint 설정 후 Compile 해야하는 불편함이 있다. RunTime Compile - 해당 Shader File을 RunTime에 Compile 하는 방식, Shader File..

    [C++] std::enable_if / std::is_base_of

    std::enable_if - 스코프 지정 연산(::)에서 지정된 스코프 내에 존재하지 않는 타입을 사용한 경우를 활용하여 enable_if::type은 존재하지만 enable_if::type은 존재하지 않으므로 이를 바탕으로 특정한 경우에만 함수 템플릿을 사용할 수 있도록 만드는 것이다. // STRUCT TEMPLATE enable_if template struct enable_if {}; // no member "type" when !_Test template struct enable_if { // type is _Ty for _Test using type = _Ty; }; std::is_base_of - is_base_of 는 Template 첫번째 인자가 두번째 인자의 자식 객체이거나 동일한 객..

    [DLL] Implicit Linking DLL / Explicit Linking DLL

    Implicit Linking DLL Implicit Load Time Linking 이는 해당 프로그램에서 사용될 DLL 정보를 프로그램에 내장하는 방법이다. 이렇게 하면 프로그램을 실행할 때 어떤 DLL이 필요한지 알려주어 프로그램이 착오 없이 실행된다. Implicit Linking으로 사용하고자 할 때는 해당 LIB 파일을 링크 옵션에 더해준 뒤 헤더 파일을 소스코드에 포함시키고 원하는 함수를 사용하면 되므로 간단하다. 내보내려는 경우 __declspec(dllexport)를 사용하여 export 하고, 사용 할 경우 __declspec(dllimport)를 사용통해 import하여 해당 소스에 접근이 가능하다. Explicit Linking DLL Explicit Linking은 사용이 조금 까..

    [Project] Win API Mini Project

    Win API Project ( WestonRhapsody ) Win API 프로젝트 플레이 영상입니다. Win API Project - Animation Viewer 해당 프로젝트를 들어가기 전 프로그래밍 측에서도 확인해야 할 필요도 있지만 아트분들도 매번 저희한테 확인해달라고 요청하는 작업이 번거로울것 같아 미리 제작했던 Animation Viewer 입니다. ColorKey Image View Alpha Image View Animation View 실행 파일 WestonRhapsody.zip drive.google.com

    [Shader / HLSL] Shader Reflection

    Shader Reflection DirectX 11 Shader Reflection - ID3D11ShaderReflection -> 해당 struct를 통해 Shader Reflection 실행. - ID3D11ShaderReflectionConstantBuffer -> 해당 struct를 통해 ConstantBuffer Index를 기준으로 정보를 가져온다. - D3D11_SHADER_DESC -> 해당 struct를 통해 ID3D11ShaderReflection에서 Shader 정보를 가져온다. - D3D11_SHADER_BUFFER_DESC -> 해당 struct를 통해 ID3D11ShaderReflectionConstantBuffer에서 Constant Buffer 정보를 가져온다. - D3D1..

    [DirectX 11] Animation

    [DirectX 11] Animation

    Animation Animation Data는 KeyFrame 기준 Data로 Sampling 되어 저장된다. 일단 KeyFrame 그대로 Local Matrix를 반영하여 출력하면 애니메이션이 나오긴 할텐데, 매우 끊겨보일 것이다. 그러므로 우리는 Sampling 된 KeyFrame Data 간의 추가적인 보간 작업을 해주어야 하는데, Scale, Position은 Lerp(선형보간)을 통해 KeyFrame 간의 보간을 해주면 된다. 하지만 Rotation은 Slerp(구면선형보간)을 통해 KeyFrame 간의 보간을 해주어야 한다. Rotation의 경우 Format 마다 저장되는 방식이 다를 수 있다. float _time = 0; float _angle = 0; Vector3 _rot = Vect..