Визуализация круга с градиентом в OpenGL / OpenTK - PullRequest
0 голосов
/ 11 июня 2018

Я использую 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);
    }

1 Ответ

0 голосов
/ 19 июня 2018

Я вижу два варианта:

  1. Используйте шейдер , который вычисляет цвет каждого визуализированного пикселя.Объяснение того, что такое шейдеры и как их использовать, дает широкий ответ, но об этом имеется множество документации.По существу, такой пиксельный шейдер вычисляет для каждого пикселя диска его расстояние от центра и / или глубины океана и создает цвет, основанный на этом.Вы можете определить любое уравнение, которое вам нравится в этой точке.

  2. Используйте текстуру, которая имеет желаемое изображение, и добавьте текстурные координаты к вашим дискам, чтобы нанести на них текстуру.Текстура будет растягиваться или уменьшаться с дисками.

...