C++ 理解OpenGL
我有一些关于OpenGL的基本观点/问题,不完全涉及代码,也涉及概念。如果您能回答、肯定或详述其中任何一项,我将不胜感激。我警告你,有些人可能很幼稚,所以请容忍我C++ 理解OpenGL,c++,c,opengl,C++,C,Opengl,我有一些关于OpenGL的基本观点/问题,不完全涉及代码,也涉及概念。如果您能回答、肯定或详述其中任何一项,我将不胜感激。我警告你,有些人可能很幼稚,所以请容忍我 我知道OpenGL只是一个标准,而不是一个软件。例如,“获取”OpenGL实际上涉及到获取第三方实现,而这不一定需要得到Khronos的认可 OpenGL通常指的是GL实用工具(GLU)和GL实用工具工具包(GLUT)的组合。它们有以glu和glut开头的方法,分别是。而“基本”的OpenGL方法,从简单的gl开始,是由那些制作图形驱
glu
和glut
开头的方法,分别是。而“基本”的OpenGL方法,从简单的gl
开始,是由那些制作图形驱动程序的人来实现的,例如NVIDIAglut
方法是特定于操作系统的助手,例如glutKeyboardFunc()
必须是,才能解释键盘。因此,如果我想要一种更强大的解释键盘输入的替代方法,我只会使用OSAPI。OpenGL本身纯粹是关于图形的,但是glut有这种东西,因为图形离不开实时的人类控制glu
方法可能与调用一系列较低级别的gl
方法相同。我想引用的一个例子是glOrtho()
和glupspective()
。在我看来,它们的工作方式类似,但计算透视图可能更复杂,因此glupperspective()
是为了方便起见,但可能只是解决一些gl
方法glutPostRedisplay()
,对吧?这看起来太简单和方便了,好像它隐藏了很多正在发生的事情。我怀疑C++也是如此,因为GLUT回调对命名空间中的方法不友好(正如我在其他问题中看到的)。您似乎对OpenGL和tookit有很好的了解。不知道还有什么要说。 我想(5)是人们可以评论的地方 根据您正在构建的应用程序的类型,您认为有些人将选择仅使用本机GL调用构建其应用程序是正确的
例如,如果在Windows下构建一个具有OpenGL视图、但也有标准菜单和工具栏的单个文档应用程序,那么你很有可能直接去C++和所谓的“低级”API。 然而,如果你在全屏模式下构建一个低节奏的游戏,没有真正的理由不应该使用Glut或任何其他工具包,如果它可以简化应用程序的开发
事实上,你直接使用过量或低级别呼叫并不能让应用变得更好或更糟:) 希望能有所帮助 \一,。我知道OpenGL只是一个标准,而不是一个软件。例如,“获取”OpenGL实际上包括获取 第三方实现,不必 由Khronos背书 的确如此 \二,。OpenGL通常指的是GL实用工具(GLU)和GL实用工具工具包(GLUT)的组合。他们的方法是从glu
和glut
,分别为。以及开始的“基本”OpenGL方法
通过简单的gl
,由那些制作图形驱动程序的人来实现,
i、 英伟达
不是。OpenGL只是以gl…
开头的函数。其他所有东西(GLU、GLUT)都是第三方库,OpenGL没有涵盖
\三,。我假设glut
方法是特定于操作系统的助手,例如glutKeyboardFunc()
必须是,才能解释键盘。所以如果我
我想找到一种更强大的解释键盘输入的替代方法
只需要使用操作系统API。OpenGL本身纯粹是关于图形的,但是
glut
有这样的功能,因为图形没有太多功能
实时人工控制
对。GLUT是一个非常简单的框架,因此强烈建议使用其他框架
\四,。在我看来,glu
方法可能与调用一系列较低级别的gl
方法相同。我想引用一个例子
是glOrtho()
和glutperspective()
我想你指的是2d
,但是的,你是对的glOrtho
是一个真正的OpenGL-1函数。在某种程度上,gluOrtho2D
是有史以来最无用的函数之一:
void gluOrtho2D(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top)
{
glOrtho(left, right, bottom, top, -1, 1);
}
在我看来,他们似乎也有类似的想法
工作方式,但计算透视图可能更复杂,所以
glupperspective()
是为了方便起见,但可能只是解决了一些问题
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内核开始,整个矩阵操作的东西都被删除了。在任何严肃的应用程序中,它都没有什么用处,因为您将自己管理矩阵
\五,。我在大学里学习过使用freeglut的基本OpenGL,我一直有一种使用OpenGL的“硬核”方式,使用
只有低级方法。我不知道这是否是一个完全幼稚的想法
但是有没有一种“专业”的方式来编写OpenGL呢
它的最大功能是什么?大概是游戏开发者吧
例如,不会使用glutPostRedisplay()
,对吗
是的,这是可能的,大多数游戏引擎确实自己完成所有的繁重工作。
还有libSDL,它也包括OpenGL。就我个人而言,我更喜欢GLFW或自己做的东西,事实上。然而,这并不会改变使用Op的方式