Здравствуйте, помогите пожалуйста.
Пользователь должен ввести значения и по ним должен построиться полигон. Нужно ввести 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.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости