【问题标题】:Do I need the "3f" at the end of these OpenGL functions? [closed]我需要在这些 OpenGL 函数的末尾加上“3f”吗? [关闭]
【发布时间】:2020-01-05 22:42:18
【问题描述】:

好的,所以我正在尝试用 C++ 编写一些代码,并尝试像一些疯狂的蹒跚学步的孩子一样尝试和修补 OpenGL。但问题是我每次尝试调用顶点或设置颜色时都会遇到3f,你必须写glColor3fglVertex3f

例如在这个三角形中,

glBegin(GL_TRIANGLES);
       glColor3f(0.4,0.4,0.4,0.4)
            glVertex3f(x,y,z)
            glVertex3f(x,y,z)
            glVertex3f(x,y,z)

现在我本可以不去努力并写道:

glBegin(GL_TRIANGLES);
       glColor(0.4,0.4,0.4,0.4)
            glVertex(x,y,z)
            glVertex(x,y,z)
            glVertex(x,y,z)

如果没有3f,你会看到没有人向我解释为什么会出现。

请有人告诉我这个3f 是什么意思。我认为这就像一些十六进制或一些使 63 仍然没有任何意义的东西

【问题讨论】:

  • "我本可以不去努力写" 不是在 C++ 中,你不能。再说一次,在 C++ 中,每一行都需要一个 ; 在它们的末尾。所以这个“代码”有很多无法编译的地方。

标签: c++ opengl freeglut


【解决方案1】:

因为 OpenGL 是一个 C API,并且在 C 语言中没有函数重载,但 OpenGL 希望提供以特定格式直接提供数据的能力,因此这些函数具有不同的命名版本,具有不同的参数类型。

例如glVertex

如果你真的可以编译一个裸glVertex,它是其他版本之一的快捷方式,但我不相信这是符合规范的,所以你可能不应该使用它。

【讨论】:

  • 啊所以你说因为没有函数重载他们只是添加了 3f 所以它不会像我的用户名是 kitten67 那样引起冲突但它本来只是小猫但已经很不情愿地采取了我不得不添加一个 67
  • @armanddebruijn:函数后缀are not arbitrary。另外,您是在问这些后缀是什么意思,还是在问为什么您的代码没有它们也能工作?因为你的问题的写法,显然是后者。
  • @NicolBolas 啊,所以函数后缀就是你所说的好吧,我明白了,我想是的,我想知道为什么没有它们也能工作,但为什么特别是“3”和“f”3f
  • @armanddebruijn 我会说没有它就行不通(我从未见过)。您在哪个操作系统上使用 freeglut? 3f 在 Nicol 的链接中进行了解释。 3 是参数的数量,f 代表 GLfloat,它可能总是 float
  • @armanddebruijn:仅供参考:编译 C++ 代码时,编译器会根据参数修改函数名称,以避免名称冲突,以便在链接程序时正确重载函数使用,取决于传递参数的类型。在 C++ 中它发生在幕后,在 C 中它是由程序员显式完成的。
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
相关资源
最近更新 更多