crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Qt+OpenGL. Qt "не видит" функции OpenGL, C3861: 'glOrtho': identifier not found
Christor
  опции профиля:
сообщение 28.1.2013, 22:02
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 28.1.2013
Пользователь №: 3689

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток.
Срочно нужна помощь.
Скопировал код со статьи 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
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


.pro файл такой же как в оригинальной стаье? (lecture1.pro)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Christor
  опции профиля:
сообщение 29.1.2013, 10:37
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 28.1.2013
Пользователь №: 3689

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да.
Вот 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
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


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

Похоже на OpenGL ES. В ней не будут работать эти команды, ищи пример для GL ES.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Christor
  опции профиля:
сообщение 29.1.2013, 13:16
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 28.1.2013
Пользователь №: 3689

Спасибо сказали: 0 раз(а)




Репутация:   0  


Windows 7. Не виртуалка и не эмулятор.
Сейчас попробую переустановить Qt. Но думаю не поможет.
OpenGL ES ? Я ничего подобного не ставил. Разве с Qt не идут все необходимые OpenGL файлы?
Где должен находиться gl.h ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 29.1.2013, 16:16
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


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

В Qt4 все работает, проверял сегодня и в Creator и в MSVS2010, Win7x64.
Возможно дело действительно в Qt5, надо будет поиграться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 29.1.2013, 16:54
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Поставил 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
Сообщение #8


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 28.1.2013
Пользователь №: 3689

Спасибо сказали: 0 раз(а)




Репутация:   0  


Установил 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
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Рад помочь .)
Цитата(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/), так получится быстрее и лучше. Кармака в твиттере спросили как то - что бы мне изучить, чтобы сделать игру? Он ответил: Если хотите действительно сделать игру, найдите как можно больше готового кода (библиотеки, движок и т.п.)

Это в качестве оффтопа, а так изучать конечно лучше последнюю версию.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 14.4.2021, 20:33