lab14-TextureShadedQuad-FilteringWrappingAnimation

lab14-TextureShadedQuad-FilteringWrappingAnimation

animatedTexture (flipbook animation)

animatedTexture

texture filtering
// LL mag nearest – min nearest
// LR mag linear – min linear
// UL mag linear – min linear – mipmap nearest
// UR mag linear – min linear – mipmap linear

textureFiltering

texture wrapping – texCoords LL(-1, -1), LR(3, -1), UL(-1, 3), UR(3, 3)
// LL CLAMP
// LR CLAMP_TO_EDGE
// UL REPEAT
// UR MIRRORED_REPEAT
textureWrapping

lab13-textureShadedGeometryCone

Cone class (다각뿔 클래스)

lab13-TextureShadedGeometry-Pyramid2

Pyramid

void Cone::init()
{
numVertices = 0;
glm::vec3 n(0.0f, 0.0f, 0.0f);
float xTexCoord = 0.0f;
float dslice = 1.0f / slices;

float theta = (float)(2 * M_PI / slices);
for (int i = 0; i < slices; i++)
{
glm::vec3 v1, v2, v3;
// V1
v1[0] = p[0];
v1[1] = p[1] + height;
v1[2] = p[2];
// V2
v2[0] = p[0] + radius * cosf(theta * i);
v2[1] = p[1];
v2[2] = p[2] + radius * sinf(theta * i);
// V3
v3[0] = p[0] + radius * cosf(theta * ((i + 1) % slices));
v3[1] = p[1];
v3[2] = p[2] + radius * sinf(theta * ((i + 1) % slices));
// Normal
glm::vec3 n = glm::cross((v2-v1), (v3-v1));
n = glm::normalize(n);
printf(“V1: %f %f %f\n”, v1[0], v1[1], v1[2]);
printf(“V2: %f %f %f\n”, v2[0], v2[1], v2[2]);
printf(“V3: %f %f %f\n”, v3[0], v3[1], v3[2]);
printf(“N: %f %f %f\n\n”, n[0], n[1], n[2]);

// V1
vbo.addData(&v1, sizeof(glm::vec3)); // vertex position
vbo.addData(&glm::vec2(xTexCoord + dslice * 0.5f, 1.0f), sizeof(glm::vec2)); // vertex texture coordnate (TopCenter)
vbo.addData(&n, sizeof(glm::vec3)); // vertex normal
// V2
vbo.addData(&v2, sizeof(glm::vec3)); // vertex position
vbo.addData(&glm::vec2(xTexCoord, 0.0f), sizeof(glm::vec2)); // vertex texture coordnate
vbo.addData(&n, sizeof(glm::vec3)); // vertex normal
// V3
vbo.addData(&v3, sizeof(glm::vec3)); // vertex position
vbo.addData(&glm::vec2(xTexCoord + dslice, 0.0f), sizeof(glm::vec2)); // vertex texture coordnate
vbo.addData(&n, sizeof(glm::vec3)); // vertex normal

xTexCoord += dslice; // increment texCoord
numVertices += 3;
}

createVAO();
isLoaded = true;
}

 

HW3

단국대학교 응용컴퓨터공학 컴퓨터그래픽스 (2016년 가을학기) 실습

 

과목코드 : 514780

강사 : 박경신

날짜 : 2016년 11월 18 일

실습 : HW3 Due by 12/9

요약 : 여러 개의 3차원 객체 (3D objects) 모델을 전체 장면 World에 배치시키고 움직임을 넣어본다.

 

참고자료: moglclass.zip

https://www.dropbox.com/s/ca55a0prrj1n64x/moglclass16.zip?dl=0

(반드시 OpenAL 설치 요망 http://dis.dankook.ac.kr/lectures/cg16/entry/OpenAL-Getting-Started)

 

(e-learning 강의실에 실행파일과 소스코드와 리포트를 전부 학번이름_숙제3.zip으로 묶어서 제출하도록 합니다. 또한, 소스코트 폴더에 *.cpp만 담지 말고 비주얼 스튜디오에서 만든 프로젝트 폴더를 담기 바랍니다.) HW2의 기능을 활용해서 3차원 장면을 만든다.

 

– 실습문제

  1. HW2 가을 풍경 ‘꽃/나무/캐릭터’ 등 본인이 제작한 계층적 변환 구조(Hierarchical transformation)를 가진 3차원 객체에 텍스쳐를 넣어준다.

– 물체에 OpenGL texture mapping을 추가한다. 이때 적어도 2개 이상의 texture image를 사용한다.

 

  1. 전체 장면을 꾸며주기 위하여, 주변에 2개 이상의 3차원 모델을 추가로 그려준다. 이 3차원 모델은 OpenGL의 텍스쳐매핑과 알파블렌딩을 적용한다. 예를 들어, 구(Sphere)에 알파 블렌딩을 적용한 나뭇잎 텍스쳐를 매핑시켜서 나무를 그려주면 보다 입체적인 모습의 표현이 가능하다.

– 본인이 3DMAX나 MAYA로 텍스쳐가 있는 모델을 넣어줄 수도 있다. (단, 출처를 밝힐 것)

 

  1. 전체 장면에 움직이는 캐릭터 또는 물체 (예를 들어, 떨어지는 낙엽, 잠자리 등)을 추가한다.

– 1-KEY를 눌렀을 때, 1인칭 시점(camera viewpoint)으로 변하고 전후좌우(UP/DOWN/LEFT/RIGHT)로 움직일 수 있다. 카메라의 기본 위치는 꽃밭의 정중앙에서 바깥쪽을 바라보는 방향을 향한다.

– 2-KEY를 눌렀을 때, 시점이 본인이 제작한 움직이는 물체(낙엽, 잠자리)의 시점으로 변환한다.

 

  1. 사운드 클래스 (OpenAL 라이브러리)를 사용하여 배경음악과 이벤트 사운드를 추가한다. 위의 코드로 하나의 완성된 장면을 구성하는 프로그램을 작성하고, 실행 화면과 코드를 첨부하시오.

simage library

COIN3D simage library (http://www.coin3d.org/lib/simage)

  • COIN3D simage가 제공하는 이미지 포멧은 JPEG, PNG, GIF, TIFF, RGB, PIC, TGA, EPS등 다양하다.
  • COIN3D의 simage library를 사용하려면, 프로젝트에 additional library and include directory를 추가해야한다. 기존 include 와 lib 디렉토리 안에 simage.h 과 simage1d.lib를 복사한다.
  • 그리고, 텍스쳐 이미지 로딩을 위해 프로젝트에 simage1.lib 라이브러리를 링크한다.

OPENAL GETTING STARTED

1. OpenAL 1.1 SDK & Installer for Windows를 다운로드하여 설치한다. (OpenAL11CoreSDK)

2. 기존 프로젝트 include 와 lib 디렉토리 안에 OpenAL 헤더파일 al.h, alc.h, efx.h, efx-creative.h, EFX-Util.h, xram.h과 OpenAL libs/Win32안에 있는 OpenAL32.lib, EFX-Util_MT, EFX-Util_MTDLL 라이브러리들을 복사한다.
3. 그리고, 본인 프로젝트 Additional Dependencies에 OpenAL32.lib 라이브러리를 추가하고 링크한다.