Переделал пример из "справочника..."
| Код | // GLUT.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include <windows.h> #include <gl\glut.h>
GLfloat spin = 0.0;
#define X 80.0 GLfloat coords[8][3] = { {-X,-X,X},{X,-X,X},{X,X,X},{-X,X,X}, {-X,-X,-X},{X,-X,-X},{X,X,-X},{-X,X,-X} };
GLbyte indices[6][4] = { {0,1,2,3},{5,6,2,1}, {5,4,7,6},{0,4,5,1}, {4,0,3,7},{7,3,2,6} };
void init(void) { GLfloat mat_specular[]={1.0,1.0,1.0,1.0}; GLfloat mat_shininess[]={50.0}; GLfloat light_position[]={0.5,0.5,0.5,0.0}; GLfloat white_light[]={0.99,0.99,0.99,0.0};
glClearColor(1.0,1.0,1.0,0.0); glColor3f(0.8,0.0,0.0); glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light); glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);
glEnable(GL_NORMALIZE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL);
//glPolygonMode(GL_FRONT,GL_LINE); glEnable(GL_CULL_FACE); }
void draw(float *v1, float *v2, float *v3, float *v4) { glBegin(GL_QUADS); glNormal3fv(v1); glVertex3fv(v1); glNormal3fv(v2); glVertex3fv(v2); glNormal3fv(v3); glVertex3fv(v3); glNormal3fv(v4); glVertex3fv(v4); glEnd(); }
void display(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(spin,0.5,0.0,0.0);
glBegin(GL_QUADS); for(int i=0; i<6; i++) { draw(&coords[indices[i][0]][0], &coords[indices[i][1]][0], &coords[indices[i][2]][0], &coords[indices[i][3]][0]); } glEnd();
glPopMatrix(); glutSwapBuffers(); }
void rotate() { spin += 0.01; if (spin > 360) spin -= 360; glutPostRedisplay(); }
void reshape(int w,int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w<=h) glOrtho(-200.0,200.0,-200.0*(GLfloat)h/(GLfloat)w,200.0*(GLfloat)h/(GLfloat)w,-200.0,200.0); else glOrtho(-200.0*(GLfloat)w/(GLfloat)h,200.0*(GLfloat)w/(GLfloat)h,-200.0,200.0,-200.0,200.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
int main(int argc, char **argv) { FreeConsole(); glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(400,400); glutInitWindowPosition(100,100); glutCreateWindow("Line Stipple Patterns"); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutIdleFunc(rotate); glutMainLoop(); return 0; }
|
В общем, все нормально, но в результате на гранях куба получаются непонятные "ребра", разделяющие грань на светлый/темный треугольники...

Вопросы: 1. Почему возникают эти линии? 2. Уместно ли в данном случае применение ф-ии glEnable(GL_NORMALIZE);?  |