квазираскинский масштабируемый, в основном текстовый интерфейс + 3d, кроссплатформенный и открытый; с чего начать? (опенгл?)

в этом мире доминирует браузер и растровая графика - после десятилетий богато украшенных окон и красивых компонентов в стиле Macintosh - я ищу способ отображать символьный текст фиксированного размера, рисовать чрезвычайно упрощенный «графический интерфейс» на трехмерных панелях, которые можно масштабировать. и интерактивное изменение размера, делающее содержимое крошечным, не обернутым или не более читаемым, на «панели», которые пользователь может складывать вместе, «складывать», переворачивать, перетаскивать и т. д.

программное обеспечение должно быть переносимым или кроссплатформенным.

кажется, что простой базовый 3D-слой — это хорошая вещь, например. opengl, проблема в том, что я ничего не знаю об этих вещах.

Каков самый простой способ сделать это, не изучая весь набор инструментов для 3D?

что может быть наиболее подходящим инструментом для достижения этой цели?

Java3D? или это устарело/медленно? qt toolkit 3d виджеты?

заранее спасибо за любую подсказку


person Unknown    schedule 02.01.2010    source источник


Ответы (1)


OpenGL поддерживает рендеринг текста, в частности: `

glRaster3f(GLfloat x, GLfloat y, GLfloat z);

установит "растровое" положение, и

glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'h');

будет отображать h в этой «растровой» позиции. Однако для этого потребуется изучить API OpenGL.

Другой вариант — сделать всю математику для проецирования самостоятельно и просто отобразить ее в массиве символов, размер которого равен размеру вашего окна.

Вот представлены матрицы, которые OpenGL использует для трехмерных проекций и преобразований.

В целом это будет иметь тот же эффект, и вам не понадобятся все дополнительные библиотеки. Однако на самом деле это сделает вашу основную программу больше и может быть немного медленнее, потому что она не имеет аппаратного ускорения, как OpenGL.

С другой стороны, Java3D фактически работает поверх OpenGL или Direct3D, что означает, что библиотеки, необходимые для его запуска, будут еще более обширными. Тем не менее, несмотря на то, что это API, он кажется гораздо более простым API, чем OpenGL или Direct3D.

Интерактивность — это вообще отдельная проблема.

Опять же, OpenGL имеет необходимую поддержку.

gluUnProject(GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ);

будет преобразовывать координаты окна, возвращаемые щелчком мыши, в трехмерные координаты самого переднего тексела с учетом правильных матриц проекции и представления модели.

Я действительно не знаю о java3D в этом случае или даже о том, что бы вы использовали, если бы рассчитали свой собственный 3D-эффект.

В целом, у вас есть из чего выбирать, но все требует большой работы и рассмотрения.

person Ned Bingham    schedule 02.01.2010
comment
большое спасибо; и последнее: что вы думаете об абстрагировании таких фреймворков, как sdl? еще раз спасибо - person Unknown; 07.01.2010
comment
webgl, opengl для Интернета тоже кажется многообещающим - person Unknown; 07.01.2010
comment
SDL — это жизнеспособный API ввода и обработки событий, однако графическая поддержка SDL основана на OpenGL, поэтому вы можете просто использовать SDL для ввода и OpenGL для графики. Существует также GLUT, который также обрабатывает ввод и события. Для OpenGL, отображаемого в браузере, я использую java-апплет JOGL. Кажется, я не могу заставить webgl работать на моей машине, хотя это определенно выглядит круто. Казалось, что это требует много настроек на стороне пользователя. Пример jogl смотрите здесь -› jogl-demos.dev.java.net/applettest .html Код см. здесь kenai.com/projects/jogl/sources/jogl-demos-git/show/src/demos - person Ned Bingham; 07.01.2010