diff options
Diffstat (limited to 'polyset.cc')
-rw-r--r-- | polyset.cc | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -51,6 +51,14 @@ void PolySet::setmatrix(double m[16]) static void gl_draw_triangle(GLint *shaderinfo, const PolySet::Point *p0, const PolySet::Point *p1, const PolySet::Point *p2, bool e0, bool e1, bool e2) { + double ax = p1->x - p0->x, bx = p1->x - p2->x; + double ay = p1->y - p0->y, by = p1->y - p2->y; + double az = p1->z - p0->z, bz = p1->z - p2->z; + double nx = ay*bz - az*by; + double ny = az*bx - ax*bz; + double nz = ax*by - ay*bx; + double nl = sqrt(nx*nx + ny*ny + nz*nz); + glNormal3d(nx / nl, ny / nl, nz / nl); #ifdef ENABLE_OPENCSG if (shaderinfo) { double e0f = e0 ? 2.0 : -1.0; @@ -87,6 +95,9 @@ void PolySet::render_surface(colormode_e colormode, GLint *shaderinfo) const glMultMatrixd(m); if (colormode == COLOR_MATERIAL) { glColor3ub(249, 215, 44); + GLfloat light_diffuse[] = {255 / 255.0, 236 / 255.0, 94 / 255.0, 1.0}; + glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); + glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse); #ifdef ENABLE_OPENCSG if (shaderinfo) { glUniform4f(shaderinfo[1], 249 / 255.0, 215 / 255.0, 44 / 255.0, 1.0); @@ -96,6 +107,9 @@ void PolySet::render_surface(colormode_e colormode, GLint *shaderinfo) const } if (colormode == COLOR_CUTOUT) { glColor3ub(157, 203, 81); + GLfloat light_diffuse[] = {171 / 255.0, 216 / 255.0, 86 / 255.0, 1.0}; + glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); + glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse); #ifdef ENABLE_OPENCSG if (shaderinfo) { glUniform4f(shaderinfo[1], 157 / 255.0, 203 / 255.0, 81 / 255.0, 1.0); |