我正忙着尝试在我的程序中设置此行为。
基本上,我希望当用户按下"a"
键时,屏幕上会显示一个新的球体。
你怎么能这样做?
答案 0 :(得分:5)
我可能只需要拥有一些包含当前“场景”的数据结构(数组,链表等)。最初这是空的。然后,当事件发生时,您可以创建新的所需几何体的某种表示形式,并将其添加到列表中。
在每个帧上,清除屏幕,然后浏览数据结构,将每个表示映射到一组适当的OpenGL命令。这是非常标准的。
数据结构通常被称为scene graph,它通常采用树或图形的形式,其中几何体可以具有子几何形状等等。
答案 1 :(得分:1)
如果您正在使用GLuT库(这是非常标准的),您可以利用其自动原始生成函数,如glutSolidSphere
。您可以找到API文档here。看看第11节“几何对象渲染”。
正如展开建议的那样,你的程序可以保留某种列表,但是每个基元的参数,而不是实际的几何。在球体的情况下,这将是位置/半径/切片。然后,您可以使用GLuT函数轻松绘制对象。显然,这限制了你对GLuT可以绘制的内容,但对于简单的情况,这通常很好。
答案 2 :(得分:0)
如果没有更多关于你正在使用什么环境的细节,那么很难具体,但是在设置OpenGL时可能会出现问题的一些指针
确保将相机设置为查看绘制球体的点。这可能会非常困难,最简单的方法是从OpenGL Utility Toolkit实现glutLookAt。确保前后平面设置为合理的值。
关闭背面剔除,至少要先开始。当然,使用生产代码背面剔除可以快速获得性能提升,但是在对象上错误地设置法线并且看不到它是非常容易的,因为您正在查看隐形面
请记住调用glFlush以确保执行所有命令。绘制到后台缓冲区然后无法调用glSwapBuffers也是一个常见的错误。
有时您可能会遇到缓冲区格式问题 - 尽管如果您从系统上运行的示例代码进行复制,则不太可能出现问题。
一旦基本环境正确,图形编码往往非常简单,因为输出是可视的,但在新系统上设置渲染环境总是有点棘手,直到你有第一个立方体或球体渲染。我建议获取一个样本或模板并将其修改为开始,而不是尝试从头开始设置渲染窗口。使用GLUT检查OpenGL调用的初稿也是一种很好的技术。