#include <iostream>
#include <cstdlib>
#include <glut.h>
#include <windows.h>
using namespace std;
unsigned int i, j, k, w;
float x, y, c;
int Z;
float vertices[200] = { 0 }; // { 0,0 , 0,0 , 0,0 , 0,0 }
float colors[300] = { 0 }; // { 0,0,0 , 0,0,0 , 0,0,0 , 0,0,0 }
float A[10][10][5] = { 0 };
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_DEPTH_BUFFER_BIT);
if (Z == 0)
{
/* Инициализация рабочего массива A, массивов vertex и colors и их первый вывод ------------------
Массив A : первый слой - координата x
второй слой - координата y
третий слой - цвет R
четвертый слой - цвет G
пятый слой - цвет B
*/
// Первоначальное заполнение координатами первого и второго слоя "Рабочего массива A" индексами. Третий слой заполняем единицами (красный).
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
A[i][j][0] = i; //координата X
A[i][j][1] = j; //координата Y
A[i][j][2] = 1; //красный цвет
}
}
// Первоначальное заполнение "Массива вершин" координатами первого и второго слоя из массива А. Перескакиваем через два столбца.
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j = j + 2)
{
vertices[i] = A[i][j][0];
vertices[i + 1] = A[i][j][1];
}
}
// Заполнение "Массива цветов" координатами третьего, четвертого и пятого слоя из массива А. Красный цвет - третий. Синий и зеленый оставляем нули.
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j = j + 3)
{
colors[i] = A[i][j][2];
colors[i + 1] = A[i][j][3];
colors[i + 2] = A[i][j][4];
}
}
Z = 1;
}
else
{
// Работа с массивом цветов (с координатами третьего слоя массива А). Перескакиваем через три столбца.
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j = j + 3)
{
colors[i] = A[i][j][2];
colors[i + 1] = A[i][j][3];
colors[i + 2] = A[i][j][4];
}
}
}
glVertexPointer(2, GL_FLOAT, 0, &vertices);
glColorPointer(3, GL_FLOAT, 0, &colors);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_POINTS, 0, 200);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glutSwapBuffers();
}
// Настройки таймера ***********************************************************
void TimerFunction(int value)
{
glutPostRedisplay(); //перерисовываем экран
glutTimerFunc(1000, TimerFunction, 1); //запускаем таймер заново
}
//******************************************************************************
// Настройки OpenGL -------------------------------------------
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(50, 50);
glutInitWindowSize(800, 600);
glutCreateWindow("Massiv 10 10 Red");
glLoadIdentity();
glOrtho(0, 60, 0, 60, 0, 1);
glClearColor(1.0, 1.0, 1.0, 1.0);
glPointSize(8);
glutDisplayFunc(display);
glutTimerFunc(1000, TimerFunction, 1);
Z = 0;
glutMainLoop();
return 0;
}