圆柱法线

发布于 2024-10-16 03:38:23 字数 347 浏览 5 评论 0原文

我正在开发一个 OpenGL 应用程序,它现在只绘制一个由几个小圆柱体组成的大管(有点像弹簧)。当我打开灯光和法线时,我得到了一个恼人的效果,因为从某些角度我在圆柱体的边界上看到了这些恼人的黑点:

单个气缸边框上的黑点

我相信这是气缸非常薄的副产品。基本上,我在设置顶部/底部时将法线设置为 (0,0,+/- 1),然后侧面法线为 (cos(toRadian(beta)), sin(toRadian(beta)), 0)。

是否有可能在不使用“更胖”气缸的情况下消除这种影响?或者我定义法线的方式有问题?

谢谢

I'm developing an OpenGL application which right now only draws a big tube consisting of several small cylinders (kind of like a slinky). I'm getting an annoying effect when I turn the lighting and normals on, as from certain angles I get these annoying black dots on the cylinders' borders:

Black dots on individual cylinders borders

I belive this is a byproduct of the fact the cylinders are very thin. Basically I set the normal to (0,0,+/- 1) when setting the top/base, and then side normals are (cos(toRadian(beta)), sin(toRadian(beta)), 0).

Is it possible to remove this effect whitout getting 'fatter' cylinders? Or is there something wrong in the way I define the normals?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰魂雪魄 2024-10-23 03:38:23

这似乎是圆柱体侧面的渲染。图像中的黄色对应于圆柱体的顶部。圆柱体的侧面与顶部成 90 度,因此它们不会被照亮(我猜测光线与相机的方向相同)并且呈现黑色。由于圆柱体太薄,它们不会填充像素,因此它们不会显示太多。

如何修复它?我有几个想法:

1)只画顶部和底部,而不是侧面 - 这肯定会解决从这个角度观看时的问题,但如果你的相机移动,则会导致进一步的问题。

2) 禁用光照,则所有面将被绘制为相同的颜色(假设侧面与顶部的颜色相同)。

3)使用多重采样 - 这意味着大多数边缘不会出现(因为由于角度的原因,每个像素更有可能位于顶部而不是侧面)。

4) 在场景周围添加更多灯光,垂直于当前灯光。

1 & 2 是您的最佳选择,具体取决于您想要实现的目标。

This appears to be the rendering of the sides of the cylinders. The yellow in the image corresponds to the tops of the cylinders. The sides of the cylinders are at 90 degrees to the tops, so they are not lit (I'm guessing the light is in the same direction as the camera) and appear black. With the cylinders being so thin these will not fill make pixels so they don't show up much.

How to fix it? I've got a couple of ideas:

1) Just draw the tops and bottoms, not the sides - this will definitely fix the problem when viewed from this angle, but will lead to further problems if your camera moves.

2) Disable lighting, then all faces will be drawn the same colour (assuming the sides are the same colour as the top).

3) Use multi-sampling - this means most of the edges won't appear (as each pixel is more likely to be top than side due to the angle).

4) Add more lights around the scene, perpendicular to the current light.

1 & 2 are your best bet depending on what you're trying to achieve.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文