본문 바로가기

공부259

[DirectX3D/ASSIMP] ASSIMP 구조 ASSIMP ? model importing library 입니다. Open Asset Import Library 줄여서 ASSIMP 라고 합니다. ASSIMP는 모든 모델의 데이터를 생성한 구조로 불러옴으로써 많은 종류의 모델 파일 포멧을 import(추출)이 가능합니다. ASSIMP가 모델을 로드하기만 한다면 데이터 구조에서 사용자가 원하는 모든 데이터를 얻어 올 수 있습니다. ASSIMP의 데이터구조가 import된 파일 포멧의 유형과 관계없이 동일하게 유지되기 떄문에 다양한 확장자의 파일 포멧들을 추상화 할 수 있습니다. 전체적인 모델을 import된 모든 모델(Object)의 씬(Scene)을 포함하고있는 Scene 객체에 로드합니다. ASSIMP는 노드의 모음을 가지게 되고 각 노드는 자신의 .. 2023. 6. 21.
[자료구조] SIMD (Single Instruction Multiple Data) SIMD란 ? 하나의 명령어로 여러개의 데이터를 한번에 처리하는 병렬 방식의 기법을 의미 합니다. 즉 CPU에서 지원되는 명령어 셋으로 하나의 명령어로 동일한 형태나 구조의 여러 데이터를 한번에 처리 할 수 있는 기법입니다. 일반적인 프로그램은 SISD(Single Instruction Single Date)의 방식으로 구현되어있습니다. 대표적으로 DirecX, OpenGl 은 SIMD를 지원하고 있습니다. SIMD는 SISD보다 동영상, 그래픽 렌더링 등의 작업이 성능이 뛰어납니다. SISD & SIMD 4개의 32비트 정수 A0 ~ A3 그리고 B0 ~ B3 를 각각 덧셈을 하기 위해서는 총 4번의 연산과정이 필요합니다. 하지만 SIMD 연산에서는 4개의 다른 연산이아닌 한번의 연산으로 가능 합니다... 2023. 6. 19.
[DirectX3D / Graphics] 조명효과 (Ambient . Diffuse . Specular . Phong Reflection) D3D를 공부하며 조명효과를 배우기 시작하여 관련 내용을 정리하고자 합니다. 가장 기본적으로 사용되는 조명 모델인 Phong Reflection(이하 퐁 모델) 그리고 퐁 모델을 위해 필요한 기본 모델들에 대하여 알아보도록 합니다. 우선 퐁 모델을 위해서는 기본적인 3개의 모델이 필요합니다. Ambient Diffuse Specular Shaders 필터의 hlsl 파일의 PS 코드를 참조 합니다. float4 PS(PixelInput input) : SV_TARGET { //world space light float3 light = normalize(-float3(1, -1, 1)); // 빛의 방향 벡터 //world space normal float3 normal = normalize(input.N.. 2023. 6. 7.
[DirectX3D] 레이 캐스팅 ( Ray Casting ) & 레이 트레이싱 ( Ray Tracing) (feat.충돌) 레이 캐스팅 ? 레이 캐스팅이란 빛(Ray)를 쏴서(Casting) 충돌한 물체의 표면을 감지하는 기술 입니다. 빛의 시작지점 부터 물체까지의 거리를 바탕으로 얼마나 가까이에 렌더링해야하는 지를 결정할 수 있습니다. 화면의 임의 위치에 모든 픽셀마다 카메라가바라보고 있는 방향으로 빛을 투사한 후 충돌체 까지의 거리를 구하여 충돌체 까지의 거리가 멀수록 가로 1픽셀 짜리 짧은 세로줄을 해당 합니다. 반대로 거리가 가까울 수록 가로 1픽셀 짜리 긴 세로줄을 해당 하여 그리는 방식으로 원근감이 있는 3D 느낌을 줄 수 있습니다. (즉, 멀수록 작아보이고 가까울 수록 커보이게 됩니다.) 위처럼 레이 캐스팅은 무한하게 뻗어있는 점들이 마치 선처럼 구성되어 있는 형태 입니다. D3D 에서 레이 캐스팅 관련 코드 예.. 2023. 5. 31.
[C++] 람다 표현식 (Lambda Expression) 람다 함수에 대하여 정리 합니다. 정확히는 람다 표현식(Lambda Expression) 이라고하며 람다 함수(Lambda Function) 라고도 합니다. 람다 표현식 이란? 람다 표현식은 함수나 함수 객체를 별도로 정의 하지 않은 상태에서 필요한 지점에서 임시적인(익명스코프처럼) 함수를 생성하여 사용 할 수 있는 함수 입니다. 클로저(Closure[폐쇄,종결])를 의미하기도 합니다. 람다함수는 함수 포인터에 담을 수 있기때문에 즉흥적으로 사용하기 편리합니다. 단, 이름이 없는 임시적인 것이기때문에 재차 사용하거나 검색하기 어려워 사용을 권장하지는 않는다고 합니다. 람다 표현식의 형태 [①capture] (②parameters) - > {⑤body} 의 형태 식으로 구성이 됩니다. ①capture 캡처.. 2023. 5. 27.
[자료구조] 함수포인터 함수 포인터 함수도 다른 변수들처럼 자신의 [주소]를 가지고 있습니다. 이 함수의 주소를 포인터 변수에 저장하여 사용할 수 있는 것을 함수 포인터 라고 합니다. [ 함수 포인터 예제 ] int (*f)(int, int); = 리턴타입(*포인터이름)(매개변수1, 매개변수2 / 단,매개변수없을시 () 또는 void); 위의 형태로 선언 할 수 있습니다. 위처럼 선언하였을때 함수의 주소값을 저장할 수 있는 [ f ] 의 이름을 가진 함수포인터가 만들어집니다. [ f ] 라는 이름의 포인터 안에는 함수의 [주소]를 저장 하여 사용 합니다. [ 함수 포인터 사용 예제 ] #include using namespace std; int add(int a, int b) { return ( a + b ); } int ma.. 2023. 5. 24.