분류 전체보기 (308) 썸네일형 리스트형 [백준] 11723번 - 비트마스킹 https://www.acmicpc.net/problem/11723 [알고리즘] 정렬 알고리즘 선택 1. 버블 정렬 첫 요소와 두번째 요소를 비교하고 작은 것을 앞으로, 그리고 두번째와 세번째를 비교해서 작은 것을 앞으로를 반복. 그러면 한번 실행했을 때 가장 큰 값이 뒤로 가기 때문에 그 다음 실행에선 마지막을 제외하고 같은 것을 반복. 그러면 비교 횟수가 처음엔 n-1번부터 시작해서 하나씩 줄어서 마지막에 1번을 한다. 1부터 n-1까지 더하면 식은 n(n-1)/2 다. (등차수열의합 공식) 첫 요소부터 비교하면서 마지막 요소까지 큰 값이 올라가는게 버블같다고 해서 버블 정렬. 정렬 중 무식하고 비효율적이다. 하지만 구현이 간단하다는 장점이 있다. 2. 삽입 정렬 버블 정렬이 뒤에서 부터 정렬한다면 삽입정렬은 앞에서부터 정렬한다. 처음에 맨 앞 두개를 비교해서 자기보다 작은 값 뒤에 삽입하고 범위를.. [그래픽스] Vertex Buffer을 생성할 때 Usage를 Dynamic으로 하면 터지는 이유 생성 자체가 안된다는건 아니다. 하지만 다이나믹 버퍼로 생성하기 위해서는 정해진 규칙을 따라야 한다. 처음에 map, unmap을 통해 채워야한다고한다. https://learn.microsoft.com/ko-kr/windows/win32/direct3d11/overviews-direct3d-11-resources-buffers-vertex-how-to?redirectedfrom=MSDN 꼭짓점 버퍼를 만드는 방법 - Win32 apps 이 항목에서는 정적 꼭짓점 버퍼, 즉 변경되지 않는 꼭짓점 버퍼를 초기화하는 방법을 보여줍니다. learn.microsoft.com [그래픽스] Compute Shader 써보기 m_context->Dispatch(UINT(ceil(m_screenWidth / 256.0f)), m_screenHeight, 1); CS는 PS와 다르게 어떤 픽셀을 그릴지 선택할 수 있다고 했었다. Dispatch의 인자를 보면 그룹을 나누고 있다. screenwidth 가 1280일 경우 첫번째 인자는 5이므로 가로를 5개 그룹으로 나누고 세로는 m_screenHeight개 그룹으로 나눈다. 그리고 2차원 화면이므로 z는 그룹으로 나눌 필요 없으므로 1개이다. RWTexture2D gOutput : register(u0); 이제 CS 쉐이더 코드를 보자. 먼저 맨 위에 RWTexture라고 써있는데 RW의 의미는 ReadWrite, 읽고 쓰기가 둘 다 가능한 Texture2D라는 의미다. 괄호안에.. [그래픽스] Compute Shader 개념 및 구조 GPU와 VRAM 사이 데이터 전송 속도는 CPU 와 RAM 사이 데이터 전송속도보다 훨씬 빠르다. 그리고 CPU와 GPU간 데이터 전송 속도가 가장 느리다. GPU와 VRAM이 데이터를 주고 받을 때 CPU보다 훨씬 빠른 이유는 무엇일까? CPU는 RAM과 데이터를 주고 받을 때 L1,L2,L3 캐시에서 데이터를 찾는다. L1에 데이터가 없다면 L2, 그 다음은 L3, 그다음은 RAM까지 내려간다. 그리고 코어가 많으면 멀티스레딩을 할 때 훨씬 더 빨리 계산을 할 수 있다. 코어가 많을 수록 스레드를 많이 띄워서 계산할 수 있기 때문인다. GPU는 최근 것은 코어가 4000개가 넘을 정도로 많은 것에 비해 CPU는 열몇개 남짓이다. 그래서 속도가 차이날 수 밖에 없다. 하지만 CPU는 코어가 전부 다른.. [그래픽스] 부드러운 그림자 - PCSS PCF보다 그림자를 부드럽게 표현해보자! PCSS(Percentage Closer Soft Shadows) umbra - 물체에 가려 완전히 빛이 들어오지 않는 부분 penumbra - 그림자가 지지만 완전히 가려지지 않아 빛이 완전히 들어오지 않는 부분 우리말로는 반그림자라고도 한다. 지금까지는 조명이 점이라고 가정했지만 PCSS에서는 조명에 넓이가 있다고 가정한다. 왼쪽처럼 조명에 넓이가 있으면 penumbra(빨간색 영역)가 생긴다. 그리고 빛을 가리는 물체가 그림자가 드리워지는 물체와 거리가 멀어질수록 penumbra의 영역이 넓어진다. (오른쪽 그림) PCSS는 내부적으로 PCF를 사용한다. PCF는 일정 거리안에 있는 픽셀들로부터 샘플링을 하고 그 거리를 정할 수가 있었다. 그 거리를 잘 조절.. [그래픽스] 부드러운 그림자 - PCF 앞서 작성한 그림자 글대로 그림자를 구현하면 가장자리가 울퉁불퉁해 보인다. 이것을 해결하기 위해 함수를 조금 수정해보자. /* // 3. 쉐도우맵에서 값 가져오기 float depth = shadowMap.Sample(shadowPointSampler, lightTexcoord).r; // 4. 가려져 있다면 그림자로 표시 if (depth + 0.001 < lightScreen.z) shadowFactor = 0.0; */ shadowMap.SampleCmpLevelZero(shadowCompareSampler, lightTexcoord.xy, lightScreen.z - 0.001).r; 3번과 4번 과정을 SampleCmpLevelZero라는 함수로 합칠 수 있다. shadowPointSampler.. [그래픽스] 그림자 RayTracing에서 그림자를 구현할 때는 우리가 보고 있는 시점으로부터 위치로부터 광원까지 ShadowRay를 쏴서 그 사이 물체가 있으면 그림자가 생기게 하는 방식으로 구현했다. 하지만 Rasterization에서는 어떤 지점을 렌더링할 때 삼각형 단위로 그리기때문에 다른 곳에 물체가 있는지를 알 수 없다. 그래서 사용하는 방법은 우리가 시점으로부터 물체의 Depth Map을 만들었듯이 광원으로부터 물체의 Depth Map을 만드는 것이다. 이것을 Shadow Map이라고 부른다. // 그림자맵 만들기 AppBase::SetShadowViewport(); // 그림자맵 해상도 AppBase::SetPipelineState(Graphics::depthOnlyPSO); for (int i = 0; i .. 이전 1 2 3 4 5 6 7 8 ··· 39 다음