Triangle Geometry

사용자 삽입 이미지
void Triangle::init()
{
 glm::vec3 t1 = p + v1;
 glm::vec3 t2 = p + v2;
 glm::vec3 t3 = p + v3;

 // face 1
 vbo.addData(&t1[0], sizeof(glm::vec3)); // vertex position
 vbo.addData(&color[0], sizeof(glm::vec3)); // vertex color
 vbo.addData(&t2[0], sizeof(glm::vec3));
 vbo.addData(&color[0], sizeof(glm::vec3));
 vbo.addData(&t3[0], sizeof(glm::vec3));
 vbo.addData(&color[0], sizeof(glm::vec3));

 numVertices = 3;

 // VAO & VBOs
 vbo.createVBO();
 vbo.bindVBO();
 vbo.uploadDataToGPU(GL_STATIC_DRAW);

 glGenVertexArrays(1, &vao);
 glBindVertexArray(vao);

 int iDataStride = 2 * sizeof(glm::vec3); // vertex & color only
 int iDataOffset = 0;
 glEnableVertexAttribArray(0);
 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, iDataStride, (void*)iDataOffset);
 iDataOffset += sizeof(glm::vec3);
 glEnableVertexAttribArray(1);
 glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, iDataStride, (void*)iDataOffset);

 isLoaded = true;
}

Parallelpiped

사용자 삽입 이미지
void Parallelpiped::init()
{
glm::vec3 pu = p + u;
glm::vec3 pv = p + v;
glm::vec3 pw = p + w;
glm::vec3 puv = p + u + v;
glm::vec3 pvw = p + v + w;
glm::vec3 puw = p + u + w;
glm::vec3 puvw = p + u + v + w;

// Front face
vbo.addData(&p[0], sizeof(glm::vec3));
vbo.addData(&pu[0], sizeof(glm::vec3));
vbo.addData(&puw[0], sizeof(glm::vec3));
vbo.addData(&p[0], sizeof(glm::vec3));
vbo.addData(&puw[0], sizeof(glm::vec3));
vbo.addData(&pw[0], sizeof(glm::vec3));

// Back face
vbo.addData(&puv[0], sizeof(glm::vec3));
vbo.addData(&pv[0], sizeof(glm::vec3));
vbo.addData(&pvw[0], sizeof(glm::vec3));
vbo.addData(&puv[0], sizeof(glm::vec3));
vbo.addData(&pvw[0], sizeof(glm::vec3));
vbo.addData(&puvw[0], sizeof(glm::vec3));


// Left face
vbo.addData(&pv[0], sizeof(glm::vec3));
vbo.addData(&p[0], sizeof(glm::vec3));
vbo.addData(&pw[0], sizeof(glm::vec3));
vbo.addData(&pv[0], sizeof(glm::vec3));
vbo.addData(&pw[0], sizeof(glm::vec3));
vbo.addData(&pvw[0], sizeof(glm::vec3));


// Right face
vbo.addData(&pu[0], sizeof(glm::vec3));
vbo.addData(&puv[0], sizeof(glm::vec3));
vbo.addData(&puvw[0], sizeof(glm::vec3));
vbo.addData(&pu[0], sizeof(glm::vec3));
vbo.addData(&puvw[0], sizeof(glm::vec3));
vbo.addData(&puw[0], sizeof(glm::vec3));


// Top face
vbo.addData(&pw[0], sizeof(glm::vec3));
vbo.addData(&puw[0], sizeof(glm::vec3));
vbo.addData(&puvw[0], sizeof(glm::vec3));
vbo.addData(&pw[0], sizeof(glm::vec3));
vbo.addData(&puvw[0], sizeof(glm::vec3));
vbo.addData(&pvw[0], sizeof(glm::vec3));


// Bottom face
vbo.addData(&pv[0], sizeof(glm::vec3));
vbo.addData(&puv[0], sizeof(glm::vec3));
vbo.addData(&pu[0], sizeof(glm::vec3));
vbo.addData(&pv[0], sizeof(glm::vec3));
vbo.addData(&pu[0], sizeof(glm::vec3));
vbo.addData(&p[0], sizeof(glm::vec3));


numVertices = 36;


// create VBO
vbo.createVBO();
vbo.bindVBO();
vbo.uploadDataToGPU(GL_STATIC_DRAW);


// create a VAO
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);


isLoaded = true;
}

HW1

그래픽스 프로그래밍(321190) 실습 #1


– 2D graphics & interaction


(321190)


강사: 박경신


2014321


 


제출 방법: 2014411() 12시까지


(e-learning 강의실에 실행파일과 소스코드와 리포트를 전부 “CG14_학번이름_숙제1.zip”으로 묶어서 제출하도록 합니다. 또한, 소스코트 폴더에 .cpp만 담지 말고 비주얼 스튜디오에서 만든 프로젝트 폴더에서 생성한 모든 것을 첨부 바랍니다.)


 


참고자료: lab2
사용자 삽입 이미지


사용자 삽입 이미지사용자 삽입 이미지
0. Display window
크기는 600 x 600perspective(45, 1, 1, 100)를 사용한다.


 


1. 기본 도형 (Geometry) 클래스를 만든다. (10)


-Quad, Circle, Triangle, Hexagon, Octagon, 등등 (네모, , 삼각, 육각, 팔각형 모양의 카페트) 클래스들 중 본인이 새로운 도형 3개 이상 작성


-Geometry 클래스는 각 도형 클래스들에 대한 추상 클래스


-Geometry에서 상속받은 Quad, Circle, Triangle, Hexagon, Octagon, etc


클래스는 네모, , 삼각, 육각, 팔각형 모양을 그리는 클래스이다.


 


2. 본인의 이름으로 꽃밭로고를 만든다. (40)


로고는 반드시 하나씩 자라나는 개체이어야 한다.


-GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_LINE_STRIP 등 여러 개의


다른 기하학적 기본요소들을 반드시 사용해본다.


다양한 기하 속성 (attributes, color, line width, etc)을 이용하여, 로고 주변에 여러 가지 재미있는 디자인을 추가한다.


수학적인 공식 또는 기본색이나 모양을 변형하여 날아다니는 잠자리, 나비, 풍선, 각종 캐릭터등을 만든다.


 


3. 메인 프로그램을 작성한다. (10)


-keyboard


-spacebar-key를 누르면, 움직이는 로고를 다시 처음부터 볼 수 있다.


-q-key 또는 ESC-key를 누르면, 프로그램을 종료한다.


 


4. 창의성, 소스코드 주석처리, 리포트 (40)

glm library installation

glm-0.9.5.2 라이브러리 설치
1. glm는 아래 파일을 다운 받아 unzip해 주고, glm 디렉토리안에 들어가서 glm 디렉토리를 아래와 같이 복사해줍니다.

glm-0.9.5.2.zip
사용자 삽입 이미지
2. C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include 폴더에 glm 폴더 전체를 붙혀넣기 하면 아래 그림과 같이 gl 아래에 glm이 생성됩니다.사용자 삽입 이미지3. C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\glm 내부는 아래 그림과 같습니다.사용자 삽입 이미지4. glm을 제대로 설치하지 않으면, 아래와 같은 에러가 발생합니다.사용자 삽입 이미지