Loading...
2021. 2. 7. 17:50

5. 2d 원 그리기

라인으로 사각형도 그리고 삼각형도 그리고, 쉽게쉽게 할수 있다. 그렇다면 원은 어떨까? 예전에 이 원그리기를 만들때 자료구조책을 보면서 만들었었는데 그 책이 어떤책인지 기억이 잘 나지 않는다. 결국 내용은 이전에 다루었던 브레즌햄? 알고리즘으로 그림. 지금보니 알고리즘이 잘 이해가 안가지만 굳이 시간을 쏟고 싶지 않아서 넘김. 코드를 기록으로 남김. 더보기 void Dib::DrawCircle(NVertex v1, NVertex v2) { int x_coor; int y_coor; int p_value; int r; NVertex coor; coor.x = 0; // 원의 방정식을 사용하여 원의 반지름 (coor.y)를 구한다. coor.y = sqrt((double)(v2.x - v1.x) * (v2...

2021. 2. 7. 17:40

4. 2D 클리핑.

지금 정리하는 내용들이 예전에 아카데미에서 했던 내용들을 잊지 않기 위해 적는것들이 대부분이라 그다지 중요하지 않다고 생각되는 것들은 빠르게 스킵. 클리핑의 경우 사실 나중에 더 자세히 다룰 내용이라 간단하게만 짚고 넘어감 2D에서의 클리핑. 클리핑에 대한 설명은 패스. 1. 클리핑 영역을 임시로 잡아준다. 2. 라이을 클리핑 영역 바깥에서 클리핑 영역을 관통되게 그려준다. 코드 내용도 별고 없다. 라인의 시작점과 끝점을 기준으로 기존에 만들었던 라인을 그리는데 그 영역중에 클리핑 영역에 속하지 않는 것들은 제외해주기만 하면 된다. 코드는 아래쪽을 클릭 더보기 /* v1 : 마우스 시작점 v2 : 마우스 끝점 xmin,ymin,xmax,ymax : 미리 정해둔 클리핑 영역 */ void Dib::Clip..

2021. 1. 7. 07:20

3. [software renderer] 선 그리기

점을 찍었다면 이제 선을 그리는 단계.점을 여러번 찍어서 선을 만들어 낸다. 여기에 선이 있다. 모니터 화면에서 이 선은 어떤 의미를 지니는 걸까? 우선 픽셀과 해상도에 대한 개념이있어야 한다.여기서는 선긋기 알고리즘에 대한 글이라는 기본적인 개념은 언급하지 않는다. 위 빨간선을 확대 해 보자.선이 무척 우둘투둘 하다.모니터의 픽셀을 기준으로 생각해 보자. V1에서 V2로 선을 그어보고 싶다. 사각형하나하나가 픽셀이며 v1에서 v2로 선을 긋는다면 과연 어느 픽셀들이 선택되어 질까?위 이미지는 하나의 예시일 뿐이며 어느 픽셀들을 선택할지는 알고리즘에 따라 다르다. 1. 직선의 방정식y = mx + n//직선의 방정식. y = mx + nvoid Dib::DrawLine(NVertex v1, NVertex..

2021. 1. 7. 06:49

2. [software renderer] 점찍기

3d api 없이 화면에 점을 찍기 위해서는 win api를 어느정도 알고 있어야 한다. 작업내용을 미리 살펴보면 아래와 같다.1. 윈도우창 만들기2. dib 사용하여 점 찍기 윈도우창을 만드는 기본개념들은 winapi 강좌를 참고하면 된다.window api 관련해서는 정말 양질의 정보를 제공해 주기 때문에처음 입문한다면 윈도우창 뿐 아니라 모든 예제를 한번씩 분석하는 것이 좋다. dib 또한 위 강좌의 21장 비트맵에 자세히 나와 있다.강좌내용은 없는걸 보니 책에만 기술되어 있는듯하다. 간단히 정리하자면 비트맵이라는 이미지를 저장하고 있는 그래픽 오브젝트가 있고dib는 윈도우즈가 지원하는 비트맵 포멧중 하나이다. 화면에 점을 찍기 위해서는 비트맵이 필요하다.이미지란 사실 데이터 덩어리라고 생각 할 수..

1. [software renderer] 시작

예전에 3d software renderer 만든적이 있는데..흐음..예전이라고 하니 벌써 12년전 이네....그때는 진짜 아무것도 모르고 시키니까 했는데.꽤나 유용했고 나중에도 계속 필요로 했던 개념들을 이때 배운듯 하다.10년넘게 일하면서 계속해서 이때 사용되었던 개념들을 자꾸 찾아보게 된다.이왕 이렇게 된거 처음부터 다시 차근차근 정리해 놓자 라는 마음으로software renderer 제작을 되짚어 보기로 했다.