HW7

Hierachical transformation 3D geometry (eg. your name)를 3가지 방식으로 만들고 구현방식 차이점을 분석한다.

SimpleCube3d를 참고한다.

-geometryPositionColor (lab10-GeometryPositionColorOrientationCamera)

-geometryPositionNormal & Lighting & Material (lab11-GeometryPositionNormalMultipleLights3 )

-geometryPositionNormalTexture & Lighting & Material & TextureMapping (lab13-TextureShadedGeometry & moglclass17(updated))

//////////MPerPixelShadingTexture.vs

// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vPosition; // vertex position (in model space)
layout(location = 1) in vec2 vTexCoord; // texture coordinate (in model space)
layout(location = 2) in vec3 vNormal; // vertex normal (in model space)

 

 

TextureShadedGeometry

lab13-TextureShadedGeometry

Texture2D 클래스 사용한 Texture Mapping 정의

GeometryPositionNormalTexture 클래스 사용

‘g’-key 사용, Texture Pyramid->Cube->Sphere->Cylinder->Torus->Parallelepiped->Grid 변환

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;
}

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 라이브러리를 추가하고 링크한다.

HW6

quad(정점이 4개) vs grid(100개의 quad)

-Gouraud Shading (PerVertexShading)

-Phong Shading (PerPixelShading)

-Multiple Lighting (MPerPixelShading)

차이점을 비교해본다.