Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Система рисования. Печать _ Qt+OpenGL. Qt "не видит" функции OpenGL

Автор: Christor 28.1.2013, 22:02

Доброго времени суток.
Срочно нужна помощь.
Скопировал код со статьи http://www.gamedev.ru/code/articles/OpenGL_Qt4 (своего не добавлял).
В итоге вот такие ошибки:

т.е. Стандартные функции gl не видны. Практически все функции с префиксом gl не работают. Как будто не подключён gl.h (он же вроде должен быть в модуле Qt).
Пробовал другие исходники с OpenGL. Результат тот же.
В чём может быть ошибка? Очень срочну нужно решить проблему.
Qt 5.0 (статья для Qt 4. Может быть с этим связано?)
Очень надеюсь на помощь.

Автор: lanz 29.1.2013, 8:46

.pro файл такой же как в оригинальной стаье? (lecture1.pro)

Автор: Christor 29.1.2013, 10:37

Да.
Вот My.pro:

TEMPLATE = app

# Input
HEADERS += scene3D.h
SOURCES += main.cpp scene3D.cpp
QT += opengl

Я не могу понять, почему
glEnable(GL_DEPTH_TEST); работает, а
glShadeModel(GL_FLAT); не работает.
Как будто glShadeModel(GL_FLAT); просто нигде не прописана.
Константу GL_FLAT тоже не видит. Как будто она не определена. И многие другие функции.
За то glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, (GLint)nWidth, (GLint)nHeight); видны и компилятор на них не ругается.

Автор: lanz 29.1.2013, 13:00

Что за система? Виртуалка/эмулятор?

Похоже на OpenGL ES. В ней не будут работать эти команды, ищи пример для GL ES.

Автор: Christor 29.1.2013, 13:16

Windows 7. Не виртуалка и не эмулятор.
Сейчас попробую переустановить Qt. Но думаю не поможет.
OpenGL ES ? Я ничего подобного не ставил. Разве с Qt не идут все необходимые OpenGL файлы?
Где должен находиться gl.h ?

Автор: lanz 29.1.2013, 16:16

Возможно проблемы с драйвером видеокарты.

В Qt4 все работает, проверял сегодня и в Creator и в MSVS2010, Win7x64.
Возможно дело действительно в Qt5, надо будет поиграться.

Автор: lanz 29.1.2013, 16:54

Поставил Qt5. Подтверждаю, у меня тоже не видит .)

Смотреть почему - http://qt-project.org/forums/viewthread/22821 (от 20 декабря)

Цитата
OK that is the source of your issues then. The pre-compiled Windows desktop version of Qt5 is built against ANGLE which only provides OpenGL ES 2 support by implementing it on top of DirectX 9.
This was done to ensure that QtQuick2 works on all windows systems, including those with crappy Intel OpenGL drivers ;)
OpenGL ES 2 does not support the legacy fixed function pipeline, only a shader-based one.
There is a bug open to provide a build of Qt 5 using the native desktop OpenGL implementation for Qt 5.0.1. Please go vote for https://bugreports.qt-project.org/browse/QTBUG-28715 to see this happen.
For now, you have two choices:
Live with OpenGL ES 2 support and don’t use legacy OpenGL
Build your own copy of Qt 5 to use the native OpenGL drivers by passing in

-opengl desktop

to configure.

With the 2nd option you should have access to OpenGL from 1.0 up to 4.3 (if your card/driver support it).

Суть вкратце:
1. Устанавливаемая собранная версия Qt собрана с использованием OpenGL ES, чтобы QtQuick 2 мог работать на всех системах с Windows.
2. Как я уже говорил OpenGL ES не поддерживает многих старых функций fixed pipeline, только шейдеры, только хардкор .)
3. Можно проголосовать за десктопную сборку для 5.0.1 по ссылке https://bugreports.qt-project.org/browse/QTBUG-28715 , но пока ее нет.
4. Собственно есть два пути
Отказаться от старых функций и использовать только шейдеры.
Или собрать Qt с использованием нативного OpenGL (используя опцию -opengl desktop)

Автор: Christor 29.1.2013, 17:33

Установил Qt libraries 4.8.4 for Windows (VS 2010, 234 MB) и QtCreator к нему.
Всё отлично заработало.
Я с Qt Познакомился около недели назад(это я к тому, что с ним никогда не работал). Естественно сразу скачал последнюю версию. С OpenGL тоже на Вы. Когда-то давно баловался используя glut. Делал всякие 3D пирамидки, сферы. Сейчас нужно написать не сложную 2D игру.

Цитата(lanz @ 29.1.2013, 16:54) *
Или собрать Qt с использованием нативного OpenGL (используя опцию -opengl desktop)

Под "собрать" я понимаю собрать из исходников. Верно?
Имеет ли смысл делать данную процедуру или лучше тихо и мирно оставаться на 4.8.4 ?
lanz, спасибо!

Автор: lanz 30.1.2013, 9:29

Рад помочь .)

Цитата(Christor @ 29.1.2013, 18:33) *
Под "собрать" я понимаю собрать из исходников. Верно?

Да, все верно. Это не так страшно как кажется .)
Цитата
Имеет ли смысл делать данную процедуру или лучше тихо и мирно оставаться на 4.8.4 ?

Тут есть несколько моментов.

Если есть желание освоить OpenGL то как мне кажется лучше начинать с fixed pipeline и immediate mode(glBegin/glEnd) - OpenGL 2, потом переходить на шейдеры/буферы (OpenGL 3-4(core profile)/ES).

Если уже есть представление как работают GL/DirectX то можно сразу начинать с GL4 версии.

Однако на это все время уйдет, поэтому если нужно быстро написать то лучше взять готовый движок(например http://hge.relishgames.com/), так получится быстрее и лучше. Кармака в твиттере спросили как то - что бы мне изучить, чтобы сделать игру? Он ответил: Если хотите действительно сделать игру, найдите как можно больше готового кода (библиотеки, движок и т.п.)

Это в качестве оффтопа, а так изучать конечно лучше последнюю версию.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)