본문 바로가기

예전/3D

(50)
노멀매핑하려다가 ... 노멀 매핑은 범프 매핑의 일종으로 초기 범프 매핑보다 발전한 형태의 범프 매핑이다. http://telnet.or.kr/sec_directx/index.html?init_mode=api_read&api_no=146(면 법선 벡터와 정점 법선 벡터) http://www.galexandria.com/main/gdnet/nop-ipildeu-jomyeong-yong-beobseongyesan(높이 필드 조명용 법선 벡터 계산) 어쩌다 여기까지 왔지? 나는 그저 ... 노멀 맵으로 부터 y 성분만 사용하는 단순화된 노멀 맵을 사용했다 ... 라고 하려고 했는데 ㅇㅅㅇ.......... y 성분만 사용하는 단순화된 노멀 맵은 지형이 완전한 평면이고, 광원이 수직으로 비친다는 것과 같은 의미이다.정확한 것은 아니지..
[3D] LOD Crack
[3D] LOD (Level of Detail) LOD 란 Level of Detail로 말 그대로 단계에 따라 디테일을 달리 한다는 말이다. 지형이나 오브젝트를 렌더링 할 때 폴리곤의 수를 조정하여 화질의 저하 없이 높은 퀄리티를 내기 위해 사용된다. 위 그림은 거리에 따라 디테일을 다르게 준 모델이다. 카메라와의 거리에 따라 디테일을 다르게 해준 지형이다. LOD는 데이터 저장 방식에 따라 정적 LOD와 동적 LOD로 구분된다. 정적 LOD 란, LOD 단계에 맞는 서브 정점 정보를 미리 계산해 둬 렌더링시 각 지형의 레벨에 따라 처리하는 것이다.프로세스 부하는 적으나 전처리가 까다롭고, 미리 정보를 만들어야 하기 때문에 큰 Data Pool 이 필요하다. 동적 LOD 란, 각 지형의 LOD 단계를 동적으로 계산해 렌더링 하는 것이다.LOD 단계가..
[3D] 절두체(Frustum) [절두체 컬링의 종류] http://ha2rupms.tistory.com/131 에 미리 절두체 컬링의 종류에 대해 포스팅해놨습니다. 뭔가 앞뒤가 바뀐 느낌이지만 ... 간단하나마 구현 알고리즘에 관한 것이므로 포스팅하겠습니다. 절두체란 시야에 보이는 영역을 표현한 입체이다. 사각 뿔에서 앞면만 조금 잘라낸 상태로 프로그램의 부하를 줄이기 위해 컬링을 해야하기 때문에 절두체를 구해야 한다. 절두체를 만들기 위해서는 먼저 8개의 점을 선언한다. 그래픽스 파이프라인에서 정점 적용순서가 월드 행렬 * 카메라 행렬 * 투영 행렬이다. 양 변에 (카메라 행렬 * 투영 행렬)^(-1)를 곱하면 최종 좌표 * (카메라 행렬 * 투영 행렬)^(-1) = 월드 행렬 * 카메라 행렬 * 투영 행렬 * (카메라 행렬 * 투..
[3D] 지형 올리고 내리기 일정 범위에 따라 올리고, 내리고, 지우개 작업을 한 지형입니다.명암을 위해 법선벡터를 재계산 했습니다.
DrawPrimitive , DrawPrimitiveUP DrawPrimitive 는 Vertex를 그릴 때 사용하는 함수로 할당이 GPU에 되었을 때 쓴다. DrawPrimitiveUP 의 UP은 User Point 로 사용자가 직접 시스템 메모리에 할당한다. 시스템 메모리에 할당된 것을 다시 GPU에 쓰기 때문에 Up함수는 더 느리다. 대신 사용자가 컨트롤할 수 있다는 장점이 있다. DrawIndexPrimitive , DrawIndexPrimitiveUP 함수를 사용하는 Index 도 마찬가지이다.
[3D] 지형(Terrain) 3D 공간에 지지대 역할을 하는 것이 지형이다. 지형은 버텍스 버퍼와 인덱스 버퍼로 만들 수 있다. 버텍스 버퍼로 생성하게 되면 각 폴리곤 마다 정점이 3개씩 존재하기 때문에 큰 지형의 경우 부하가 발생한다.하지만 인덱스 버퍼로 지형을 생성하게 되면 각 포인트 마다만 정점을 생성하고, 인덱스 버퍼로 순서만 지정하면 되기 때문에훨씬 가볍다. 만약 w, h 크기의 지형을 생성한다고 하자. 이때 버텍스 버퍼든, 인덱스 버퍼든 셀의 개수는 (w-1)*(h-1)개 이다. 버텍스 버퍼로 지형을 생성할 때 필요한 정점의 개수는한 폴리곤당 필요한 정점의 수가 3개 이고, 한 샐당 존재하는 폴리곤의 수가 2개 이므로(w-1)*(h-1)*6 개 이다. 만약, 인덱스 버퍼로 지형을 생성할 때 필요한 정점의 수는 w * h ..
[3D] 높이 맵 아래의 동영상은 높이 값을 추출해 큐브를 높이마다 다른 위치에 둔 것이다. 그렇다면 중간 높이를 계산하는 방법을 알아보자. 지형에서 각 정점마다 높이가 다르다. 그때 저 빨간 점 vPos의 높이를 알고 싶다면 보간을 통해 계산해야 한다. 먼저 빨간 점 vPos가 있는 셀의 인덱스를 알아야 한다. 지형을 처음에 설정할 때, 원점을 중심으로 (w/2,-h/2) 떨어진 곳에서 부터 시작했기 때문에 인덱스를 찾을 때도 이것을 감안해야 한다. 인덱스를 알았다면 그 인덱스의 번호는 초록 점이 될 것이고 그것으로 파란 점, 노란 점의 높이 값을 알아낸다. 초록 점을 기준으로 빨간 점 vPos는 (0.1,0,-0.6) 만큼 떨어져 있다.[y 값은 임의로 0이라고 했다.]만약 x의 절대값이 z의 절대값보다 크다면 우 상..