在OpenGL / OpenTK中使用渐变渲染圆

问题描述 投票:0回答:1

我正在使用C#和OpenTK进行图形处理,这基本上是OpenGL的包装。

我现在在圆形行星后面渲染一个圆形海洋,它看起来像这样:enter image description here

我真正想做的是用渐变渲染海洋,因此海洋中最深的部分更暗,随着它上升它变得更轻。此外,我将使用类似的方法与大气,这将是一个淡出0%。我希望这种方法适用于任何半径的圆 - 小或大。

我所要做的就是渲染一个较大半径的圆形,减少不透明度或颜色较深。我相信有更好的方法。有人有主意吗?

编辑6-18-2018:这是如何渲染磁盘。现在只需要渐变。

    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
投票

我看到两个选择:

  1. 使用shader计算每个渲染像素的颜色。解释着色器是什么以及如何使用它们是广泛的回答这里,但有很多关于它的文档。基本上,这样的像素着色器将针对盘的每个像素计算其距中心和/或海洋深度的距离并基于此产生颜色。您可以在此处定义您喜欢的任何等式。
  2. 使用具有所需图像的纹理并将纹理坐标添加到磁盘,以便在其上映射纹理。然后纹理将随磁盘拉伸或收缩。
© www.soinside.com 2019 - 2024. All rights reserved.