3d графика с применением эрланга (vbo, opengl)

250 views
Skip to first unread message

Eli Y

unread,
Aug 17, 2014, 4:46:10 AM8/17/14
to erlang-...@googlegroups.com
Делаю программку реализующую распералеленый расчёт процедурной геометрии, и хочу сделать её непремерно на эрланге. Для начала я решил посмотреть как на эрланге можно использовать OpenGL, чтоб не разделять приложение на вычисляющий сервер и дополнительный клиент, рисующий в окошке результат. Столкнулся с тем, что при использовании вершинных буферов в окошке не рисуется даже обычный квадрат, при том что через gl:'begin' / gl:'end' квадрат прекрасно рисуется, и аналогичный код использования VBO в c++ тоже прекрасно работает.
Вот код инициализации и заполнения буфера:
----------
[VBuff] = gl:genBuffers(1),
VBuffData = <<(-1.0):32/float, (-1.0):32/float, (1.0):32/float,
(1.0):32/float, (-1.0):32/float, (1.0):32/float,
(1.0):32/float, (1.0):32/float, (1.0):32/float,
(-1.0):32/float, (1.0):32/float, (1.0):32/float>>,
gl:bindBuffer(?GL_ARRAY_BUFFER, VBuff),
gl:bufferData(?GL_ARRAY_BUFFER, size(VBuffData), VBuffData, ?GL_STATIC_DRAW),
gl:bindBuffer(?GL_ARRAY_BUFFER, 0),
----------
А вот код отрисовки:
----------
gl:bindBuffer(?GL_ARRAY_BUFFER, VBuff),
gl:vertexPointer(3, ?GL_FLOAT, 0, 0),
gl:enableClientState(?GL_VERTEX_ARRAY),
gl:drawArrays(?GL_QUADS, 0, ?NUM_VERTS),
gl:disableClientState(?GL_VERTEX_ARRAY),
gl:bindBuffer(?GL_ARRAY_BUFFER, 0),
----------
Если кто-нибудь делал что-либо подобное на эрланге, подскажите, как заставить его рисовать геометрию из VBO. Я просто не знаю, что тут пошло не так.
Может стоит сделать всё-таки клиент-серверную архитектуру, отрисовщик вынести в клиент, а вычислитель написать на эрланге как сервер? Впринципе ведь ничего не мешает мне пойти и этим путём, программка-то учебная, единственное что код усложнится.

Сергей Ивлев

unread,
Aug 18, 2014, 1:00:43 AM8/18/14
to erlang-...@googlegroups.com
Добрый день. А Вы примеры из wx:demo() смотрели? Они должны Вам помочь.

воскресенье, 17 августа 2014 г., 12:46:10 UTC+4 пользователь Eli Y написал:

Eli Y

unread,
Aug 18, 2014, 2:37:56 AM8/18/14
to erlang-...@googlegroups.com
Сергей, если вы имели в виду примеры, что лежат в папке wx-1.3/examples/demo , то там касательно OpenGL только один пример, и рисование в нём производится через glBegin/glEnd, что является некошерным из-за нерационального использования ресурсов машины. Для чего-то серьёзнее кубика на экране это не годится. Примера по использованию VBO я там не нашел.

понедельник, 18 августа 2014 г., 16:00:43 UTC+11 пользователь Сергей Ивлев написал:

Sergey Pavlov

unread,
Aug 18, 2014, 7:06:16 AM8/18/14
to erlang-...@googlegroups.com
попробуй посмотреть здесь http://www.wings3d.com/
вроде на эрланге реализовано

Alexander Tchitchigin

unread,
Aug 18, 2014, 8:14:42 AM8/18/14
to erlang-...@googlegroups.com
Давайте, я попробую отговорить Вас от Эрланга. :)

Во-первых, КМК, OpenGL-байндинги в Эрланге реализованы просто "чтобы были", соответственно, работают они "постольку поскольку". Даже если на Эрланге и написана пара-тройка приолжений с 3D, то это больше "по приколу" и "proof-of-concept". В продакшене Эрланг используется для совсем других задач, вообще не связанных с графикой, поэтому работоспособность байндингов к графическим библиотекам находится где-то в самом низу списка приоритетов разработчиков. Если Вы отчаянно хотите писать OpenGL-приложения на Эрланг, то обновлять и поддерживать байндинги придётся Вам же.

Во-вторых, как я понял, Вы хотите распределённо обсчитывать "тяжёлую" численную задачу. Потому что если она не сильно "тяжёлая", то зачем её распределённо рассчитывать?
Проблема в том, что численные рассчёты в Эрланг работают очень медленно. С высокой степенью вероятности, распределённые расчёты на Эрланг будут вычисляться дольше, чем на C/C++ на одной машине - если у Вас не пара десятков машин, по меньшей мере. Хотя и тогда могут быть проблемы из-за накладных расходов на синхронизацию.

Не являюсь специалистом в области High Performance Computing, но насколько знаю, для "ляжёлых" численных вычислений в основном используется C++ + MPI - стандарт де-факто, хотя, во многом, по историческим причинам.

Однако писать на "голом" MPI для Вас, думаю, не обязательно, к тому же это процесс довольно болезненный в любом случае. :)
Можно взять какую-нибудь C++-библиотеку или фреймворк, реализующую "Эрланг" (message passing) поверх TCP/IP или того же MPI. Например, для проекта Foundation DB сделали не только такой фреймворк, но и расширение языка C++.

Если хочется поработать с более экзотичным языком, чем C++, то наиболее активно развиваемый именно в области параллельных/распределённых научных вычислений - Julia (julia-lang.org). Если остро хочется ещё большей экзотики - можно попробовать Chapel или X10. :)

На самом же деле, если данные (более-менее) умещаются в оперативную память, то эффективнее использовать вычисления на видеокарте (CUDA или OpenCL).


Не пытаясь навязать кому-либо своё (илетантское) мнение, хочется пропагандировать "инженерный подход": здравую (по возможности - объективную) оценку преимуществ/недостатков доступных подходов и инструментов и выбор наиболее подходящих для задачи.

Хотя если бы передо мной стояла такая задача и полная свобода выбора инструментов - я бы зафигачил всё на Хаскеле! :-D



2014-08-18 15:06 GMT+04:00 Sergey Pavlov <psg...@gmail.com>:
попробуй посмотреть здесь http://www.wings3d.com/
вроде на эрланге реализовано

--
Вы получили это сообщение, поскольку подписаны на группу "Erlang по-русски".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес erlang-russia...@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--
С уважением,
Александр.

Valery Meleshkin

unread,
Aug 26, 2014, 9:21:50 AM8/26/14
to erlang-...@googlegroups.com
Мне всегда казалось, что enableClientState надо вызывать перед самым началом отрисовки до биндинга чего-либо.

воскресенье, 17 августа 2014 г., 11:46:10 UTC+3 пользователь Eli Y написал:
Reply all
Reply to author
Forward
0 new messages