OpenGL弃用了函数和gluPerspective和Transform

时间:2011-10-31 22:12:46

标签: opengl glut

我是OpenGL的新手,我还在尝试基本的形状。我有时会发现许多函数,如glEnd等等,OpenGL 3+文档中没有提到这些函数。他们被其他功能取代了吗?或者我必须手动编写它们吗? 是否有使用OpenGL 3 +的在线教程?

至于“gluPerspective”,我读过它在Opengl 3+中没有使用过。它不应该是GLUT中的单独功能吗?它与OpenGL 3+有什么关系?最后,什么是变换(宽度,高度);做? (我在下载的一些示例代码中找到了它,我在GLUT或OpenGL中找不到它。)

这是代码:

GLvoid Transform(GLfloat Width, GLfloat Height)
{
  glViewport(00, 00, Width, Height);              /* Set the viewport */
  glMatrixMode(GL_PROJECTION);                  /* Select the projection matrix */
  glLoadIdentity();             /* Reset The Projection Matrix */
  gluPerspective(20.0,Width/Height,0.1,100.0);  /* Calculate The Aspect Ratio Of The Window */
  glMatrixMode(GL_MODELVIEW);                   /* Switch back to the modelview matrix */
}


/* A general OpenGL initialization function.  Sets all of the initial parameters. */
GLvoid InitGL(GLfloat Width, GLfloat Height)    
{
  glClearColor(0.0, 0.0, 0.0, 0.0);     /* This Will Clear The Background Color To Black */
  glLineWidth(2.0);                             /* Add line width,   ditto */
  Transform( Width, Height );                   /* Perform the transformation */
}

/* The function called when our window is resized  */
GLvoid ReSizeGLScene(GLint Width, GLint Height)
{
  if (Height==0)    Height=1;                   /* Sanity checks */
  if (Width==0)      Width=1;
  Transform( Width, Height );                   /* Perform the transformation */
}

2 个答案:

答案 0 :(得分:4)

  

我有时会发现很多函数,比如glEnd等等,OpenGL 3+文档中没有提到。它们被其他功能取代了吗?

它们已被完全删除,因为它们的工作方式并不能很好地反映现代图形系统在硬件和软件方面的工作方式。 glBegin(...)和glEnd()形成所谓的立即模式的周围环境:每次调用都会导致操作。这反映了大约20年前早期图形系统的构建方式。

今天,我们准备批量数据,将它们传输到GPU内存,并通过一次绘图调用触发批量绘图。 OpenGL通过顶点数组和顶点缓冲对象(VBO)完成此操作。自OpenGL-1.1(1996)以来,顶点阵列已经存在,VBO API建立在顶点阵列上,因此对于任何合理的程序都可以轻松添加VBO支持。

  

或者我必须手动编写吗?是否有使用OpenGL 3 +的在线教程?

这取决于有问题的功能。例如整个纹理环境,合成器已被删除。就像矩阵操作函数和整个照明界面一样。

他们所做和配置的内容现在通过着色器和制服完成。由于您可能会想要提供着色器,因此您需要自己实现。 OTOH你会很快发现,经常编写着色器比摆弄大量的OpenGL参数设置调用更简单,更简洁。一旦你进步得足够远,你几乎不会错过矩阵操作功能。处理3D图形的每一个严肃的应用程序都维护着转换矩阵本身;是为了增强灵活性还是仅仅因为在其他地方也需要这些矩阵,例如:一些物理模拟。

  

至于“gluPerspective”,我读过它在Opengl 3+中没有使用过。它不应该是GLUT中的单独功能吗?它与OpenGL 3+有什么关系?最后,什么是变换(宽度,高度);做? (我在下载的一些示例代码中找到了它,我在GLUT或OpenGL中找不到它。)

gluPerspective是GLU的一部分。 GLU是OpenGL Utility函数的伴随库,曾用于OpenGL-1.1。但它不是OpenGL规范的一部分,完全是可选的。

GLUT再次是另一回事。它是一个简单的框架,用于快速和脏的OpenGL窗口和上下文设置,提供一些简约的输入API。它也不再积极维护。我个人建议不要使用它。如果必须使用GLUT API,请使用FreeGLUT。或者更好的是,根本不要GLUT,使用像Qt,GTK这样的工具包或者像GLFW或SDL这样的框架。

答案 1 :(得分:2)

  

他们被其他功能取代了吗?

没有

  

或者我必须手动编写吗?

对于旧式即时模式几何提交,您必须自己做同样的工作。 The matrix stack has a replacement

  

是否有使用OpenGL 3 +的在线教程?

At least one