Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание 3д объекта(полотна) с выводом на него изображения

87K
24 июня 2014 года
Anarchist_42
4 / / 12.06.2014
Всем здравствуйте! Пишу небольшую программку на Qml + C++.

Столкнулся с проблемой вывода изображения на 3д сцену. Имеется 3d модель, у которой есть экран, на котом надо получит изображение. Средствами Qml не смог это осуществить, так как объект загружался через Item3D, пробовал так же через rectangle, но он 2d объект. Думал что решить проблему проще через написание класса на С++ с использованием OpenGl, но столкнулся с проблемой, что он выводит изображение только в чистое окно, а, допустим, в тот же не хочет.

Код объекта, который я загружаю.
Код:
Image {
        id: image1
        height: 60
        anchors.fill: parent
        sourceSize.height: 600
        sourceSize.width: 1024
        source: "fon.jpg"

        Rectangle {
            id: rectangle1
            color: "#b6b6b6"
            anchors.rightMargin: 10
            anchors.leftMargin: 10
            anchors.bottomMargin: 162
            anchors.topMargin: 10
            anchors.fill: parent
            border.width: 2
            Viewport {
                anchors.fill: parent
                .....................................................................
                //Загружаем модель
                Model{id: model}
                .....................................................................
                Item3D{id:shield;  mesh:model.shield;  position:Qt.vector3d(0,-20,98);  light: model.light1; transform: model.move_shield}
            }
        }
Код изображение которое надо получить на этом объекте (в 2d это выглядит так):

Код:
void circle1::paint(QPainter *painter)
{
    painter->save();
    int f=255;
    //параметры окна
    int x=width();
    int y=height();
    int z=width()/214;
    //устанавливаем цвет контура и заливки
    QPen pen = QPen(Qt::NoPen);
    QBrush black_brush = QBrush(QColor::fromRgba(qRgba(0,0,0,255)));
    QBrush red_brush = QBrush(QColor::fromRgba(qRgba(255,0,0,f)));
    painter->setPen(pen);
    //вычисляем кол-во зон Фринеля
    double m;
    m=1/(_distance_to_the_screen*0.01)+(1/((_distance_to_the_screen2-_distance_to_the_screen)*0.01));
    m=m*_radius*_radius*0.000001;
    m=m/(_wavelength*0.000000001);
    //выделяем целую часть числа, рисуем минимумы и максимумы
    int k=int(m);
    if(k!=0)
    {
        m=(x/2-2*z)/k;
        if(m/k>=0.5)m=int(m)-1;
        for(int i=1;i<=k;i++)
        {
            if(i%2==1)
            {
                painter->setBrush(red_brush);
                painter->drawEllipse(2+m*(i-1),2+m*(i-1),x-4-m*(i-1)*2,y-4-m*(i-1)*2);
            }
            else
            {
                painter->setBrush(black_brush);
                painter->drawEllipse(2+m*(i-1),2+m*(i-1),x-4-m*(i-1)*2,y-4-m*(i-1)*2);
            }
        }
    }
    else
    {
        int i=0;
        painter->setBrush(red_brush);
        painter->drawEllipse(2+m*(i-1),2+m*(i-1),x-4-m*(i-1)*2,y-4-m*(i-1)*2);
    }
    axis(painter);
    painter->restore();
}
Тут есть ещё один вопрос, возможно кто-то знает на него ответ, альфа-канал не хочет меняться в цикле.

Как выглядит все это по отдельности:


Само изображение - красный круг, а полотно, где его надо получить - это на модели слева.

Может ли кто подсказать, как все же получить нужное мне изображение, заранее благодарю!
326
24 июня 2014 года
sadovoya
757 / / 19.11.2005
Ничего не понял в вашей задумке. Но, помнится, что когда нечто 2D натягивают на 3D это называется текстурирование. Может вам просто текстура в виде круга на 3d объекте нужна? Берите плоскую грань (или создайте невидимый кубик под нужным полем зрения) и текстурируйте. Как-то так...
87K
25 июня 2014 года
Anarchist_42
4 / / 12.06.2014
Да, надо что-то на подобии текстурирования, но эта текстура - динамична и из-за этого возникают проблемы. Суть проблемы: надо получить рисунок, зависящий от каких-то параметров на этом экране(полотнещите), как накладывать статичную текстуру - легко, а вот динамичную уже не знаю.

Пробовал rectangle привязать по верх щита, но там слишком сложно, так как нету угла поворота самой модели, да и крутится он(rectangle) как то совсем не так, как надо.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог