C ++

我有一些关于OpenGL的基本点/问题,不是所有的代码都涉及代码,但也包括概念。 如果您能回答,肯定或扩展其中的任何一个,我将不胜感激。 我警告过你,有些人可能天真,所以请耐心等待。

  • 我知道OpenGL只是一个标准,而不是一个软件。 例如,'获取'OpenGL实际上涉及获得第三方实现,不一定需要由Khronos支持。

  • OpenGL通常是指GL实用程序(GLU)和GL实用程序工具包(GLUT)的组合。 他们有以gluglut开始的方法, 而那些以简单的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)的组合。 他们有以gluglut开始的方法, 而那些以简单的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++

    下一篇: what kind of compatibility is there?