Я пытаюсь создать свой собственный тор с плавным затенением. Тем не менее, нормальное, кажется, неправильно. Вот мой код.
GLfloat NoMat[] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat MatAmbient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
GLfloat MatAmbientColor[] = { 0.21f, 0.13f, 0.05f, 1.0f };
GLfloat MatDiffuse[] = { 0.71f, 0.43f, 0.18f, 1.0f };
GLfloat Shine = 100.0f;
GLfloat NoShine = 0.0f;
glMaterialfv(GL_FRONT, GL_AMBIENT, MatAmbientColor);
glMaterialfv(GL_FRONT, GL_DIFFUSE, MatDiffuse);
glEnable(GL_NORMALIZE);
glMaterialfv(GL_FRONT, GL_SPECULAR, MatAmbient);
glMaterialf(GL_FRONT, GL_SHININESS, Shine);
int i, j, k;
double s, t, x, y, z;
for (i = 0; i < nsides; i++) {
glBegin(GL_QUAD_STRIP);
for (j = 0; j <= rings + 1; j++) {
for (k = 1; k >= 0; k--) { //for both negative and positive
s = (i + k) % nsides + 0.5;
t = j % rings;
x = (totalRadius + centerRadius * cos(s*2*M_PI/nsides)) * cos(t*2*M_PI/rings);
z = (totalRadius + centerRadius * cos(s*2*M_PI/nsides)) * sin(t*2*M_PI/rings);
y = centerRadius * sin(s*2*M_PI/nsides);
glVertex3f(x, y, z);
glNormal3f(x, y, z);
}
}
glEnd();
}
Однако освещение не работает должным образом, поскольку оно ведет себя как плоское затенение вместо плавного затенения. Я немного погуглил, но, похоже, мне нужно использовать разницу. Однако я не слишком уверен, как это сделать. У кого-нибудь есть идеи?