검색결과 리스트
Program/OpenGL에 해당되는 글 6건
- 2011/08/28 앱창작터 전문개발자 과정 Day1 - OpenGL소스 주전자 명암효과
글
주전자 명함 효과 주기
이전글의 소스는 depth버퍼를 이용해 주전자의 면을 채워넣어
질감효과를 주는 것이였다. 하지만 그냥 면만 채운것이기 때문에
제대로된 주전자의 느낌을 살리지 못한다.
그래서 이번소스에서는 명암효과를 주어 좀더 자연스러운
주전자의 모습을 볼 수 있다.
물체와 라이트 의 속성을 정의
실질적으로 LightSet함수를 통해서 색을 지정함.
이전글의 소스는 depth버퍼를 이용해 주전자의 면을 채워넣어
질감효과를 주는 것이였다. 하지만 그냥 면만 채운것이기 때문에
제대로된 주전자의 느낌을 살리지 못한다.
그래서 이번소스에서는 명암효과를 주어 좀더 자연스러운
주전자의 모습을 볼 수 있다.
물체와 라이트 의 속성을 정의
- // material properties
- GLfloat mat_specular[] = {1.0, 1.0f, 1.0f, 1.0f };
- GLfloat mat_diffuse[] = { 1.0, 1.0f, 0.5f, 1.0f };
- GLfloat mat_ambient[] = { 0.5, 0.5f, 0.5f, 1.0f };
- GLfloat mat_shininess[] = { 128.0 };
- // light properties
- GLfloat lit0_specular[] = { 1.0, 1.0f, 1.0f, 1.0f };
- GLfloat lit0_diffuse[] = { 1.0, 0.0f, 0.4f, 1.0f };
- GLfloat lit0_ambient[] = { 0.1, 0.1f, 0.1f, 1.0f };
- GLfloat lit0_position[] = { -1.0, 1.0f, 1.0f, 1.0f };
- GLfloat lit1_specular[] = { 1.0, 1.0f, 1.0f, 1.0f };
- GLfloat lit1_diffuse[] = { 0.0, 1.0f, 1.0f, 1.0f };
- GLfloat lit1_ambient[] = { 0.1, 0.1f, 0.1f, 1.0f };
- GLfloat lit1_position[] = { 1.0, 1.0f, 1.0f, 1.0f };
실질적으로 LightSet함수를 통해서 색을 지정함.
- void LightSet(void) {
- glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
- glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
- glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
- glLightfv(GL_LIGHT0, GL_SPECULAR, lit0_specular);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, lit0_diffuse);
- glLightfv(GL_LIGHT0, GL_AMBIENT, lit0_ambient);
- glLightfv(GL_LIGHT1, GL_SPECULAR, lit1_specular);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, lit1_diffuse);
- glLightfv(GL_LIGHT1, GL_AMBIENT, lit1_ambient);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHT1);
- }
- glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- gluLookAt(0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //(카메라의 위치/ 바라보는 위치/상향백터)
-
void glMatrixMode(GLenum mode)
opengl는 GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE의 3개의 매트릭스를 사용해서 모델링을 화면에서 표시합니다. 만약 특정 좌표 (1,1,1) 위치에 삼각형을 그린다고 한다면, 해당 좌표는 GL_MODELVIEW 매트릭스를 곱해서 실제적인 위치를 지정합니다. 따라서 내부적인 위치 정보는 하나더라도 GL_MODELVIEW 매트릭스가 변경된다면 전혀 다른 위치에 삼각형이 그려집니다. 이렇게 그려진 삼각형은 GL_PROJECTION 매트릭스와 곱해서 화면 상에 투영됩니다. GL_MODELVIEW 매트릭스가 모델링에 대한 실존 위치라면 GL_PROJECTION 매트릭스는 해당 모델링을 최종적으로 어떻게 표시할지를 결정합니다. GL_TEXTURE는 텍스쳐를 적용하는 과정에서 텍스쳐 좌표를 지정할 때 곱해집니다.
주의 사항으로는 glBegin/glEnd 사이에서는 사용할 수 없습니다