Как я могу построить конус и цилиндр, используя OpenTK и C #? - PullRequest
0 голосов
/ 11 января 2019

Мне нужно построить конус и / или цилиндр в OpenTK, используя OpenGL 3.0, поэтому мне нужно использовать PrimitiveType.

После того, как я сгенерирую все данные и индексы, мне нужно загрузить их, используя

Список () данных

Список () индексов

Мне нужно построить конус и / или цилиндр в OpenTK, используя OpenGL 3.0, поэтому мне нужно использовать PrimitiveType.

После того, как я сгенерирую все данные и индексы, мне нужно загрузить их, используя

Список () данных

Список () индексов

        int segments = 26; //26  
        int radius = 40;
        int height = 50;

        double X = 0;
        double Y = 0;
        double Z = 0;

        var data = new List<float>();
        var indices = new List<uint>();

        for (double y = 0; y < 2; y++)
        {
            for (double x = 0; x < height; x++)
            {
                double theta = (x / (segments - 1)) * 3 * Math.PI;

                X = (float)radius * Math.Cos(theta);
                Y = (float)height * y;
                Z = (float)radius * Math.Sin(theta);

                data.Add(DataConverter.ToFloat(X));
                data.Add(DataConverter.ToFloat(Y));
                data.Add(DataConverter.ToFloat(Z));
            }
        }


        for (int x = 0; x < segmente ; x++)
        {  
            indices.Add((uint)x);
            indices.Add((uint)(x + segments));
            indices.Add((uint)(X + segments + 1));


            indices.Add((uint)(x + segments + 1));
            indices.Add((uint)(x + segments));
            indices.Add((uint)x);

            object = Matrix4.CreateTranslation(position);
        }

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

Эта формула была найдена здесь, и я адаптировал ее к новой версии OpenGL 3.0.

...