반응형

분류 전체보기 286

[홍정모의 그래픽스 새싹코스 Part1] 그림자 넣기

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 광원과 구에 의해서 생기는 그림자를 아래 사각형에 그려줘야 한다. 그림자 여기서는 물체에서 다시 광원으로 Ray를 쏴주는 방식으로 구현한다. 관측지점에서 각각 픽셀의 월드좌표에 Ray를 쏴주면 제일 먼저 충돌한 오브젝트를 찾을 수 있다. 그 충돌 지점에서 다시 광원방향으로 ShadowRay를 쏴준다. ShadowRay의 시작점은 충돌지점(hit.pos), 방향은 광원 방향(light.pos - hit.pos)이 될 것이다. 이때 충돌지점에서 바로 시작하면 자신과 충돌했다고 판별할 수 있으니 시작 위치를 광원 방향으로 조금 당겨준다. 여기서 다른 물체와 ..

CS/그래픽스 2023.12.10

[홍정모의 그래픽스 새싹코스 Part1] 삼각형 그리기

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 앞선 강의에서는 구를 그렸는데, 이번에는 삼각형을 그려보고자 한다. 구를 그릴 때와 같이, 삼각형을 그릴 때는 Ray가 삼각형 내부를 지나가는지 지나가지 않는지 확인하는 작업이 필요하다. 이를 IntersectRayTriangle 함수라고 하고, 매개변수로 활용하는 정보는 다음과 같다. orig : Ray의 시작점 dir : Ray의 방향인 v0, v1, v2 : 삼각형의 세 좌표 또한 매개변수를 레퍼런스로 받아 저장해줘야하는 정보는 다음과 같다. point : Ray와 삼각형의 충돌 지점 faceNormal : 삼각형의 법선 벡터 t : Ray에서 p..

CS/그래픽스 2023.12.09

