opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · light source 정의 •shading...
TRANSCRIPT
![Page 1: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/1.jpg)
1
Opengl 3
![Page 2: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/2.jpg)
Light Source 정의
• Shading calculations are enabled by
- glEnable(GL_LIGHTING)
• Must enable each light source individually
- glEnable(GL_LIGHTi) i=0,1…..
• Can choose light model parameters
- GL_FRONT, GL_BACK, GL_FRONT_AND_BACK
• Set the parameters for the light sourcegl
- glLightv(GL_LIGHT0, GL_POSITION, light0_pos);
- 광원 위치:GL_POSITION,
- Light source 종류: GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR,
• 예:glLightv(GL_LIGHT0, GL_AMBIENT, ambient0);
![Page 3: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/3.jpg)
Light Source 정의
gluLookAt(0, 2.0, 2.0, 0, 0, 0, 0, 1.0, 0);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
GLfloat diffuse0[4] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat ambient0[4] = { 0.1, 0.1, 0.1, 1.0 };
GLfloat specular0[4] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light0_pos[4] = { 2.0, 2.0, 2.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, light0_pos);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular0);
![Page 4: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/4.jpg)
Spot Light
•Spot Light 효과를 적용해보고 그 결과를
확인한다.
![Page 5: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/5.jpg)
Multiple Light
•Ambient, diffuse, specular 설정
![Page 6: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/6.jpg)
Point Light
•Point Light 효과를 위해 다음과 같이
설정한다.
![Page 7: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/7.jpg)
물체의 표면특성 정의
GLfloat mat_ambient[4] = { 0.3f, 0.0f, 0.0f, 1.0f };
GLfloat mat_diffuse[4] = { 0.6f, 0.0f, 0.0f, 1.0f };
GLfloat mat_specular[4] = { 0.8f, 0.6f, 0.6f, 1.0f };
GLfloat mat_shininess = 32.0;
// 폴리곤의 앞면의 재질을 설정
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess);
glutSolidTeapot(1.0);
![Page 8: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/8.jpg)
예제 8.2: 물체의 표면특성 정의
![Page 9: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/9.jpg)
물체의 표면특성 정의
![Page 10: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/10.jpg)
물체의 표면특성 정의
•다음과 같은 코드를 추가
-사면체를 이용하여 구를 생성하는 코드이다.
-보다 정확한 구를 생성하기 위해서는 n 값을
증가시킨다.
![Page 11: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/11.jpg)
물체의 표면특성 정의
•재귀적으로 구를 생성한다.
- Shading을 이해하려면 법선과 외적에 대한
지식이 필요하다.
![Page 12: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/12.jpg)
물체의 표면특성 정의
•Normal을 계산하는 루틴을 작성한다.
•Cross product를 계산하는 루틴을
작성한다.
![Page 13: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/13.jpg)
물체의 표면특성 정의
•Flat shading을 위한 루틴을 작성하고
결과를 확인한다.
![Page 14: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/14.jpg)
물체의 표면특성 정의
•Smooth shading을 위해 기존 코드를
다음과 같이 수정한다.
![Page 15: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/15.jpg)
Texture Mapping glBegin(GL_QUADS);
glColor3f(0.4, 0.4, 0.4);
glVertex3f(-0.2, -0.2, -0.2);
glColor3f(0.4, 0.4, 0.4);
glVertex3f(-0.2, 0.2, -0.2);
glColor3f(0.4, 0.4, 0.4);
glVertex3f(0.2, 0.2, -0.2);
glColor3f(0.4, 0.4, 0.4);
glVertex3f(0.2, -0.2, -0.2);
glColor3f(0.4, 0.4, 0.4);
glVertex3f(-0.2, -0.2, 0.2);
glColor3f(0.4, 0.4, 0.4);
glVertex3f(-0.2, 0.2, 0.2);
……
glEnd();
![Page 16: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/16.jpg)
Texture Mapping FILE* f = fopen("mymap.bmp", "rb");
unsigned char info[54];
fread(info, sizeof(unsigned char), 54, f); // read the 54-byte header
// extract image height and width from header
int width = *(int*)&info[18];
int height = *(int*)&info[22];
int size = 3 * width * height;
unsigned char* data = new unsigned char[size];
fread(data, sizeof(unsigned char), size, f);
fclose(f);
for (i = 0; i < width; i ++)
for (j = 0; j < height; j ++)
{
mytexels[j][i][0] = data[k * 3 + 2];
mytexels[j][i][1] = data[k * 3 + 1];
mytexels[j][i][2] = data[k * 3];
k++;
}
![Page 17: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/17.jpg)
Texture Mapping
GLubyte mytexels[512][512][3];
glTexImage2D(GL_TEXTURE_2D, 0, 3, 512, 512, 0, GL_RGB,
GL_UNSIGNED_BYTE, mytexels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
![Page 18: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/18.jpg)
Texture Mapping
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2d(0.0, 0.0);
glVertex3f(-0.2, -0.2, -0.2);
glTexCoord2d(1.0, 0.0);
glVertex3f(-0.2, 0.2, -0.2);
glTexCoord2d(1.0, 1.0);
glVertex3f(0.2, 0.2, -0.2);
glTexCoord2d(0.0, 1.0);
glVertex3f(0.2, -0.2, -0.2);
glTexCoord2d(0.0, 0.0);
glVertex3f(-0.2, -0.2, 0.2);
glTexCoord2d(1.0, 0.0);
![Page 19: Opengl 3 - khu.ac.krcvlab.khu.ac.kr/gl12.pdf · 2018. 4. 30. · Light Source 정의 •Shading calculations are enabled by - glEnable(GL_LIGHTING) •Must enable each light source](https://reader033.vdocuments.site/reader033/viewer/2022060917/60aa80fa01cff66ec203b84c/html5/thumbnails/19.jpg)
Texture Mapping