在OpenGL中绘制莫比乌斯带

3
我正在尝试使用参数方程绘制莫比乌斯带,使其始终“亮”(即所有法向量均指向相机方向)。但主要问题是莫比乌斯带是不可定向的,无论我如何定向带子,总会有一些法向量指向相反方向。有没有聪明的方法来确定何时翻转法向量以使其始终朝向相机?我尝试了两次绘制莫比乌斯带,使法线方向相反,但这样会产生z-fighting引起的黑白条纹。

1
你是否考虑过关闭照明或编写着色器来通过忽略法线应用恒定照明? - paddy
好的,我希望在这种情况下灯光是开着的。我有一个点光源,并且我希望根据其方向使条带的某些部分比其他部分更暗,但从不完全黑暗。 - jh314
画两次,但启用背面剔除 glEnable(GL_CULL_FACE); glCullFace(GL_BACK) - Christian Rau
2个回答

6
解决方案很简单:不要只从0到2π,而是到4π,即您需要在条带上经过两次。启用背面剔除。
这种方式是现实世界中莫比乌斯带的标准实验,沿着中间画一条线直到你到达线的起点。您需要绕带子两次。这正是您在OpenGL中所做的。

2

试一下这个:

glLightModeli( GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE );

对于双面光照,OpenGL会自动翻转背向的三角形法线。


“背面”现在是白色的。有没有办法使它与“正面”颜色/光线相同?这看起来很酷! - jh314
2
@jh314 后面使用后面的材料(假设您正在使用固定功能管道,否则光模型两面也无济于事)。因此,只需在调用 glMaterial(GL_FRONT, ...) 设置相同材料的任何地方调用 glMaterial(GL_FRONT_AND_BACK, ...) 即可。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接