繁体   English   中英

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

[英]Render circle with gradient in OpenGL / OpenTK

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

我目前正在圆形行星后面绘制圆形海洋,它看起来像这样: 在此处输入图片说明

我真正想做的是用渐变的方式渲染海洋,因此海洋的最深处变得更暗,上升时变得更浅。 此外,我将对大气使用类似的方法,这将逐渐淡至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);
    }

我看到两个选择:

  1. 使用着色器计算每个渲染像素的颜色。 在这里可以广泛地解释什么是着色器以及如何使用它们,但是有很多关于此的文档。 本质上,这种像素着色器将为光盘的每个像素计算其距中心和/或海洋深度的距离,并根据该距离生成颜色。 您可以在那时定义自己喜欢的任何方程式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM