Computer Graphics 18

Chapter15. 텍스쳐

텍스쳐의 필요성 지난 시간까지 살펴보면서 하나의 모델이 만들어지기 까지 수많은 연산 과정이 있었다. 그런데, 울퉁불퉁한 목재, 표면의 굴곡등을 3D 모델링한다면 그만큼 더 많은 연산이 필요할 것이다.(거의 불가능에 가깝다) 반면, 3D모델링을 하지 않는다면 굴곡에 의해 발생하는 음영감을 표현할 수 없어 사실감이 저하된다. 따라서, 3D모델링과 텍스쳐를 적절히 조화시키는것이 매우 중요하다 텍스쳐는 마치 시트지를 붙이듯이 사실감이 높게 적용된 그림을 오브젝트 표면에 입히는 것이다. 라이트 매핑 : 빛의 효과 등을 미리 계산하여 이미지로 만든 후, 물체의 표면 위에 올리는 것도 가능하다 주변 매핑 : 물체 외부환경을 매핑하여, 반사되고 있는 반짝이는 물체면을 표현한다. 텍스쳐의 개념 텍스쳐는 특정 모양의 이미..

Computer Graphics 2021.06.14

Chapter14. 모델 Load & 조명주기

include #include #include #include #include #include using namespace std; class CPoint2f{ //2차원 실수 좌표를 가지는 class public : vector d{ 0, 0}; }; class CPoint3f{ //3차원 실수 좌표를 가지는 class public : vector d{ 0, 0, 0}; }; class CPoint3i{ //3차원 정수형 좌표를 가지는 class public : vector d{ 0, 0, 0}; }; class CFace{ //면을 이루는 vertex pairs. 1/1/1 2/2/1 4/3/1 3/4/1 네개의 정점이 하나의 면을 이룬다 public : vector v_pairs; // 1/1/1이..

Computer Graphics 2021.06.09

Chapter13-1. 조명과 음영 OpenGL 코딩

전역 주변광 3차원 공간에 벽, 바닥, 공 만들기 전역 주변광 추가 glEnable(GL_LIGHTING)의 효과 확인 glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); GLfloat light_global_ambient[] = {0.0, 0.0, 0.1, 1.0}; //ambient : 주변광 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light_global_ambient); 위치성 광원 추가 위치성 광원 1개 추가 광원의 위치 변경 테스트 광원의 색상 변경 테스트 GLfloat bNonDirectionalLight = 1.0; //DirectionalLight가 아니다. GLfloat light..

Computer Graphics 2021.06.09

Chapter13. 조명과 음영

빛과 그림자 "Let there be Light" 조물주가 세상을 만들 때 가장먼저 빛을 만들었다. 빛이 없으면 사물을 보는 것이 불가능하다 사물의 색상은 빛이 물체에 흡수/반사됨을 통해 만들어진다 빛이 물체에 비췰 때 그림자가 생성된다 조명에 따라 물체에 음영이 발생한다 빛의 종류 빛은 스스로 빛을 발산하는 광원(태양, 빛, 형광등 등..)으로부터 나옴 그리고 다른 물체에서 반사되어서 나오는 빛. 그래픽스에서는? 전역 조명과 지역 조명으로 나뉜다. 전역 조명 : 모든 곳에서 빛이 존재한다. 다른 물체에서 반사되어서 나오는 빛을 일일히 계산하기 어려워 만든 빛이다. 아무리 구석으로 들어가도, 문을 닫아도 빛은 존재한다. 지역 조명 : 광원에서 직접적으로 입사되는 빛 광원 광원은 스스로 빛을 발하는 물체이..

Computer Graphics 2021.06.08

Chapter12. 에일리어싱과 안티 에일리어싱

에일리어싱 원 신호 중 일부만 사용하기 때문에 발생하는 신호왜곡 야구를 할때 야구공이 날라옴에 따라 수 많은 위치적 변화가 발생할텐데, 동체시력이 좋은 사람은 이 위치를 모두 캐치해서 공을 치겠지만 동체시력이 안좋은 사람들은 위치를 놓치게되고 헛스윙을 할 것이다. 이 것과 같은 이치이다. 그래픽스 세계에서 에일리어싱은 어떨까? 우리가 3차원 공간 상의 레스터 그래픽에서는 정점 사이를 잇고, 이를 통해 모델링을 하게되는데 이를 래스터 그래픽으로 화소에 그리게 되면 아래 그림과 같은 모습일 것이다. 이러한 왜곡된 모습을 에일리어싱이라고 칭한다. 안티 에일리어싱 위에서 살펴본, 래스터 변환을 함에 따라서 발생하는 에일리어싱(계단 현상)을 해결하기 위해서 어떤 방식을 사용해야할까? 첫번째로, 더 많은 화소를 지..

Computer Graphics 2021.06.07

Chapter11. 래스터 변환

