用户有啥办法可以通过在 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 来决定他想要绘制的多边形吗?的主要内容,如果未能解决你的问题,请参考以下文章