gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:44:35 28 4
gpt4 key购买 nike

我将 OpenGL 与 C++(但没有着色器和 GLSL)结合使用,并使用 glu 库函数绘制球体(台球)和圆柱体(球杆)。我正在使用 glBindTexture() 绑定(bind)纹理并使用 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

最佳答案

首先你的问题与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。

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

关于c++ - 使用 gluSphere() 和 gluCylinder() 渲染光滑的球体和圆柱体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16948635/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com