Мой код работает правильно. Я вижу землю на экране вывода. Но я хочу осветить землю, чтобы показаться 3-й. Поэтому я добавил код и функцию в свой код. Но вывод не изменился. Что я могу сделать, чтобы осветить землю? Спасибо за ответы ... Мой код ниже.Освещение openGL в C++
#define _USE_MATH_DEFINES
#include <cmath>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
float distance = 5.0;
int longitude = 0, latitude = 0, ainc = 5;
int lastx = -1, lasty = -1;
int data[17][21] =
{ { 14 ,25, 45 ,55 ,68 ,70 ,84 ,91 ,97, 101 ,105 ,105 ,105, 105 ,110 ,110, 110, 110 ,110, 110, 110 },
{ 5, 18, 43, 62 ,73, 82, 88, 94, 99, 102 ,105, 105 ,105, 105, 110, 110 ,110 ,110 ,110, 110, 110 },
{ 5, 18 ,38 ,56, 69, 77, 86, 94, 99, 103, 106, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110 },
{ 5 ,9 ,31, 48, 60, 71, 81, 87, 95, 101, 106, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110 },
{ 5, 5, 18, 37, 49, 56, 62, 81, 91, 94, 101, 105, 105, 105, 110, 110, 110 ,110 ,110, 110, 110 },
{ 5, 5, 12, 23 ,34, 40, 53 ,66 ,77 ,82, 97, 103, 105, 105, 109, 110, 110, 110, 110, 115, 115 },
{ 4 ,5 ,8 ,15, 20, 24, 35, 39, 40, 77, 92, 101, 104, 104 ,105, 110, 110, 110, 115, 115, 115 },
{ 5, 7 ,22, 36, 46, 48, 48, 44 ,50, 58, 80, 96, 96, 97, 106, 110, 110, 115, 115, 115, 115 },
{ 4, 15 ,31 ,46 ,61, 68, 69, 63, 53, 50, 67, 82, 84, 103, 108, 110, 110, 115, 115, 115, 115 },
{ 4, 12, 31, 46, 64, 78, 82, 80, 69, 54, 73, 71, 92, 105, 108, 110, 110, 115, 115, 115, 115 },
{ 6, 26 ,35 ,45, 63, 75, 84, 87, 84, 74 ,77, 80, 96, 103, 108, 110, 110, 110, 115, 115, 115 },
{ 21, 30, 46, 57 ,64 ,76 ,85 ,92 ,92, 87 ,79 ,80 ,86 ,102, 106, 110, 105 ,110, 115, 115, 115 },
{ 27, 40, 48 ,62 ,75 ,84 ,92, 96, 97 ,94 ,88 ,80 ,80 ,91, 104, 105, 105, 105, 110, 115, 115 },
{ 33, 43, 55, 65, 75, 87, 96, 101, 101, 101, 97, 92, 80, 80, 98, 105, 105, 105, 105, 110, 115 },
{ 45, 50, 58, 68, 80, 91, 99, 102, 105, 105, 105, 99, 90, 80, 80, 97, 105, 105, 105, 110, 100 },
{ 50, 60, 65, 71, 84, 95, 101, 105, 105, 107, 107, 106, 102, 101, 92, 80, 98, 104, 105, 100, 100 },
{ 60, 70, 76, 83, 88 ,96, 103, 106 ,107, 108 ,110, 109 ,108 ,108, 106, 101 ,90, 100, 100, 100, 100 } };
//bool tamam=true;
void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
int type = GL_TRIANGLES; // or GL_LINE_LOOP
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
GLfloat qaBlack[] = { 0,0,0,1 };
GLfloat qaGreen[] = { 0,1,0,1 };
GLfloat qaWhite[] = { 1,1,1,1 };
glMaterialfv(GL_FRONT, GL_AMBIENT, qaGreen);
glMaterialfv(GL_FRONT, GL_DIFFUSE, qaGreen);
glMaterialfv(GL_FRONT, GL_SPECULAR, qaWhite);
glMaterialf(GL_FRONT, GL_SHININESS, 10000);
gluLookAt(350, 600, 400, 280, 300, 300, 1, 1, 1.0);
int x = 0;
int z = 0;
int y = 0;
//glColor3f(1.0, 1.0, 1.0);
glBegin(type);
for (int i = 0; i < 16; i++)
{
x = 0;
for (int k = 0; k < 20; k++)
{
y = data[i][k];
if (y >= 80)
glColor3f(1.0, 0.0, 0.0);
if (y>0 && y<50)
glColor3f(0.0, 1.0, 0.0);
if (y >= 50 && y<80)
glColor3f(1.0, 1.0, 0.0);
glVertex3f(x, data[i][k], z);
glVertex3f(x, data[i + 1][k], z + 20);
glVertex3f(x + 20, data[i + 1][k + 1], z + 20);
x = x + 20;
}
z = z + 20;
}
glEnd();
z = 0;
glBegin(type);
for (int i = 0; i < 16; i++)
{
x = 0;
for (int k = 0; k < 20; k++)
{
y = data[i][k];
if (y>0 && y<50)
glColor3f(0.0, 1.0, 0.0);
if (y >= 50 && y<80)
glColor3f(1.0, 1.0, 0.0);
if (y >= 80)
glColor3f(1.0, 0.0, 0.0);
glVertex3f(x + 20, data[i + 1][k + 1], z + 20);//z*i
glVertex3f(x + 20, data[i][k + 1], z);
glVertex3f(x, data[i][k], z);
x = x + 20;
}
z = z + 20;
}
glEnd(); // front
/*if(tamam)*/
/*tamam=false;*/
//glFlush();
glutSwapBuffers();
}
void Initialize() {
glClearColor(10,10,10,10);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
GLfloat qaAmbient[] = { 20,20,20,10 };
GLfloat qaDiffuseLight[] = { 80,80,80,10 };
GLfloat qaSpecularLight[] = { 10,10,10,10 };
glLightfv(GL_LIGHT0, GL_AMBIENT, qaAmbient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, qaDiffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, qaSpecularLight);
GLfloat qaLightPosition[] = { 0.5,0.5,0,1 };
glLightfv(GL_LIGHT0, GL_POSITION, qaLightPosition);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27: case 'q': case 'Q':
exit(EXIT_SUCCESS);
break;
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(1200, 720);
glutCreateWindow(argv[0]);
//init();
//glViewport(0, 0,glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(300, glutGet(GLUT_WINDOW_WIDTH)/
glutGet(GLUT_WINDOW_HEIGHT), 2, 900.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return EXIT_SUCCESS;
}