C ++
我有一些关于OpenGL的基本点/问题,不是所有的代码都涉及代码,但也包括概念。 如果您能回答,肯定或扩展其中的任何一个,我将不胜感激。 我警告过你,有些人可能天真,所以请耐心等待。
我知道OpenGL只是一个标准,而不是一个软件。 例如,'获取'OpenGL实际上涉及获得第三方实现,不一定需要由Khronos支持。
OpenGL通常是指GL实用程序(GLU)和GL实用程序工具包(GLUT)的组合。 他们有以glu
和glut
开始的方法, 而那些以简单的gl
开头的'基本'OpenGL方法是由那些制作图形驱动程序的人实现的,即NVIDIA?
我假设glut
方法是特定于操作系统的助手,例如glutKeyboardFunc()
必须解释键盘。 所以如果我想要一个更强大的替代方法来解释键盘输入,我只会使用OS API。 OpenGL的本身纯粹是大约图形,但glut
有这样的事情,因为显卡没有太大没有实时人类的控制。
在我看来, glu
方法可能与调用一系列较低级gl
方法相同。 我想引用的一个例子是glOrtho()
和gluPerspective()
。 他们似乎有类似的工作方式,但计算视角可能更复杂,所以gluPerspective()
是为了方便,但可能只是解决一些gl
方法。
我已经在大学学习了使用freeglut的基本OpenGL,并且我始终坚持使用OpenGL的'硬核'方式,只使用低级方法。 我不知道这是否是一个完全天真的想法,但是有没有一种专业的方式来编写OpenGL,以获得最大的功能? 就像,大概游戏开发者不会使用glutPostRedisplay()
例如,对吧? 它似乎太容易和方便,就像它隐藏了很多正在发生的事情。 我怀疑C ++也是如此,因为GLUT回调函数对命名空间中的方法不友好(正如我在其他问题中看到的那样)。
1.我知道OpenGL只是一个标准,而不是一个软件。 例如,'获取'OpenGL实际上涉及获得第三方实现,不一定需要由Khronos支持。
确实。
2. OpenGL通常是指GL实用程序(GLU)和GL实用程序工具包(GLUT)的组合。 他们有以glu
和glut
开始的方法, 而那些以简单的gl
开头的'基本'OpenGL方法是由那些制作图形驱动程序的人实现的,即NVIDIA?
不,OpenGL只是以gl…
开头的函数。 其他的一切(GLU,GLUT)都是第三方库,OpenGL没有涉及。
3.我认为glut
方法是特定于操作系统的助手,例如glutKeyboardFunc()
必须解释键盘。 所以如果我想要一个更强大的替代方法来解释键盘输入,我只会使用OS API。 OpenGL的本身纯粹是大约图形,但glut
有这样的事情,因为显卡没有太大没有实时人类的控制。
正确。 GLUT是一个非常小的框架,所以强烈建议使用别的东西。
4.在我看来, glu
方法可能与调用一系列较低级gl
方法相同。 我想引用的一个例子是glOrtho()
和gluPerspective()
。
我想你是指gluOrtho2D
但是,你是对的。 glOrtho
是一个真正的OpenGL-1功能。 在某种程度上, gluOrtho2D
是有史以来最无用的功能之一:
void gluOrtho2D(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top)
{
glOrtho(left, right, bottom, top, -1, 1);
}
他们似乎有类似的工作方式,但计算视角可能更复杂,所以gluPerspective()
是为了方便,但可能只是解决一些gl
方法。
对了,但其实很简单:
gluPrespective(GLfloat fov, GLfloat aspect, GLfloat near, GLfloat far)
{
GLfloat a = 0.5 * atan(fov);
glFrustum(-a*near, a*near, -a*near/aspect, a*near/aspect, near, far);
}
从OpenGL-3核心开始,整个矩阵操作的东西都被删除了。 在任何严肃的应用程序中,它都没什么用处,因为无论如何你都会自己管理这些矩阵。
5.我在大学学习了使用freeglut的基本OpenGL,并且我始终坚持使用OpenGL的'硬核'方式,只使用低级方法。 我不知道这是否是一个完全天真的想法,但是有没有一种专业的方式来编写OpenGL,以获得最大的功能? 就像,大概游戏开发者不会使用glutPostRedisplay()
例如,对吧?
是的,这是可能的,大多数游戏引擎确实做了所有的咕噜自己的工作。 有libSDL,也包括OpenGL。 就我个人而言,我更喜欢GLFW或自己做这些东西。 然而,这并不会改变人们使用OpenGL本身的方式。 但这只是基础设施,而且主要是编写样板代码。 作为一名初学者,你不使用既定的框架只能获得很少的收益。 如果您的程序大量使用GUI小部件,那么使用Qt或GTK以及嵌入式OpenGL小部件是一个合理的选择。
但是有些项目非常顽固,并且使用OpenGL来实现整个GUI。 搅拌机是最极端的例子,我喜欢它。
它似乎太容易和方便,就像它隐藏了很多正在发生的事情。 我怀疑C ++也是如此,因为GLUT回调函数对命名空间中的方法不友好(正如我在其他问题中看到的那样)。
命名空间的GLUT回调是可以的(一个命名空间只是一个C ++编译时间的事情)。 但是,不可能的是将类实例方法作为GLUT / C回调传递。
你似乎有一个很好的OpenGL和takeit的概念。 不知道还有什么要说的。 我想(5)是真的可以评论的地方。
根据你正在构建的应用程序类型,你认为有些人会选择使用本地GL调用来构建他们的应用程序。
例如,如果您在具有OpenGl视图的窗口中构建单个文档应用程序,并且还可以使用标准菜单和工具栏,则很有可能您需要直接使用c ++以及您称之为“低级别”API。
但是,如果您在全屏模式下构建低速度游戏,那么为什么您不应该使用Glut或任何其他工具包来缓解应用程序的开发,那么没有真正的原因。
您直接使用GLut或低级别调用的事实并不会使应用程序更好或更糟:)
希望它有帮助
链接地址: http://www.djcxy.com/p/6543.html上一篇: c++