【问题标题】:Render circle with gradient in OpenGL / OpenTK在 OpenGL / OpenTK 中用渐变渲染圆
【发布时间】:2018-06-11 20:20:26
【问题描述】:

我将 C# 和 OpenTK 用于图形,这基本上是 OpenGL 的包装器。

我目前正在渲染圆形星球后面的圆形海洋,它看起来像这样:

我真正想做的是用渐变渲染海洋,所以海洋的最深处更暗,随着上升,它变得更亮。此外,我将对气氛使用类似的方法,这将淡化到 0%。我希望这种方法可以在任何半径的圆上正常工作——无论大小。

我所知道的就是渲染一系列半径较大的圆圈并减少不透明度或较深的颜色。我确信有更好的方法。有人有想法么?

编辑 2018 年 6 月 18 日: 这是渲染磁盘的方法。现在只需要渐变。

    private void DrawDisc(Vector2 center, float innerRadius, float outerRadius, Color4 fillColor)
    {
        // no one knows what this is
        var quad = Glu.NewQuadric();

        int segments = 10;

        Gl.glEnable(Gl.GL_BLEND);
        Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
        Gl.glColor4f(fillColor.R, fillColor.G, fillColor.B, fillColor.A);

        Glu.Disk(quad, innerRadius, outerRadius, segments, segments);

        Gl.glEnd();
        Gl.glDisable(Gl.GL_BLEND);
    }

【问题讨论】:

    标签: c# opengl opentk


    【解决方案1】:

    我看到两个选项:

    1. 使用shader 计算每个渲染像素的颜色。解释什么是着色器以及如何使用它们是在这里广泛回答的问题,但有大量关于此的文档。本质上,这样的像素着色器将为圆盘的每个像素计算其与中心的距离和/或海洋深度,并基于此生成颜色。那时你可以定义任何你喜欢的方程。

    2. 使用具有所需图像的纹理并将纹理坐标添加到磁盘,以便在磁盘上映射纹理。然后纹理会随着圆盘拉伸或收缩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多