多个SFML OpenGL窗口

多个SFML OpenGL窗口,第1张

概述多个SFML OpenGL窗口

我如何创build两个SFML窗口,然后使用OpenGL绘制到他们两个?

如果您想知道如何创build和使用两个或更多的OpenGL的SFML窗口,那么这里就是解决scheme。 我无法find有关如何在互联网上的其他任何地方这样做的信息,所以在这里。 我希望这有助于某个人。

顺便说一句,你可能想知道为什么这可能是一个有用的事情要做:

物理学家能够向其他人展示系统的animation是一个非常有用的事情,因为我们经常想要编写一些演示来帮助我们解释它。 一个微不足道的例子就是一个盒子里的气体粒子的行为。 在窗口中,由于我们奇特的物理计算,粒子会像在现实世界中一样被绘制和移动,在另一个窗口中,可以绘制图表来显示框内的总能量或平均粒子速度(温度)和其他这样的事情。 另一个很好的例子就是太阳系的模拟。 有关行星的数据可以绘制到一个窗口,太阳系的视图可以被吸引到另一个窗口。

录制DLL的API,然后模仿它

如何在C ++中获取JoyStick Z旋转消息

如何从terminal分离程序并将其附加回来?

在线唤醒执行

在linux中获得时序一致性

对于相同的c ++源文件,其gcc可执行文件在windows中比在linux中大655倍。 为什么这么多差异?

需要一些帮助#define

如何获得文件中所有证书的列表?

如何在C ++中检查多个文件重复

在linux中并行处理

做这个工作需要几个步骤。 巧妙地设计了多个窗口,事实上你必须调整每个窗口的大小,或者至少这是最简单的方法。 只有一个窗口,您只能在窗口创建后重新调整大小,并且每次调整大小或重新调整大小。 你可能会争辩说,有更好的方法来做这个通过推动和从矩阵栈d出,在这种情况下,请评论并留下其他答案。

首先,您需要声明两个sfml窗口,如您所期望的那样: sf::Window window,window2; (也许你应该在程序执行结束时检查它们是否都关闭了!)

其次,为两者实施调整大小的方法。 像这样的事情会做。

/// Window glVIEwport(0,window.GetWIDth(),window.GetHeight()); // Set matrix mode back again glMatrixMode(GL_PROJECTION); // reset matrix stack glLoadIDentity(); // Set drawing surface propertIEs - either Perspective or Orthographic ///gluPerspective(45.0,(double)w / (double)h,1.0d,100.0d); glOrtho(-50.0d,50.0d,-50.0d,-10.0d,10.0d); // Put matrix mode back glMatrixMode(GL_MODELVIEW);

而现在另一个:

/// Window2,which can be different to window! glVIEwport(0,10.0d); // Put matrix mode back glMatrixMode(GL_MODELVIEW);

您可能希望将这两个代码块放在两个不同的功能中,也许会实现您选择的相机类。 原因是你需要在使用各种OpenGL绘图方法绘制之前调用每个窗口的调整大小功能。

现在是有趣的部分。 在绘制调用你要绘制的窗口的resize方法之前。 那么如果你需要调用glMatrixMode(GL_MODELVIEW); (以防万一!), glLoadIDentity(); , glClear(GL_color_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 。 显然,如果你不想清除屏幕,不要调用glClear或glLoadIDentity,如果你不想重置矩阵转换堆栈…

现在做绘图: glBegin()和glEnd()以及所有你需要做的事情。

最后,调用window.display()或window2.display() ,这取决于你正在绘制哪一个东西。 现在回到上面的有趣的部分,并调用其他窗口的resize方法,并继续为第二个窗口做所有的事情,就像第一个一样!

现在享受多窗口的OpenGL SFML编程。 您可能想要将一大堆窗口装入矢量或其他奇特的容器中。

[编辑]由于某些原因sf :: windows是不可复制的,这意味着你不能push_back()他们像一个双壳或矢量的容器。 这可能是由于一些OpenGL特定的东西,如果你试图将所有的位从一个窗口类复制到另一个窗口类,将会“出错”。 (也许?)相反, sf::Window* = new sf::Window[number_of_windows]和unsigned int number_of_windows = 2就足够了,虽然它不是很好…

总结

以上是内存溢出为你收集整理的多个SFML OpenGL窗口全部内容,希望文章能够帮你解决多个SFML OpenGL窗口所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1292370.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-10
下一篇2022-06-10

发表评论

登录后才能评论

评论列表(0条)

    保存