Привет, друзья!
Была задача вывести центр геометрии.
C++ (Qt)
void GLWidget::drawCenter()
{
glClear(GL_DEPTH_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
float center[] =
{
mesh->center.x(),
mesh->center.y(),
mesh->center.z()
};
glPointSize(5.0f);
flatWraper.bind();
flatProgram.setUniformValue(flatProgramRefs.mvp, mvp);
flatProgram.setAttributeArray(flatProgramRefs.vertex, GL_FLOAT, center, 3, 0);
flatProgram.setUniformValue(flatProgramRefs.color, QColor(Qt::white));
glDrawArrays(GL_POINTS, 0, 1);
glPointSize(3.0f);
flatProgram.setUniformValue(flatProgramRefs.color, QColor(Qt::black));
glDrawArrays(GL_POINTS, 0, 1);
glEnable(GL_DEPTH_TEST);
}
Данный код выводил мне точку не в центре.
стоило мне сделать
C++ (Qt)
float center[] =
{
mesh->center.x(),
mesh->center.y(),
mesh->center.z(),
1
};
и
C++ (Qt)
flatProgram.setAttributeArray(flatProgramRefs.vertex, GL_FLOAT, center, 4, 0);
тогда всё заработало.
А вот буферы прикручиваю по 3 координаты - ничего не смещается.
Новый код запустил на убунту. Центр вообще не отрисовался.
Тогда я решил передавать атрибут в виде одного QVector4D и при этом делал disableAttributeArray
Не понимаю, почему в первом и втором случаях я получил проблемы