Пишу небольшую программу на Qt с использованием Qml + C++. На форме есть модель (загружена через библиотеку qt3d). Возникла необходимость отобразить какое-какое изображение(несколько вложенных окружностей) на модели. Думаю, что решить проблему можно через OpenGL. Но вот тут то и возникли трудности, не могу правильно это сделать.
Что делал:
1) Создал класс наследник QGLWidget:
#ifndef DRAW_CIRCLS_H
#define DRAW_CIRCLS_H
#include <QGLWidget>
#include <QtOpenGL>
class draw_circls : public QGLWidget
{
Q_OBJECT
public:
explicit draw_circls(QWidget *parent = 0);
void paintGL();
void initializeGL();
signals:
public slots:
};
#endif // DRAW_CIRCLS_H
2) Переопределил функцию void paintGL() (нашел в интернете куб), а так же функцию void initializeGL():
#include "draw_circls.h"
draw_circls::draw_circls(QWidget *parent) :
QGLWidget(parent)
{
}
void draw_circls::paintGL()
{
glLoadIdentity();
glTranslatef(1.5f,0.0f,-7.0f); // Сдвинуть вправо и вглубь экрана
glRotatef(1.0f,1.0f,1.0f,1.0f); // Вращение куба по X, Y & Z
glBegin(GL_QUADS); // Рисуем куб
glColor3f(0.0f,1.0f,0.0f); // Синий
glVertex3f( 1.0f, 1.0f,-1.0f); // Право верх квадрата (Верх)
glVertex3f(-1.0f, 1.0f,-1.0f); // Лево верх
glVertex3f(-1.0f, 1.0f, 1.0f); // Лево низ
glVertex3f( 1.0f, 1.0f, 1.0f); // Право низ
glColor3f(1.0f,0.5f,0.0f); // Оранжевый
glVertex3f( 1.0f,-1.0f, 1.0f); // Верх право квадрата (Низ)
glVertex3f(-1.0f,-1.0f, 1.0f); // Верх лево
glVertex3f(-1.0f,-1.0f,-1.0f); // Низ лево
glVertex3f( 1.0f,-1.0f,-1.0f); // Низ право
glColor3f(1.0f,0.0f,0.0f); // Красный
glVertex3f( 1.0f, 1.0f, 1.0f); // Верх право квадрата (Перед)
glVertex3f(-1.0f, 1.0f, 1.0f); // Верх лево
glVertex3f(-1.0f,-1.0f, 1.0f); // Низ лево
glVertex3f( 1.0f,-1.0f, 1.0f); // Низ право
glColor3f(1.0f,1.0f,0.0f); // Желтый
glVertex3f( 1.0f,-1.0f,-1.0f); // Верх право квадрата (Зад)
glVertex3f(-1.0f,-1.0f,-1.0f); // Верх лево
glVertex3f(-1.0f, 1.0f,-1.0f); // Низ лево
glVertex3f( 1.0f, 1.0f,-1.0f); // Низ право
glColor3f(0.0f,0.0f,1.0f); // Синий
glVertex3f(-1.0f, 1.0f, 1.0f); // Верх право квадрата (Лево)
glVertex3f(-1.0f, 1.0f,-1.0f); // Верх лево
glVertex3f(-1.0f,-1.0f,-1.0f); // Низ лево
glVertex3f(-1.0f,-1.0f, 1.0f); // Низ право
glColor3f(1.0f,0.0f,1.0f); // Фиолетовый
glVertex3f( 1.0f, 1.0f,-1.0f); // Верх право квадрата (Право)
glVertex3f( 1.0f, 1.0f, 1.0f); // Верх лево
glVertex3f( 1.0f,-1.0f, 1.0f); // Низ лево
glVertex3f( 1.0f,-1.0f,-1.0f); // Низ право
glEnd(); // Закончили квадраты
}
void draw_circls::initializeGL()
{
qglClearColor(Qt::white);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
glEnable(GL_CULL_FACE);
}
3) Зарегистрировал новый тип, подключил его к QML файлу:
#include "draw_circls.h" //добавляем хедер
........................
qmlRegisterType<draw_circls>("Draw", 1, 0, "Draw"); //регистрируем новый тип
........................
import Draw 1.0 //импортируем новый тип в qml файл
........................
Draw{id: blalba} //вызываем наш класс (по-идее должен появится куб, но его нету)
Буду очень благодарен, если кто-то сможет помочь!