1

Тема: OpenGL ES

Из-за урезанного OpenGL на N950 не компилятся фрагменты типа

        glBegin(GL_LINE_LOOP); // рисуем многогранники
            for (int iPoint = 0; iPoint < nPoints; iPoint++) { // по всем граням
                glVertex2d(this->faces[iFace][iPoint].x,
                           this->faces[iFace][iPoint].y);
            }
        glEnd();

На что их заменять?

На то, о чем можно спросить на форуме, не отвечаю через личные сообщения, аську, почту и т.п. для общения есть jabber-конференция: maemo@conference.jabber.org.
QKit - инструментарий для быстрого кроссплатформенного создания приложений на QML.
FAQ по Nokia N9 - читаем, пополняем.
Прежде, чем задать вопрос, воспользуйтесь поиском!

Сайт KiRiK

Поделиться

2

Re: OpenGL ES

Я давненько изучал openGl, могу немного подсказать.
Так, как ты написал никто давно неделает. Это проходит на десктопе в режиме обучения, не больше.
Тебе нужно сделать массив обычный, описывающий все эти треугольники( там задаются координаты вершин и координаты текстуры) и залить этот массив с помощью одной opengl команды на видеокарту. А потом уже к нему привязывать текстуру и выводить на экран

Поделиться

3

Re: OpenGL ES

KiRiK не урезаный, OpenGL ES, http://www.songho.ca/opengl/gl_vertexarray.html (работает второй способ, но без QUADS, а с TRIANGLES)
вот справка http://www.khronos.org/opengles/sdk/1.1/docs/man/
некоторые различия между gl\gl es http://www.developer.nokia.com/Communit … nGL_ES_1.0

We all know Linux is great … it does infinite loops in 5 seconds.The only limiting factor of the Linux operating system is its user.

4

Re: OpenGL ES

О, отлично. Спасибо bonapart. Я тоже хотел попробовать что нибудь сделать для телефона в 3д.

Поделиться

5

Re: OpenGL ES

smith пишет:

Так, как ты написал никто давно неделает.

Писал тогда, когда еще делали. С тех пор OpenGL не трогал smile

bonapart, спасибо, почитаю.

На то, о чем можно спросить на форуме, не отвечаю через личные сообщения, аську, почту и т.п. для общения есть jabber-конференция: maemo@conference.jabber.org.
QKit - инструментарий для быстрого кроссплатформенного создания приложений на QML.
FAQ по Nokia N9 - читаем, пополняем.
Прежде, чем задать вопрос, воспользуйтесь поиском!

Сайт KiRiK

Поделиться

6

Re: OpenGL ES

Сделал так

        QVector<GLdouble> vertices = Gl3dObject::pointsToVertices(this->faces[iFace]); // массив координат точек грани
        glEnableClientState(GL_VERTEX_ARRAY);
        glVertexPointer(3, GL_DOUBLE, 0, vertices.data());
        glDrawArrays(GL_LINE_LOOP, 0, vertices.size());
        glDisableClientState(GL_VERTEX_ARRAY);

Проверяю на компе - полезли лаги всякие. Например, лишние линии то появятся, то пропадут, если повернуть рисуемый объект.

На то, о чем можно спросить на форуме, не отвечаю через личные сообщения, аську, почту и т.п. для общения есть jabber-конференция: maemo@conference.jabber.org.
QKit - инструментарий для быстрого кроссплатформенного создания приложений на QML.
FAQ по Nokia N9 - читаем, пополняем.
Прежде, чем задать вопрос, воспользуйтесь поиском!

Сайт KiRiK

Поделиться

7

Re: OpenGL ES

А еще, функцию

glMultiDrawArrays

для рисования нескольких примитивов не находит.

На то, о чем можно спросить на форуме, не отвечаю через личные сообщения, аську, почту и т.п. для общения есть jabber-конференция: maemo@conference.jabber.org.
QKit - инструментарий для быстрого кроссплатформенного создания приложений на QML.
FAQ по Nokia N9 - читаем, пополняем.
Прежде, чем задать вопрос, воспользуйтесь поиском!

Сайт KiRiK

Поделиться

8

Re: OpenGL ES

Конструктивная постановка вопроса.
Есть 2 небольших примера из Qt SDK.
cubehouse успешно собирается для Maemo 5 и запускается на N900.
hellogl_es собирается для PC, но при попытке скомпилировать для Maemo 5 вылезают ошибки

hellogl_es\glwidget.cpp:114: ошибка: 'GL_VERTEX_ARRAY' was not declared in this scope
hellogl_es\glwidget.cpp:114: ошибка: 'glEnableClientState' was not declared in this scope
hellogl_es\glwidget.cpp:115: ошибка: 'glVertexPointer' was not declared in this scope
hellogl_es\glwidget.cpp:116: ошибка: 'GL_NORMAL_ARRAY' was not declared in this scope
hellogl_es\glwidget.cpp:117: ошибка: 'glNormalPointer' was not declared in this scope
hellogl_es\glwidget.cpp:-1: In member function 'void GLWidget::paintTexturedCube()':
и т.д.

Я, быть может, сильно туплю, но не вижу что такое подключено в cubehouse, что позволяет успешно скомпилировать строки, содержащие
GL_VERTEX_ARRAY и т.п.

Post's attachments

cubehouse.zip 117.39 kb, 4 загрузок с 2011-08-17 

hellogl_es.zip 18.58 kb, 1 загрузок с 2011-08-17 

