![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
wxthplvl65 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 14.12.2020 Репутация: нет Всего: нет |
Уважаемые участники, хочу вывести "решетку" из красных точек 10x10 в OpenGL. Пишу на C++ в Visual Studio 2019.
В качестве "хранителя данных" использую трехмерный массив A с пятью слоями. Первый слой - координаты точек X, просто индексы. Второй слой - координаты Y, тоже индексы. Третий, четвертый и пятый - цвета R, G и B. Заполняю единицами только красный, синий и зеленый - нули. В функции void display сделал условие. Если запуск функции первый (IF Z = 0, и тут же меняем на Z = 1) , то заполняем массивы vertex и colors из трехмерного массива (из первого слоя берем X, из второго Y, из третьего красный цвет). Выводим решетку на экран. Когда первоначальная инициализация прошла (Z = 1), в условии ELSE заполняем красный цвет из массива A еще раз. Просто так, потом буду менять цвет в точках. Вместо решетки почему-то выводятся четыре разноцветных точки. На 95 строке пишет предупреждение "C6385: Чтение недопустимых данных из A[i][j]. Доступный для чтения объем равен 20 байт, однако считать можно только 24 байт". Что ему не нравится? #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; } Это сообщение отредактировал(а) wxthplvl65 - 26.12.2020, 19:00 |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |