使用gluSphere()和gluCylinder()渲染光滑的球体和圆柱体

时间:2013-06-05 19:53:13

标签: c++ opengl freeglut glu

我正在使用OpenGL和C ++(但没有着色器和GLSL)和绘制球体(池球)和圆柱体(球杆)使用glu库函数来绘制它们。我正在使用glBindTexture()绑定纹理并使用SOIL library加载纹理。

从截图中可以看出,圆柱体和球体都有锯齿状边缘。调用以下glHint()如何摆脱锯齿状边缘。 gluSphere()有25个堆栈和切片,gluCylinder()有100个堆栈和切片。增加堆栈和切片不会改善图像质量。

在图纸的其余部分使用freeglut

glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); //Smooth polygons
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //Best perspective corrections
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); //Smooth points
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); //Smooth lines

Screenshot

1 个答案:

答案 0 :(得分:2)

首先你的问题与aliasing项有关,这就是当tringles和其他一些基元(这些是创建整个场景的非常基本的对象)被光栅化时(基于几何描述的一些像素)屏幕是否有颜色)。 尝试寻找“如何打开抗锯齿” - 这里有很多有用的信息和一些相关的主题:http://www.glprogramming.com/red/chapter06.html。 在你的情况下,GL_POLYGON_SMOOTH和GL_BLEND可能肯定是glEnable。 例如

glEnable (GL_POLYGON_SMOOTH);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint (GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE);

如果您打算使用行,则会有GL_LINE_SMOOTH和GL_LINE_SMOOTH_HINT。

对于未来的项目,如果它们远离观察者(为球体制作尽可能多的切片),则尝试不使用如此复杂的模型,这将导致性能损失。