Category Archives: Homework

HW3

그래픽스 프로그래밍 실습 #3
– 3D Modeling, Texture mapping, Alpha blending
(321190)
강사: 박경신
2013년 5월 28일


제출 방법: 2013년 6월 10일(월) 밤12시까지
(e-learning 강의실에 실행파일과 소스코드와 리포트를 전부 “학번이름_숙제3.zip”으로 묶어서 제출하도록 합니다. 또한, 소스코트 폴더에 .cpp만 담지 말고 비주얼 스튜디오에서 만든 프로젝트 폴더를 담기 바랍니다.)


참고자료: moglclass.zip
http://dis.dankook.ac.kr/lectures/cg13/moglclass.zip
(반드시 OpenAL 설치 요망 http://dis.dankook.ac.kr/lectures/cg13/entry/OpenAL-Getting-Started)
NOTE: 실습 2의 모든 기능을 그대로 놓은 상태에서 추가 작업을 한다.


1. 본인이 제작한 Hierarchical Transformation 구조를 가진 모빌에 텍스쳐와 알파 블렌딩을 넣어준다. (30점)
-물체에 OpenGL texture mapping을 추가한다. 이때 적어도 2개 이상의 texture image을 사용한다.


2. 전체 장면을 꾸며주기 위하여, 주변에 2개 이상의 3차원 모델을 추가로 그려준다. 이 3차원 모델은 OpenGL의 alpha blending과 texture mapping을 적용하여 semi-transparent하게 만든다. 예를 들어, 구(sphere)에 알파 블랜딩을 적용한 나무잎 텍스쳐를 매핑시켜서 나무를 그리면 보다 입체적인 모습의 표현이 가능하다. (15점)
-본인이 3DMAX나 MAYA로 (텍스쳐가 있는) 제작한 모델을 넣어줄 수도 있다. (단, 본인이 직접 제작하지 않고 가져왔을 시 그 출처를 밝힐 것)


3. 전체 장면에 움직이는 캐릭터 또는 물체 (예를 들어, 비행선, 붕붕자동차)을 추가한다. (15점)
-‘1’ KEY를 눌렀을 때, 1인칭 시점(camera viewpoint)으로 변하고 전후좌우(UP/DOWN/LEFT/RIGHT)로 움직일 수 있다. 카메라의 기본 위치는 동산의 정중앙에서 바깥쪽을 바라보는 방향을 향한다.
-‘2’ KEY를 눌렀을 때, 시점이 본인이 제작한 움직이는 물체(비행선, 붕붕자동차)을 타고 있는 시점으로 변환한다.


4. 사운드 클래스 (OpenAL 라이브러리)를 사용하여 배경음악과 이벤트 사운드 추가한다. (10점)


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

OpenAL Getting Started

OpenAL http://www.openal.org/

1. Download OpenAL 1.1 SDK & Installer for Windows and install them


  • OpenAL 1.1 SDK for Windows

  • OpenAL 1.1 Installer for Windows 

    2. Set environment variables



    • Go to Control panel -> System icon -> Advanced tab -> Environment variables
    • Create a new variable called “OAL_ROOT” and set the value “C:\Program Files\OpenAL 1.1 SDK” for Visual Studio .Net 2010

    3. In Visual Studio .Net 2010



    • Configuration Properties -> C/C++ -> General -> Additional Include Directories “$(OAL_ROOT)\include” 추가
    • Configuration Properties -> Linker -> General -> Additional Library Directories “$(OAL_ROOT)\libs\Win32” 추가
    • Configuration Properties -> Linker -> Input -> Additional Dependencies “OpenAL32.lib” 추가
  • HW2

    그래픽스 프로그래밍(321190) 실습 #2
    – 3D graphics & hierarchical transformation & shading
    (321190)
    강사: 박경신
    2013년 5월 9일7836815763.hwp

    제출 방법: 2013년 5월 27일(월) 밤12시까지
    (e-learning 강의실에 실행파일과 소스코드와 리포트를 전부 “학번이름_숙제2.zip”으로 묶어서 제출하도록 합니다. 또한, 소스코트 폴더에 .cpp만 담지 말고 비주얼 스튜디오에서 만든 프로젝트 폴더를 담기 바랍니다.)


    참고자료: moglclass-shaded.zip


    0. Display window 크기는 1000 x 1000로 한다.


    1. Hierarchical transformation 구조를 가진 ‘모빌‘을 만든다. (30점)
    -Geometry 예제 (circle, cube, cylinder, sphere, square)와 Transformation 예제 (car, orbit, planet, robot, simple solar system)를 참고하여 본인만의 ‘모빌 (모빌의 내부 구성은 창의적으로)’를 구성하여 만든다.
    -‘모빌’은 적어도 5개 이상의 3차원 물체 (예를 들어, 별, 달, 눈송이, 귀염둥이 인형, 등등)가 달려있다. (보고서에 모빌 스케치 첨부할 것)
    -‘모빌’에 붙어있는 물체의 위치는 균형(balance)를 고려해서 안정적으로 보이도록 한다.
    -‘모빌’ 물체는 적어도 2간계 이상의 계층적 구조를 갖는다.


    2. ‘Space bar’-key를 누르면 ‘모빌’이 움직이거나/멈춘다. (20점)
    -‘space bar’-key는 ‘모빌’을 움직이거나 멈추게 하는 toggle button이다.
    -움직이는 모드에서는 ‘모빌’이 천천히 좌우로 움직이거나 회전을 한다. – 힌트: Idel() 함수를 사용할 것.
    -가능하다면, 2단계 이상의 계층적 구조의 (즉, 부분적으로 다른) 움직임을 ‘모빌’ 물체에 적용하도록 한다.


    3. 전체적인 장면에 조명과 재질을 사용하여 3차원 장면의 사실감을 더한다. (10점)


    4. ‘모빌’의 모양을 곡선과 곡면을 사용하여 디자인하거나, ‘모빌’의 3차원 물체 중에 하나는 창의적으로 본인이 직접 정점의 정보 (Vertex Position과 Normal)을 지정해서 만들어 본다. (10점)


    5. 창의성, 소스코드 주석처리, 리포트 (30점)

    HW1

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


    – 2D graphics & interaction


    (321190)


    강사: 박경신


    2013326



    9336905146.hwp제출 방법: 2013412(금) 12시까지


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


      참고자료: moglclass_starter.zip


      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. 자기 자신의 이름 로고를 만든다. (20)
    -3차원의 자기 자신의 이름로고를 만든다
    .
    로고는 반드시 움직이는 개체이어야 한다
    .
    -GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_LINE_STRIP 등 여러 개의 다른 기하학적 기본요소들을 반드시 사용해본다
    .


    3. 다양한 기하 속성 (attributes, color, line width, etc)을 이용하여, 로고 주변에 여러 가지 재미있는 캐릭터 디자인을 추가한다. (20)
    -3차원의 자기 자신을 표현하는 캐릭터
    를 만든다
    수학적인 공식 또는 기본색이나 모양을 변형하여 날아다니는 잠자리, 나비, 풍선, 각종 캐릭터등을 만든다.


    4. 메인 프로그램을 작성한다. (10)
    -keyboard
    -spacebar-key를 누르면, 움직이는 로고를 다시 처음부터 볼 수 있다
    .
    -q-key 또는 ESC-key를 누르면, 프로그램을 종료한다. 


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

    HW0 (Due by 2013/03/21)

    HW0 – GLM 라이브러리를 사용하여 정점과 색버퍼를 지정한 color triangle 그림을 그려온다~
    /// colortriangle.cpp에서 아래와 같이 추가 수정해본다.



    #include <glm/glm.hpp>
    #include <vector>


    std::vector<glm::vec4> vertexColors;
    std::vector<glm::vec4> vertexPositions;

    void SetData()
    {
     vertexColors.push_back(glm::vec4(1.0f, 0.0f, 0.0f, 1.0f)); // red
     vertexColors.push_back(glm::vec4(0.0f, 1.0f, 0.0f, 1.0f)); // green
     vertexColors.push_back(glm::vec4(0.0f, 0.0f, 1.0f, 1.0f)); // blue
     vertexPositions.push_back(glm::vec4(-0.75f, -0.75f, 0.0f, 1.0f));
     vertexPositions.push_back(glm::vec4(0.75f, -0.75f, 0.0f, 1.0f));
     vertexPositions.push_back(glm::vec4(0.75f, 0.75f, 0.0f, 1.0f));


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


     // VBO
     glGenBuffers(2, &vbo[0]);
     // vertex position
     glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
     //glBufferData(GL_ARRAY_BUFFER, 12*sizeof(GLfloat), vertexPosition, GL_STATIC_DRAW);
     glBufferData(GL_ARRAY_BUFFER, 3*sizeof(glm::vec4), &vertexPositions[0], GL_STATIC_DRAW);
     glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
     glEnableVertexAttribArray(0);
     // vertex color
     glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
     //glBufferData(GL_ARRAY_BUFFER, 12*sizeof(GLfloat), vertexColor, GL_STATIC_DRAW);
     glBufferData(GL_ARRAY_BUFFER, 3*sizeof(glm::vec4), &vertexColors[0], GL_STATIC_DRAW);
     glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, 0);
     glEnableVertexAttribArray(1);


     glBindVertexArray(0);
    }