[홍정모의 그래픽스 새싹코스 Part1] 원근감 만들기(Perspective View)

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 현재까지의 레이트레이싱은 각 픽셀에서 z축 방향으로(vec(0.0f, 0.0f, 1.0f 방향으로) 빛을 쏴줬기 때문에 원근감이 없다. 위의 구 3개는 반지름이 모두 같지만 파란색이 제일 뒤, 초록색이 가운데, 빨간색이 제일 가까이에 있다. 위 그림에는 2개의 문제점이 있는데 1. 원근감이 없기 때문에 세 구의 크기가 같아 보인다. 2. 파란색 구가 제일 뒤에 있고, 빨간색 구가 제일 앞에 있지만 렌더링할 때 이를 고려하지 않아서 초록색이 파란색, 빨간색이 초록색과 파란색에 가려지게 된다. 이 2가지 문제점을 해결해 볼 것이다. 원근감 주기 위에서 말한..

CS/그래픽스 2023.12.08

[홍정모의 그래픽스 새싹코스 Part1] 퐁 쉐이딩으로 구 만들기

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 퐁 쉐이딩(Phong reflection model)은 1975년 Bui Tuong Phong가 발표한 기술로, 광원에 따라 물체를 Ambient, Diffuse, Specular로 나눠 그리는 방법이다. 최근에는 훨씬 더 발전했기 때문에, 퐁 쉐이딩으로 물체를 그리는 것보다 더 실감 나게 그릴 수 있는 기술들이 많이 나왔다고 한다. Ambient ambient는 조명에 영향을 받지 않는 그 물체의 단순한 색상을 나타낸다. 따라서 조명이 없어도 ambient의 색깔이 기본적으로 나오게 되는데, 그래서 물리적인 사실과는 거리가 있다는 것을 숙지해야 한다...

CS/그래픽스 2023.12.07

[홍정모의 그래픽스 새싹코스 Part1] 구 만들기

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 구와 직선의 방정식 구를 스크린 좌표에 나타내기 위해서는 먼저 구의 방정식을 알아야한다. x를 구 위의 점, c를 중점, r을 반지름이라고 했을 때 구의 방정식은 다음과 같다. 그리고 점 x를 지나고 o에서 시작하는 방향벡터가 u인 직선의 방정식은 다음과 같다. 구와 직선의 교점관계 먼저 구와 직선이 만날 때는 3가지 관계로 분류할 수 있는데 1. 만나지 않는 경우 2. 한 점에서 접하는 경우 3. 두 점에서 만나는 경우가 있다. 직선과 구의 교점을 x라고 하자. 구의 방정식 x에 직선의 방정식을 대입하면 다음과 같다. 내적을 전개하면 아래와 같다. 여기서 ..

CS/그래픽스 2023.12.06

[홍정모의 그래픽스 새싹코스 Part1] 원 만들기

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. Case 1 : Screen 좌표 2차원 원을 그리고자 한다. 원은 중심과 그 반지름을 알면 2차원에서의 원을 그릴 수 있다. 모든 픽셀을 순환하면서 해당 픽셀이 원의 반지름보다 가깝거나 같으면 색칠을 해주고, 반지름보다 크면 색칠해주지 않으면 된다. IMGUI로 원의 중심, 반지름, 색칠할 RGB값이 미리 세팅되어 있다. 원을 그리는 코드는 Update에 있는데, 여기서 모든 픽셀을 순환하면서 원의 영역 안에 있으면 픽셀을 색칠해 주면 되었다. "영역 안에 있다"는 Circle.h 안의 IsInside 함수를 사용했는데, 해당 점의 좌표가 원 안에 있으면 ..

CS/그래픽스 2023.12.05

[백준 1725] 히스토그램 C++

문제 백준 1725 히스토그램 1725번: 히스토그램 첫 행에는 N (1 ≤ N ≤ 100,000) 이 주어진다. N은 히스토그램의 가로 칸의 수이다. 다음 N 행에 걸쳐 각 칸의 높이가 왼쪽에서부터 차례대로 주어진다. 각 칸의 높이는 1,000,000,000보다 작거나 같은 자 www.acmicpc.net 풀이 오름차순 Monotonic Stack을 활용했다. startIdxs(n) 배열을 사용했는데, 이 배열은 i번째 value에 대해, 그보다 작은 값이 그전 원소들 중에서 언제 처음 등장하는지 인덱스를 담고 있는 배열이다. 작은 값이 없다면 0을 담고 있다. 예를 들어서 5 3 2 3 5에 대해 startIdxs는 idx순서대로 각각 0, 0, 0, 2, 3이 된다. 넓이를 구할 때는 특정 원소가 ..

알고리즘/백준 2023.12.04

[백준 3015] 오아시스 재결합 C++

문제 백준 3015 오아시스 재결합 3015번: 오아시스 재결합 첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로 주어진다. 모든 사람의 키는 231 나노미터 보다 작다. 사람 www.acmicpc.net 풀이 N = 500,000이므로 O(N^2)으로 푸는 것은 불가능하다. 따라서 Monotonic Stack을 활용한다. Monotonic Stack [알고리즘] Monotonic Stack 개요 자신보다 큰 값(혹은 작은 값)이 언제 처음 오는지에 대해 구해야 할 때, 가장 쉽게 떠올릴 수 있는 방법은 2중 for 문을 쓰는 것이다. 예를 들어 다음과 같이 숫자가 있다고 할 때 3 4 1 5 2 각 ga..

알고리즘/백준 2023.12.02

[알고리즘] Monotonic Stack

개요 자신보다 큰 값(혹은 작은 값)이 언제 처음 오는지에 대해 구해야 할 때, 가장 쉽게 떠올릴 수 있는 방법은 2중 for 문을 쓰는 것이다. 예를 들어 다음과 같이 숫자가 있다고 할 때 3 4 1 5 2 각각의 숫자에 대해 그 수보다 큰 수가 처음 등장하는 인덱스(0부터 시작)를 나타내면 다음과 같다. num : 3(1) 4(3) 1(3) 5(x) 2(x) 2중 포문을 사용하게 되면, n개의 원소에 대해 시간 복잡도는 O(n^2)이다. 이를 스택을 사용하면 한 번만 순회를 돌면서, 즉 O(n)만에 자신보다 큰 인덱스를 찾을 수 있다. Monotonic Stack monotonic stack의 원리는 간단하다. stack에 들어있는 원소가 내림차순(혹은 오름차순)이 되게 정리만 해주면 된다. 1. 즉..

알고리즘 2023.11.30

[소스트리] 오류: System.ComponentModel.Win32Exception: 지정된 파일을 찾을 수 없습니다

개요 새 저장소를 만들고 싶어서 Clone을 위해 주소를 가져왔다. 유효한 소스 경로/URL이 아니라고 뜬다. 탐색을 눌러보니 뭔가 파일을 찾을 수가 없다. 찾아보니 Git을 내장으로 사용해서 발생하는 문제라고 한다. 해결책 도구 -옵션으로 들어간다 System Git을 사용한다. 저장소를 다시 정상적으로 찾을 수 있었다.

2023.11.14
반응형