用户有啥办法可以通过在 c++ 中使用 opengl 来决定他想要绘制的多边形吗?

Posted

技术标签:

【中文标题】用户有啥办法可以通过在 c++ 中使用 opengl 来决定他想要绘制的多边形吗?【英文标题】:Is there any way for the user to decide the polygon that he wants to draw by using opengl in c++?用户有什么办法可以通过在 c++ 中使用 opengl 来决定他想要绘制的多边形吗? 【发布时间】:2020-03-28 17:36:17 【问题描述】:

我在代码块中使用 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();

我主要读取用户想要多少个峰值,但我无法将它发送到我的多边形函数,因为 glutDisplayFunc 想要一个 void func 作为参数。我也不能在我的多边形函数中使用 scanf,因为它在我运行时会产生一些问题它。 那么,有什么解决办法吗?

【问题讨论】:

【参考方案1】:

您可以将 peaks 变量设为全局变量。这将使它可以在您的多边形函数中访问。如果这只是一个玩具程序,这是您最好的解决方案。


编辑

好的,所以阅读 glut 文档,您似乎不应该使用glutDisplayFunc 来生成新的几何图形。 GLUT也相当老了。

您可能希望将SFML 视为更好的opengl 包装器。它不依赖于像 glut 这样的回调,并且你有一个主渲染循环。它还有一个不错的 vertex array 类,可用于制作多边形。

我与 SFML 没有任何关系,它只是我最熟悉的图形和多媒体库。

【讨论】:

好的,非常感谢你帮了我很多。我认为我不能使用 SFML,因为我的作业只是基于过剩 @ΣωτηρηςΙωαννιδης Glut 有点像野兽。我很惊讶有人还在教它。看起来他们也在教旧的opengl。如果你想多谈,请告诉我。我怀念在大学里学制图。 谢谢你,如果我有其他问题,我会非常感谢你的回答。【参考方案2】:

你所说的函​​数 glutDisplayFunc 需要一个函数指针作为它的参数。 在该回调中使用变量的唯一方法是全局变量或类的静态变量。

如上所述,SFML 是 Open Gl 的出色封装,我推荐它。

【讨论】:

以上是关于用户有啥办法可以通过在 c++ 中使用 opengl 来决定他想要绘制的多边形吗?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 和序列化:有啥方法可以进行某种内省吗?

用户反馈太多,有啥简单的处理办法不?

CloudKit:备份所有服务器数据?有啥解决办法吗?

有没有办法可以在 C++ 中编辑文件的中间

有啥方法可以使用在一个函数中定义的 const 变量可以被 C++ 中同一程序中的其他函数使用

系统资源不足是怎么造成的?有啥解决办法?病毒可以引起吗?