Есть ли способ для пользователя выбрать полигон, который он хочет нарисовать, используя opengl в c ++? - PullRequest
0 голосов
/ 28 марта 2020

Я использую opengl в кодовых блоках для создания одного проекта. Я хочу сначала построить многоугольник с n пиками, но эти n пиков, я хочу, чтобы они были объявлены пользователем. Мой код на данный момент:

 #include<GL/glut.h>
 #include<stdio.h>
 #include<stdlib.h>

 void init(void){
    glClearColor(1.0,1.0,1.0,0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D (0.0,640.0,0.0,480.0);
 }

 void polygon(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0,0.0,0.0);

    int p1[]={200,100};
    int p2[]={400,100};
    int p3[]={550,300};
    int p4[]={400,480};
    int p5[]={200,480};
    int p6[]={50,300};

    glBegin (GL_LINE_LOOP);
    glVertex2iv (p1);
    glVertex2iv (p2);
    glVertex2iv (p3);
    glVertex2iv (p4);
    glVertex2iv (p5);
    glVertex2iv (p6);
    glEnd ( );

    glFlush();
}

int main(int argc,char** argv){
    int peaks = 0;
    printf("Give the number of your peaks that you want to draw: ");
    scanf("%d",&peaks);

   glutInit(&argc,argv);
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
   glutInitWindowPosition(500,200);
   glutInitWindowSize(640,480);
   glutCreateWindow("Internal Checkpoints");
   init();
   glutDisplayFunc(polygon);
   glutMainLoop();
}

В основном я читаю, сколько пиков хочет пользователь, но я не могу отправить его в свою функцию многоугольника, потому что glutDisplayFun c хочет в качестве аргумента пустое веселье c. Также я не могу использовать scanf в своей функции многоугольника, потому что это создает некоторые проблемы при запуске. Так есть ли какое-то решение для этого?

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

Вы можете сделать вашу переменную peaks глобальной. Это сделало бы его доступным в вашей функции многоугольника. Если это просто игрушечная программа, то это ваше лучшее решение.


Edit

Хорошо, так что, читая перенасыщенную документацию, вы не должны использовать glutDisplayFun c для создания новой геометрии. Также GLUT довольно старый.

Возможно, вы захотите посмотреть SFML как лучшую оболочку opengl. Это не зависит от обратных вызовов, таких как перенасыщение, и у вас есть основной рендер l oop. У него также есть класс массив вершин , который вы можете использовать для создания полигонов.

Я не имею отношения к SFML, это просто библиотека графики и мультимедиа, с которой я больше всего знаком.

1 голос
/ 28 марта 2020

Функция glutDisplayFun c, как вы сказали, ожидает указатель функции в качестве параметра. Единственный способ использовать переменные в этом обратном вызове - это глобальные переменные или переменные класса stati c.

Как уже упоминалось выше, SFML - отличная оболочка Open Gl, и я рекомендовал это.

...