void glLightf( GLenum light , GLenum pname , GLfloat param ); void glLighti( GLenum light , GLenum pname , GLint param ); void glLightfv( GLenum light , GLenum pname , const GLfloat *params ); void glLightiv( GLenum light , GLenum pname , const GLint *params );light には、設定する対象の照明を選択します
定数 | 解説 |
---|---|
GL_AMBIENT | 環境光を4つの整数値、または浮動小数点値で指定します 初期値は (0 , 0 , 0 , 1) |
GL_DIFFUSE | 拡散光を4つの整数値、または浮動小数点値で指定します 初期値は GL_LIGHT0 が(1 , 1 , 1 , 1)、それ以外は (0 , 0 , 0, 0) |
GL_SPECULAR | 鏡面光を4つの整数値、または浮動小数点値で指定します 初期値は GL_LIGHT0 が(1 , 1 , 1 , 1)、それ以外は (0 , 0 , 0, 0) |
GL_POSITION | 照明の位置を4つの整数値、または浮動小数点値で指定します 初期値は (0 , 0 , 1 , 0) |
GL_SPOT_DIRECTION | 照明の方向を3つの整数値、または浮動小数点値で指定します 初期値は (0 , 0 , -1) |
GL_SPOT_EXPONENT | 輝度の分布を単独の整数値、または浮動小数点値で指定します 初期値は 0 |
GL_SPOT_CUTOFF | 最大放射角度を単独の整数値、または浮動小数点値で指定します 範囲は 0 〜 90 までと、特別値の 180 のみが有効です 初期値は 180 |
GL_CONSTANT_ATTENUATION | 一定減衰の率を単独の整数値、または浮動小数点値で指定します 初期値は 1 |
GL_LINEAR_ATTENUATION | 線形減衰の率を単独の整数値、または浮動小数点値で指定します 初期値は 0 |
GL_QUADRATIC_ATTENUATION | 2次減衰の率を単独の整数値、または浮動小数点値で指定します 初期値は 0 |
#include <windows.h> #include <GL/gl.h> #include <GL/glut.h> const GLfloat lightPos[] = { 3 , 0 , -2 , 0 }; const GLfloat lightCol[] = { 1 , 0 , 0 , 1 }; void disp( void ) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_POLYGON); glVertex3f(0 , -0.9 , -2); glVertex3f(3 , -0.9 , -7); glVertex3f(0 , 0.9 , -2); glVertex3f(0 , -0.9 , -2); glVertex3f(-3 , -0.9 , -7); glVertex3f(0 , 0.9 , -2); glEnd(); glFlush(); } int main(int argc , char ** argv) { glutInit(&argc , argv); glutInitWindowPosition(100 , 50); glutInitWindowSize(400 , 300); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("Kitty on your lap"); glutDisplayFunc(disp); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(1 , -1 , -1 , 1 , 2 , 10); glLightfv(GL_LIGHT0 , GL_POSITION , lightPos); glLightfv(GL_LIGHT0 , GL_DIFFUSE , lightCol); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glutMainLoop(); return 0; }このプログラムでは赤い照明でオブジェクトの左側から照らしています
void glNormal3b(GLbyte nx , GLbyte ny , GLbyte nz); void glNormal3d(GLdouble nx , GLdouble ny , GLdouble nz); void glNormal3f(GLfloat nx , GLfloat ny , GLfloat nz); void glNormal3i(GLint nx , GLint ny , GLint nz); void glNormal3s(GLshort nx , GLshort ny , GLshort nz); void glNormal3bv(const GLbyte *v); void glNormal3dv(const GLdouble *v); void glNormal3fv(const GLfloat *v); void glNormal3iv(const GLint *v); void glNormal3sv(const GLshort *v);nx、ny、nz には、それぞれ新規の法線 x、y、z 座標を指定します
#include <windows.h> #include <GL/gl.h> #include <GL/glut.h> const GLfloat lightPos[] = { 3 , 0 , -2 , 0 }; const GLfloat lightCol[] = { 1 , 0 , 0 , 1 }; void disp( void ) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_POLYGON); glNormal3f(3 , 0 , -2); glVertex3f(0 , -0.9 , -2); glVertex3f(3 , -0.9 , -7); glVertex3f(0 , 0.9 , -2); glNormal3f(-3 , 0 , -2); glVertex3f(0 , -0.9 , -2); glVertex3f(-3 , -0.9 , -7); glVertex3f(0 , 0.9 , -2); glEnd(); glFlush(); } int main(int argc , char ** argv) { glutInit(&argc , argv); glutInitWindowPosition(100 , 50); glutInitWindowSize(400 , 300); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("Kitty on your lap"); glutDisplayFunc(disp); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(1 , -1 , -1 , 1 , 2 , 10); glLightfv(GL_LIGHT0 , GL_POSITION , lightPos); glLightfv(GL_LIGHT0 , GL_DIFFUSE , lightCol); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glutMainLoop(); return 0; }
void glMaterialf(GLenum face , GLenum pname , GLfloat param); void glMateriali(GLenum face , GLenum pname , GLint param); void glMaterialfv( GLenum face , GLenum pname , const GLfloat *params ); void glMaterialiv( GLenum face , GLenum pname , const GLint *params );face には設定を変更する面を指定します
定数 | 解説 |
---|---|
GL_AMBIENT | 環境光を4つの整数値、または浮動小数点値で指定します 初期値は (0.2 , 0.2 , 0.2 , 1) |
GL_DIFFUSE | 拡散光を4つの整数値、または浮動小数点値で指定します 初期値は GL_LIGHT0 が(0.8 , 0.8 , 0.8 , 1)、それ以外は (0 , 0 , 0, 0) |
GL_SPECULAR | 鏡面光を4つの整数値、または浮動小数点値で指定します 初期値は (0 , 0 , 0, 1) |
GL_EMISSION | 放射輝度を4つの整数値、または浮動小数点値で指定します 初期値は (0 , 0 , 0 , 1) |
GL_SHININESS | 鏡面光の指数を単一の整数値、または浮動小数点値で指定します 範囲は 0 〜 128 まで、初期値は 0 です |
GL_AMBIENT_AND_DIFFUSE | 環境光と拡散光を同時に指定します |
GL_COLOR_INDEXES | 環境光、拡散光、鏡面光のカラー指標を 3つの整数値、または浮動小数点値で指定します |
#include <windows.h> #include <GL/gl.h> #include <GL/glut.h> const GLfloat lightPos[] = { 5 , 0 , -5 , 1 }; const GLfloat lightCol[] = { 1 , 1 , 1 , 1 }; const GLfloat materialCol[] = { 0 , 0 , 0.5 , 1}; void disp( void ) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_POLYGON); glNormal3f(3 , 0 , -2); glVertex3f(0 , -0.9 , -2); glVertex3f(3 , -0.9 , -7); glVertex3f(0 , 0.9 , -2); glNormal3f(-3 , 0 , -2); glVertex3f(0 , -0.9 , -2); glVertex3f(-3 , -0.9 , -7); glVertex3f(0 , 0.9 , -2); glEnd(); glFlush(); } int main(int argc , char ** argv) { glutInit(&argc , argv); glutInitWindowPosition(100 , 50); glutInitWindowSize(400 , 300); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutCreateWindow("Kitty on your lap"); glutDisplayFunc(disp); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(1 , -1 , -1 , 1 , 2 , 10); glLightfv(GL_LIGHT0 , GL_POSITION , lightPos); glLightfv(GL_LIGHT0 , GL_DIFFUSE , lightCol); glMaterialfv(GL_FRONT_AND_BACK , GL_DIFFUSE , materialCol); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glutMainLoop(); return 0; }