Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Anarion от Август 17, 2010, 16:18



Название: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 17, 2010, 16:18
Доброго времени суток.
Подскажите пожалуйста, возможно ли средствами Qt и какими (если возможно) реализовать следующий эээ объект?
(http://img33.imageshack.us/img33/5673/41673143.jpg)

Исходная статья:
http://forum.sources.ru/index.php?showtopic=272691

По собственному опыту были 2 идеи:
1) Реализовывать все это на QGraphicScene, но там я не нашел возможности трехмерной трансформации, т.е. повернуть тотже куб.
2) Использовать QGlWidget, но тут я пока не понимаю и не знаю, возможно ли создать куб так, чтобы на его сторонах размещались элементы управления.

Заранее благодарен.


Название: Re: Что использовать (виджеты 3D)?
Отправлено: crossly от Август 17, 2010, 16:37
http://labs.trolltech.com/blogs/2008/12/02/widgets-enter-the-third-dimension-wolfenqt (http://labs.trolltech.com/blogs/2008/12/02/widgets-enter-the-third-dimension-wolfenqt)


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 17, 2010, 17:29
Спасибо большое. Чувствуется, приключение будет долгим  :P


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 25, 2010, 15:17
Извиняюсь за возможно банальную проблему. Скачал исходник примера, указанного ссылкой предыдущего поста. На сколько понял, судя по строчке в одном из файлов
Код
C++ (Qt)
#include <GL/glew.h>
там используется библиотека glew.
Скачал бинарники для win-32 с http://glew.sourceforge.net,
*.h файлы(glew.h, glxew.h, wglew.h), включая glew.h, поместил в каталог C:\Qt\2010.02.1\qt\include\GL.
Либы подключил в проектном файле, через LIBS +=.
glew32.dll куда только не втыкал.

При компилляции получаю ошибки:
Код:
undefined reference to `_imp____glewEnableVertexAttribArray'
undefined reference to `_imp____glewVertexAttribPointer'
undefined reference to `_imp____glewDisableVertexAttribArray'
Ругается, соответственно на вызовы в программе:
Код
C++ (Qt)
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (float *)m_points.data());
glDisableVertexAttribArray(0);
Вроде как не определены указанные функции, но вот где (в каком файле) они должны быть, я так и не понял. В самом glew.h последовательно имеются строчки (например):
Код
C++ (Qt)
#define glEnableVertexAttribArray GLEW_GET_FUN(__glewEnableVertexAttribArray)
GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray;
и на этом все.

Если кто разбирался с этим примером, подскажите пожалуйста, как можно решить эту проблему.


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Авварон от Август 25, 2010, 15:19
как подключали либу? я собирал это дело под мак год назад:)


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 25, 2010, 15:26
Код:
LIBS += C:\Qt\2010.02.1\qt\lib\glew32.lib \
            C:\Qt\2010.02.1\qt\lib\glew32s.lib

Просто странно, что есть, например, вызовы glDrawArrays(GL_LINES, 0, points.size());, которые в том же glew.h описаны, но на них не ругается. Смею предположить, что либы все таки подключаются...


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Авварон от Август 25, 2010, 15:27
так, а либа каким компилером собрана? студийным? тогда не подцепиться из mingw


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 25, 2010, 15:29
Вот предполагал, что в этом может быть дело. Получается, что нужно в Qt собрать те либы? Если честно, не разбираюсь в аспекте компилляции различными компиляторами.


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Авварон от Август 25, 2010, 15:33
ну во 1х есть собранные либы под студию на сайте нокии. Во вторых, можно попробовать пересобрать сам glew под мингв


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 25, 2010, 15:46
Ну поскольку пишу в креаторе, то я так понимаю, что нужно компилить при помощи mingw все таки?


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Авварон от Август 25, 2010, 15:58
не обязательно, к креатору цепляется студийный компилятор спокойно


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 25, 2010, 16:41
Не подскажете, куда ткнуться почитать про "подцепление". Даже хз, чего у гугла спросить, просто  :(


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Авварон от Август 25, 2010, 17:53
указываете в профилях Qt студийный кумейк и всё... по идее:)


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 25, 2010, 18:54
Есть у меня предположение, что я окончательно запутался. Если я сейчас все правильно понимаю, то:
1) Либы прилагаемые в бинарниках glew собраны студийным компилятором (даже проект студийный в тех исходниках нашел и собрал 2005-й студией).
2) В креаторе используется компилятор mingw, который не хочет работать с либами, собранными при помощи студийного компилятора (если правильно понял, называеся msvc).
3) Чтобы это заработало, нужно
3.1) либо скомпилить исходники glew из креатора компилятором mingw, но там нету *.pro файла (подозреваю, что можно как-то чего-то вручную раскидать и получить нужный проект и сам *.pro файл, но с этим ни разу не сталкивался, так что пока опыта нет).
3.2) либо собрать этот пример опять же в креаторе, но в качестве компилятора указать студийный (поскольку точно не пойму как называется, не знаю, чего искать).
3.3) Вариант из области теории. В студии собрать либы используя компилятор mingw из папки с Qt.
Про студийный qmake не понял :( Поиск по её директории дал только пару файлов nmake.exe

P.S.: Студию дико нинавижу, поэтому мои познания в ней ничтожны, делал 20 лаб в универе и усе.
P.P.S.: Спасибо большое за помощь в разбирательстве  :)


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Авварон от Август 25, 2010, 19:28
вам нужно либо собрать Qt с помощью компилятора, либо скачать студийные либы с сайта Ноклы. Поставить эти либы, в профилях Qt в креаторе указать путь в qmake, который ставится вместе с либами. Всё


Название: Re: Что использовать (виджеты 3D)?
Отправлено: Anarion от Август 26, 2010, 00:44
Спасибо большое, разобрался. Скачал Qt 4.6.3 для VS и создал профиль на основе тех либ.
Осталось понять как заставить виджеты вращаться, не изменяя точку обзора.

Но. Не могу понять одного. Тот пример был опубликован в декабре 2008-го года и, как я понял, написан вроде как на Qt 4.5. В тоже время в коде была строчка, которая все равно выдавала ошибку:
Код
C++ (Qt)
view->setResizesToContents(false);
Если верить: http://doc.trolltech.com/4.7-snapshot/qgraphicswebview.html#resizesToContents-prop, то это свойство было введено в Qt 4.7. Как так? Они всмысле примеры обновляют периодически?