Здравствуйте, помогите пожалуйста.
Пользователь должен ввести значения и по ним должен построиться полигон. Нужно ввести 9 точек для его построения.
#include <iostream>
#include "ptlist.h"
#include <GL/glew.h>
#include <GL/glut.h>
void showStructure();
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(400, 400);
glutCreateWindow("PointList");
glutDisplayFunc(showStructure);
glutMainLoop();
system("pause");
return 0;
}
void showStructure()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
GLfloat first(0.2);
GLfloat second(0.1);
GLfloat third(-0.5);
std::cout << "Point 1: ";
std::cin >> first;
std::cout << "Point 2: ";
std::cin >> second;
std::cout << "Point 3: ";
std::cin >> third;
glVertex3f(GLfloat(first), GLfloat(second), GLfloat(third));
glVertex3f(0.5f, 1.0f, -0.5f);
glVertex3f(0.5f, 0.0f, 0.0f);
glEnd();
glutSwapBuffers();
}
Проблема в том , что если я делаю так:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
GLfloat first(0.2);
GLfloat second(0.1);
GLfloat third(-0.5);
for (int i = 0; i < 3; i++)
{
std::cout << "Point 1: ";
std::cin >> first;
std::cout << "Point 2: ";
std::cin >> second;
std::cout << "Point 3: ";
std::cin >> third;
glVertex3f(GLfloat(first), GLfloat(second), GLfloat(third));
}
glEnd();
glutSwapBuffers();
То цикл уходит в бесконечность и полигон не рисуется.
В случае таком, полигон рисуется после ввода трех точек, но в ожидании ввода дальше(т.е. цикл тоже в бесконечность):
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
GLfloat first(0.2);
GLfloat second(0.1);
GLfloat third(-0.5);
std::cout << "Point 1: ";
std::cin >> first;
std::cout << "Point 2: ";
std::cin >> second;
std::cout << "Point 3: ";
std::cin >> third;
glVertex3f(GLfloat(first), GLfloat(second), GLfloat(third));
glVertex3f(0.5f, 1.0f, -0.5f); // Bottom Left
glVertex3f(0.5f, 0.0f, 0.0f); // Bottom Left*/
glEnd();
glutSwapBuffers();
Подскажите , пожалуйста, как правильно реализовать ввод данных?
Ваш цикл вызывается бесконечно, т.к. функция showStructure вызывается для каждой отрисовки. А при 30 fps это раз в 1000/30 = 33 мсек. Судя по всему вам необходимо прочитать параметры полигона один раз и рисовать его не предлагая пользователю вводить информацию. Ввод можно организовать вот так:
const int pointsNumber = 9;
float points[pointsNumber];
int main(int argc,char** argv)
{
for (int i = 0; i < pointsNumber; i++)
{
std::cout << "Point " << pointsNumber << ": ";
std::cin >> points[i];
}
...
А рисовать используя данные из points.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, как создать наследников класса: 1класс, хранящий число так же в виде строки и имеющий методы перевода строки в число и назад; 2
Здравствуйте! Отправляю файл на сервер (локальный: vertrigo(apache)) с помощью AJAX и drag & drop HTML5Файл записывается в папку, на страницу с AJAX возвращается...
При разработке приложения на Реакте появилась такая проблемаЕсть Удаленная база данных Firebase, из которой мне нужно выгружать данные