У Вас недостаточно прав для загрузки файлов, прикрепленных к этому сообщению.
На то, о чем можно спросить на форуме, не отвечаю через личные сообщения, аську, почту и т.п. для общения есть jabber-конференция: maemo@conference.jabber.org.
QKit - инструментарий для быстрого кроссплатформенного создания приложений на QML.
FAQ по Nokia N9 - читаем, пополняем.
Прежде, чем задать вопрос, воспользуйтесь поиском!

Сайт KiRiK

Поделиться

9

Re: OpenGL ES

KiRiK может я тоже туплю, но в .pro файле почему то разрабы Qt сами ясно прописали
maemo5: warning(This example does not work on Maemo platform)

We all know Linux is great … it does infinite loops in 5 seconds.The only limiting factor of the Linux operating system is its user.

Поделиться

10

Re: OpenGL ES

Я не видел, если честно.
Но суть дела остается: почему именно в том месте ошибки вылетают, когда в cubehouse оно хавается.
Мне это интересно потому, что у меня такие же ошибки.

На то, о чем можно спросить на форуме, не отвечаю через личные сообщения, аську, почту и т.п. для общения есть jabber-конференция: maemo@conference.jabber.org.
QKit - инструментарий для быстрого кроссплатформенного создания приложений на QML.
FAQ по Nokia N9 - читаем, пополняем.
Прежде, чем задать вопрос, воспользуйтесь поиском!

Сайт KiRiK

Поделиться

11 (25.12.2011 22:09:29 отредактировано Torvald)

Re: OpenGL ES

Всем привет, я вновь и вновь поднимаю тему по поводу "урезанного" OpenGL на maemo.
Для начала опишу как я привык писать программы: открываю Qt, пишу, компилю для win/lin/mac/maemo.
Наконец, решил написать кое-что с использованием OpenGL и обнаружилось, что под maemo не компилятся функции типа glBegin(), glEnd(), glLoadIdentity() и прочие, на мой взгляд, важные функции. Трехдневный поиск по интернету дал мне понять:

  • n900 использует не совсем OpenGL, а его подмножество OpenGL ES 2.0

  • Все примеры и уроки не используют вышеперечисленные функции OpenGL, а используют лишь малую их часть + какие то свои методы библиотеки Qt. Так например вместо одного вызова функции glTranslate(), приходится создавать вершинный шейдер (а заодно и фрагментный), руками создавать матрицу (QMatrix4x4), вызывать у нее функцию сдвига и, наконец, связывать ее с шейдером.

  • Однако использовать стандартные функции OpenGL все таки возможно. Но для этого необходимо ставить Scratchbox и пихать в него дополнительные библиотеки. Но у этого метода есть 1 серьезный минус - отсутствие кроссплатформенности. Приложение будет работать только под maemo (мб еще и на линуксе х86). Не говоря уже об отсутствии удобной ide в лице Qt.

  • Есть еще несколько сторонних библиотек, обеспечивающих возможность пользоваться полным функционалом OpenGL, однако по тем или иным причинам они мне не подходят.

Как я понял в сборке Qt для maemo отсутствует ряд библиотек, предоставляющих все функции OpenGL. Однако использование их на платформе maemo возможно (пример тому NeHeGLES).
А теперь главное:
Есть возможность писать на Qt со всеми этими glBegin(), glEnd(), glLoadIdentity() и при этом без труда компилить как на десктоп так и на маемо? Пробовал просто подсовывать недостающие библиотеки - возникают ошибки о не соответствии платформы.

Поделиться

12

Re: OpenGL ES

Я пробовал возится с шейдерами (собственно и сейчас, когда время нахожу) на MeeGo, но в связке с QML. Сильная вещь получается, но заметил тоже, что если взять просто так шейдер и попытаться воткнуть его в QML ничегошеньки не выходит. Приходится его крутить вертеть. Пока тока разбираюсь.

Сайт stolix

Поделиться

13

Re: OpenGL ES

> Из-за урезанного OpenGL на N950 не компилятся фрагменты типа
[font=monospace]> ...[/font]
> На что их заменять?

Нашла книжку по OpenGL ES: "OpenGL® ES 2.0 Programming Guide": http://mirknig.com/knigi/programming/11 … guide.html
Правда, примеры из нее у меня не откомпилировались.

Мне удалось собрать и запустить на N900 пример CubeHouse. Удалось скомпоновать на одном экране и 3D-картинку, и 2-мерный экран QWidget'а. QWidget - видимый, а QGLWidget - невидим, картинку из него беру с помощью renderPixmap() и вывожу в QWidget'е.

Единственная проблема - мне нужна 3D-сцена с прозрачным фоном. Я пробовала цвет фона делать прозрачным - не вышло:

QGLFormat f = format();
f.setAlpha(true);
setFormat(f);
glClearColor(1.0f, 0.0f, 1.0f, 0.5f); // Пробовала и  ...0.0f); , и ...1.0f); - выводится яркая magenta

Допустим, я сделаю фон синим, а рендериться у меня будут предметы без синего цвета. Подскажите, можно ли средствами Qt "вырезать" из изображения какой-то конкретный цвет, например 0x0000FF - так, чтобы вместо него осталось прозрачное пространство?

Поделиться

14

Re: OpenGL ES

Сама же, как водится, разобралась с собственным вопросом. Несколько дней ищешь ответ, потом задаешь вопрос и тут же сама находишь решение smile

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Поделиться