래스터 그래픽과 벡터그래픽 Vector Graphic : 두 좌표를 기준으로 연결된 선을 그리는 방식으로, 옛날 혹은 디스플레이에 선만 그려도되는 시스템에 사용된다디화소의 개념이 없어 해상도가 무한이다. 따라서 엘리어싱 문제(픽셀이 소실되는 문제), 프레임 버퍼 등이 없다. Raster Graphic : 래스터(Raster)는 그래픽스 시스템 안의 프레임 버퍼에서 화소(Pixel)의 2차원 배열(Array)을 의미한다. 한 픽셀들은 단일 색을 가지고 있고 이 픽셀을 채워나감으로써 하나의 그림이 완성되는 것. 그럼, 지난 시간까지 우리가 한 것은 뭘까? 가상의 3차원 공간 상에 그리고자 하는 물체를 놓았다. 그리고 그 물체에 기하변환을 가하여 원하는 모습으로 변환시켰다(모델 변환). 그리고 카메라의 위치나..

Computer Graphics 2021.06.07

Chapter10. 가시성 판단

가시성 판단이란? 가시성 판단이란 3차원 상에 존재하는 물체를 카메라로 촬영할 때 카메라로 촬영되는 부분(가시 부피) 외의 물체를 자르거나, 다른 물체에 의해 가려지는 물체를 자르거나, 뒷면을 자르는 등의 판단을 하는 것이다. 즉, 촬영해서는 안될 부분(가시 부피 외의 공간, 다른 물체에 가려진 부분)과 촬영하지 않아도 되는 부분(물체의 뒤쪽 면)을 판단함으로써 성능을 향상시키고 좀 더 명확한 world를 표현할 수 있게된다. 벡터 가시성 판단을 이해하기 위한 벡터의 기본 개념을 훑고 지나간다 유클리드 벡터 실수 공간 상에서 존재한다 방향과 크기만 존재하며, 시작점은 무시한다 그래픽스에서는 2,3차원 벡터를 다룬다 방향이 없이 크기만 있는 것이 스칼라(scalar)이다. 평면 두개의 벡터가 있으면, 두 ..

Computer Graphics 2021.06.06

Chapter09. 투영변환(gluPerspective) & 뷰포트 변환(glViewport)

투영 변환 지난 시간까지는 모델에 기하변환을 가하여 모델변환을 시키고, 전역 좌표계와 모델 좌표계에 대해서 공부했으며 카메라 좌표를 변환시켜서 시점을 변환시켰다. 이제는 카메라로 세계를 촬영했을 때, 촬영되지 않는 부분과 촬영되어지는 부분에 대해서 학습할 것이다. 카메라를 가까이서 촬영하여 보이지 않을 수도 있고 특정 오브젝트가 촬영되어지는 부분에서 벗어나서 촬영되지 않을 수 있다. 따라서, 촬영되지 않는 부분들을 삭제해주어야 하는데, 이 것이 투영변환 과정에 포함된다. 이 투영 변환은 크게 정사투영(Orthographics Projection), 원근투영(Perspective Projection)에 따라 달라진다. 정사투영(Othographics Projection) 정사투영은 쉽게말해서 원근감을 고려..

Computer Graphics 2021.06.05

Chapter08. 시점변환(gluLookat)

시점 변환 지난 시간까지 모델변환을 통해서 Object의 기하변환을 가하였고, 전역 좌표계와 모델 좌표계 등에 대해서 알았다. 이젠 Viewer의 관점에서 오브젝트를 어디서, 어떤 방향으로 볼 것인지를 결정해줄 것이다. 가장 핵심적인 함수는 gluLookat이고 이전 시간에도 사용해왔다. void WINAPI gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez, GLdouble centerx,GLdouble centery,GLdouble centerz, GLdouble upx,GLdouble upy,GLdouble upz ); : View Transform Matrix를 정의하는 함수 : 시점 좌표계를 정의하는 함수로, (eyeX, eyeY, eyeZ)에 있는 카..

Computer Graphics 2021.06.05

Chapter07. GL-Viewing : 행렬&좌표계&모델 변환

Homogeneous 좌표계우리는 3차원 공간상의 오브젝트의 위치를 나타낼 때 (x,y,z)좌표를 이용한다. 그리고 그 오브젝트는 수많은 정점(vertex)로 이루어져 있기 때문에 하나하나의 정점 모두가 3차원 좌표를 가지고 있을 것이다. 하지만 호모지니어스 좌표계에서는 또 하나의 좌표인 w를 제시하였으며 이제 (x,y,z,w)벡터를 이용해야 한다. 아래를 머릿속에 박아두자w == 1이면, 벡터(x,y,z,1)은 공간상에서의 위치이다.w == 0이면, 벡터(x,y,z,0)은 방향이다.이제부터 하나하나 살펴보면서, 이 둘의 차이도 함께 알아보자변환 행렬3D 그래픽스에서는 4x4행렬을 주로 사용하며, 이들은 (x,y,z,w)버텍스들을 변형하게 해준다. 이는 버텍스를 행렬로 곱함으로써 이루어진다. 행렬 x 버..

Computer Graphics 2021.06.01