본문 바로가기

예전

(133)
D3D11 wireframe // 선언 ID3D11RasterizerState* WireFrame;ID3D11RasterizerState* FillFrame; // 초기화 D3D11_RASTERIZER_DESC wfdesc;ZeroMemory(&wfdesc,sizeof(D3D11_RASTERIZER_DESC)); wfdesc.FillMode = D3D11_FILL_WIREFRAME;wfdesc.CullMode = D3D11_CULL_NONE; // culling을 none으로 해줬다가_pd3dDevice->CreateRasterizerState(&wfdesc,&WireFrame);wfdesc.FillMode = D3D11_FILL_SOLID;wfdesc.CullMode = D3D11_CULL_BACK; // 다시 back culli..
visual studio warning 무시 하는 방법 이렇게 같은 warning이 자주날 때, warning을 무시하는 방법!! 속성 -> 구성 속성 -> C/C++ -> 고급 -> 특정 경고 사용 안 함 에 warning 숫자를 적어주면 된다. 또는 #pragma warning(disable : 4005) 이렇게 쓰면 된다. 근데 되도록이면 잡고가는게 좋을 듯 .....
Direct3D의 그리기 2. 정점 버퍼 Direct3D의 그리기 연산 오늘의 목표 1) 기하 자료의 정의. 저장. 그리기. 를 위한 Direct3D 인터페이스와 함수를 파악한다.2) 기본적인 vertex shader, pixel shader를 작성하는 법을 배운다.3) rendering pipeline을 구성하는 방법을 파악한다.4) Direct3D 효과 프레임워크를 이용해서 논리적으로 연관된 셰이더들과 렌더 상태들을 하나의 렌더링 기법으로 묶는 방법과효과 프레임워크를 '셰이더 생성기'로 사용하는 방법을 배운다. GPU가 정점 배열에 접근하기 위해서는 정점을 buffer에 담아야한다. Direct3D 에서의 buffer는 ID3D11Buffer 인터페이스이며, 정점을 담는 버퍼를 정점 버퍼라고 부른다. 버퍼는 자료를 담을 뿐만 아니라,CPU나..
Direct3D의 그리기 1 정점의 입력과 배치 Direct3D의 그리기 연산 오늘의 목표 1) 기하 자료의 정의. 저장. 그리기. 를 위한 Direct3D 인터페이스와 함수를 파악한다.2) 기본적인 vertex shader, pixel shader를 작성하는 법을 배운다.3) rendering pipeline을 구성하는 방법을 파악한다.4) Direct3D 효과 프레임워크를 이용해서 논리적으로 연관된 셰이더들과 렌더 상태들을 하나의 렌더링 기법으로 묶는 방법과효과 프레임워크를 '셰이더 생성기'로 사용하는 방법을 배운다. 1. 정점의 입력과 배치 구조체로 정점을 표현한다. 내부에 들어있는 변수에 따라 다른 정점으로 분류된다. struct Vertex1{VERTOR3 Pos,Color;}; struct Vertex2{VERTOR3 Pos,Normal;F..
DirectX11 초기화 1. Swap Chain 화면이 깜박거리는 현상을 방지하기위해 double buffering을 한다. 이를 Direct3D 에서 하기 위해 IDXGISwapChain이라는 인터페이스를 지원한다. 이 인터페이스는 Front Buffer Texture, Back Buffer Texture, 버퍼의 크기를 변경하겠다는 IDXGISwapChain::ResizeBuffers 함수와 버퍼의 Present를 위한 IDXGISwapChain::Present 가 있다. 2. 텍스쳐 자원 뷰 렌더링 파이프라인에는 텍스쳐를 binding 할 수 있는 여러 stage가 있다.흔히 두개로 나뉘는데, 텍스처를 렌더 대상으로 묶는 것 ( Direct3D가 텍스처에 렌더링 하는 경우 ) 과셰이더 자원으로 묶는 것 ( 셰이더 안에서 ..
[C++] binding binding은 값을 할당한다. 혹은 A와 B를 연결한다는 뜻을 가졌다. 프로그래밍에서는 정적 바인딩과 동적 바인딩 2개의 바인딩이 있다. 정적 바인딩(static binding)이란 컴파일 시간에 결정 되는 것으로 속도가 빠르다. [C++, C#] 동적 바인딩(dynamic binding)은 컴파일 시간에 기계어 코드를 생성하고, 실행시간에 호출 되는 것이다. 실행 하고 조사하는 것으로 성능 저하가 있다. [java, objective-C,C++의 virtual function] #include using namespace std; class Animal { public: void Cry(){cout
[C++] upcasting #include using namespace std; #include class Animal { public: void Cry() {cout Cry(); vectorv1;// Dog만 보관 vectorv2; // 모든 동물을 보관 Animala; foo(&a);// 1 Dogd; foo(&d);// 2 } 부모 포인터 pA에 자식 객체 Dog의 주소를 담을 수 있다.일반함수 foo는 Animal의 포인터를 받아 cry()를 출력하는 함수이다. foo에 자식 객체 d가 들어가서 제대로 cry가 출력되는 것을 알 수 있다. 이렇게 부모 포인터에 자식 객체의 주소를 담는 것을 upcating이라고 한다.upcasting은 public 상속일 때만 된다. private 상속이면 Dog의 객체에서 Cry를 부를 ..
[C++] 일반 함수 포인터, 멤버 함수 포인터 class Dialog { public: // 멤버 함수 void Close() {} // 정적 멤버 함수 static void Open() {} }; // 일반 함수 void foo() {} int main() { void(*f1)() = &foo;// 1 void(*f2)() = &Dialog::Close;// 2 void(*f3)() = &Dialog::Open;// 3 f3(); } 위의 main에서 1은 가능하지만, 2는 불가능하다.즉, 1. 일반 함수 포인터에 멤버 함수 주소를 담을 수 없다.2. 하지만, 일반 함수 포인터에 정적 멤버 함수의 주소는 담을 수 있다. (static은 this 없이도 부를 수 있으니까) int main() { // 멤버함수의 주소를 담는 포인터 void(Dialo..