Линия которую я не понимаю

136
26 декабря 2020, 16:10

Вызываю функцию которая рисует круги и почему то дорисовывает одну точку из центра и не как избавиться от этого "явления" не могу.

    My_circular_donut(0.0, 0.3, 0.5); 
    bool My_circular_donut(double x, double y, double R)

Попытался "выловить" эту точку которая находиться в центре но не удалось ((( qDebug() ни каких описанных явлений не выявил.

вот код :

bool My_circular_donut(double x, double y, double R)
{
    // точки (расположения)
    GLfloat vertires_chikl[361]; int d =0;
    //-----
    //    GLfloat p_cos = 0.0; GLfloat p_sin = 0.0;
    GLfloat t = 0; // Angle parameter.
    for(int i = 0 ; i < 122; i++)
    {
        for(int a = 0 ; a <= 3; a++)
        {
            if(a == 1)
            {
                vertires_chikl[d] = GLfloat(x+(R*cos(t)));
                qDebug() << "vertires_chikl[" << d<< "] : " << vertires_chikl[d]; // вот попытка "поймать" точку
//                p_cos = p_cos+0.1;
                d++;
            }
            if(a == 2)
            {
                vertires_chikl[d] = GLfloat(y+(R*sin(t)));
                qDebug() << "vertires_chikl[" << d<< "] : " << vertires_chikl[d]; // вот попытка "поймать" точку
//                p_sin = p_sin+0.1;
                d++;
            }
            if(a == 3)
            {
                vertires_chikl[d] = float(0.0);
                d++;
            }
        }
//        t = t+0.256f; // "круганул" точку сдвигаю
//        t = t+0.0261f;
        t = t+0.0528f;
    }
    // позиция
    GLuint indices_chikl[361];
    for (int i =0; i <= 360; i++)
        indices_chikl[i] = i;
    // цвет
    GLfloat cwet_chikl[361];
    Rainbow_color1(true, cwet_chikl, 360); // функция "окраски" точек
    // единая переменная для обхода позиций
    GLuint iboHandle;
    // создаём единую переменную для хранения дескриптора
    GLuint vaoHandle;
    // Создаём и заполняем буферные обьекты
    GLuint vboHandles[2];
    glGenBuffers(2, vboHandles);
    GLuint positionBufferHandle = vboHandles[0];
    GLuint colorBufferHandle = vboHandles[1];
    // ----
    // заполнить буфер координат
    glBindBuffer(GL_ARRAY_BUFFER, positionBufferHandle);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertires_chikl), vertires_chikl, GL_STATIC_DRAW);
    // заполнить буфер цветов
    glBindBuffer(GL_ARRAY_BUFFER, colorBufferHandle);
    glBufferData(GL_ARRAY_BUFFER, sizeof(cwet_chikl), cwet_chikl, GL_STATIC_DRAW);
    // ----
    // Создать обьект массива вершин
    glGenVertexArrays(1, &vaoHandle);
    glBindVertexArray(vaoHandle);
    // Активировать массивы вершинных атрибутов
    glEnableVertexAttribArray(0); // Координаты вершины
    glEnableVertexAttribArray(1); // Цвет вершины
    // Закрепить индекс 0 за буфером с координатами
    glBindBuffer(GL_ARRAY_BUFFER, positionBufferHandle);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
    // Закрепить индекс 1 за буфером с цветом
    glBindBuffer(GL_ARRAY_BUFFER, colorBufferHandle);
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
    // ----
    // Создём и закрепляем обходной(позиционный) буфер
    glGenBuffers(1, &iboHandle);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iboHandle);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices_chikl), indices_chikl, GL_STATIC_DRAW);
    // ----
    ShaderProgram shaderprogram;
    shaderprogram.loadShaders("basic.vert", "basic.frag");
    shaderprogram.use();
    glDrawElements(GL_LINE_STRIP, 121, GL_UNSIGNED_INT, 0);
}

Вот вызов My_circular_donut(0.0, 0.3, 0.5);

Вот несколько вызовов функции

    // рисую круги 
    My_circular_donut(0.0, 0.3, 0.5);
    My_circular_donut(0.0, 0.5, 0.3);
    My_circular_donut(-0.3, -0.5, 0.3);
    My_circular_donut(-0.3, -0.3, 0.5);
    My_circular_donut(0.3, -0.5, 0.3);
    My_circular_donut(0.3, -0.3, 0.5);

Answer 1

Буфер может вместить 361 float, а записывается в него 121 * 3 = 363‬ float. Не стоит использовать в коде волшебные числа, а при выполнении индексирования необходимо выполнять проверку на вхождение индекса в допустимый диапазон.

READ ALSO
Не учитывать клик по элементам родителя

Не учитывать клик по элементам родителя

Нужно получить клик только по контейнеруЕсли я произвожу клик по элементам внутри контейнера, то они тоже засчитываются

99
вложенные категории django+jquaery

вложенные категории django+jquaery

Подскажите пожалуйста как реализовать подобную структуру на django+jquery? modelspy

123
Как это сделать на bootstrap?

Как это сделать на bootstrap?

И как эта штука называется когда свайпается вправо каждые n секунд и можно нажимать на срелочки

116
Как правильно настроить зависимости C# при работе с гит

Как правильно настроить зависимости C# при работе с гит

Допустим у меня есть библиотека для работы с матрицами

100