#include "togl.h" #include "light.h" #include #include void make_ambient_light(float r, float g, float b, float local, float twoside) { float param_ambient[4] = {r, g, b, 1.0f}; float param_local[1] = {local}; float param_twoside[1] = {twoside}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, param_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, param_local); glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, param_twoside); } void make_directional_light(int n, float r, float g, float b, float ambient, float diffuse, float specular, float x, float y, float z) { float param_ambient[4] = {r*ambient, g*ambient, b*ambient, 1.0f}; float param_diffuse[4] = {r*diffuse, g*diffuse, b*diffuse, 1.0f}; float param_specular[4] = {r*specular, g*specular, b*specular, 1.0f}; float param_position[4] = {x, y, z, 0.0f}; if (n >= GL_MAX_LIGHTS) return; glLightfv(GL_LIGHT0+n, GL_AMBIENT, param_ambient); glLightfv(GL_LIGHT0+n, GL_DIFFUSE, param_diffuse); glLightfv(GL_LIGHT0+n, GL_SPECULAR, param_specular); glLightfv(GL_LIGHT0+n, GL_POSITION, param_position); // enable the light glEnable(GL_LIGHT0+n); } void make_point_light(int n, float r, float g, float b, float ambient, float diffuse, float specular, float x, float y, float z, float catten, float latten, float qatten) { float param_ambient[4] = {r*ambient, g*ambient, b*ambient, 1.0f}; float param_diffuse[4] = {r*diffuse, g*diffuse, b*diffuse, 1.0f}; float param_specular[4] = {r*specular, g*specular, b*specular, 1.0f}; float param_position[4] = {x, y, z, 1.0f}; float param_catten[1] = {catten}; float param_latten[1] = {latten}; float param_qatten[1] = {qatten}; if (n >= GL_MAX_LIGHTS) return; glLightfv(GL_LIGHT0+n, GL_AMBIENT, param_ambient); glLightfv(GL_LIGHT0+n, GL_DIFFUSE, param_diffuse); glLightfv(GL_LIGHT0+n, GL_SPECULAR, param_specular); glLightfv(GL_LIGHT0+n, GL_POSITION, param_position); glLightfv(GL_LIGHT0+n, GL_CONSTANT_ATTENUATION, param_catten); glLightfv(GL_LIGHT0+n, GL_LINEAR_ATTENUATION, param_latten); glLightfv(GL_LIGHT0+n, GL_QUADRATIC_ATTENUATION, param_qatten); // enable the light glEnable(GL_LIGHT0+n); } void make_spot_light(int n, float r, float g, float b, float ambient, float diffuse, float specular, float x, float y, float z, float spotdirx, float spotdiry, float spotdirz, float exp, float cutoff, float catten, float latten, float qatten) { float param_ambient[4] = {r*ambient, g*ambient, b*ambient, 1.0f}; float param_diffuse[4] = {r*diffuse, g*diffuse, b*diffuse, 1.0f}; float param_specular[4] = {r*specular, g*specular, b*specular, 1.0f}; float param_position[4] = {x, y, z, 1.0f}; float param_spot_dir[3] = {spotdirx, spotdiry, spotdirz}; float param_spot_exp[1] = {exp}; float param_cutoff[1] = {cutoff}; float param_catten[1] = {catten}; float param_latten[1] = {latten}; float param_qatten[1] = {qatten}; if (n >= GL_MAX_LIGHTS) return; glLightfv(GL_LIGHT0+n, GL_AMBIENT, param_ambient); glLightfv(GL_LIGHT0+n, GL_DIFFUSE, param_diffuse); glLightfv(GL_LIGHT0+n, GL_SPECULAR, param_specular); glLightfv(GL_LIGHT0+n, GL_POSITION, param_position); glLightfv(GL_LIGHT0+n, GL_SPOT_DIRECTION, param_spot_dir); glLightfv(GL_LIGHT0+n, GL_SPOT_EXPONENT, param_spot_exp); glLightfv(GL_LIGHT0+n, GL_SPOT_CUTOFF, param_cutoff); glLightfv(GL_LIGHT0+n, GL_CONSTANT_ATTENUATION, param_catten); glLightfv(GL_LIGHT0+n, GL_LINEAR_ATTENUATION, param_latten); glLightfv(GL_LIGHT0+n, GL_QUADRATIC_ATTENUATION, param_qatten); // enable the light glEnable(GL_LIGHT0+n); } void make_light(int n, float r, float g, float b, float ambient, float diffuse, float specular, float x, float y, float z, float w, float spotdirx, float spotdiry, float spotdirz, float exp, float cutoff, float catten, float latten, float qatten) { float param_ambient[4] = {r*ambient, g*ambient, b*ambient, 1.0f}; float param_diffuse[4] = {r*diffuse, g*diffuse, b*diffuse, 1.0f}; float param_specular[4] = {r*specular, g*specular, b*specular, 1.0f}; float param_position[4] = {x, y, z, w}; float param_spot_dir[3] = {spotdirx, spotdiry, spotdirz}; float param_spot_exp[1] = {exp}; float param_cutoff[1] = {cutoff}; float param_catten[1] = {catten}; float param_latten[1] = {latten}; float param_qatten[1] = {qatten}; if (n >= GL_MAX_LIGHTS) return; glLightfv(GL_LIGHT0+n, GL_AMBIENT, param_ambient); glLightfv(GL_LIGHT0+n, GL_DIFFUSE, param_diffuse); glLightfv(GL_LIGHT0+n, GL_SPECULAR, param_specular); glLightfv(GL_LIGHT0+n, GL_POSITION, param_position); glLightfv(GL_LIGHT0+n, GL_SPOT_DIRECTION, param_spot_dir); glLightfv(GL_LIGHT0+n, GL_SPOT_EXPONENT, param_spot_exp); glLightfv(GL_LIGHT0+n, GL_SPOT_CUTOFF, param_cutoff); glLightfv(GL_LIGHT0+n, GL_CONSTANT_ATTENUATION, param_catten); glLightfv(GL_LIGHT0+n, GL_LINEAR_ATTENUATION, param_latten); glLightfv(GL_LIGHT0+n, GL_QUADRATIC_ATTENUATION, param_qatten); // enable the light glEnable(GL_LIGHT0+n); }