LINUX.ORG.RU

VRender - построение и визуализация скалярных полей

 marching cubes,


0

1

Вот, выкладываю Вам свой проект, т. к. хочу услышать конструктивные отзывы о нём.

Как видно из названия темы - это визуализатор скалярных полей, которые можно построить задавая свою некоторую функцию на языке построения.
Визуализация производится с помощью алгоритма Marching Cubes, а построение скалярного поля производится используя специальный язык, созданный специально для этой программы. Язык больше похож на математические выражения, хотя есть элементы из языков программирования. Есть возможность экспортирования полученного объекта в формат Wavefront (.obj)
Проект разрабатывается как дипломная работа. Пока текст дипломной работы ещё не готов.

Лицензия: GPL v3
Состояние: Бета версия
Платформы: Linux, Windows

Технические детали: Программа разделена на два компонента: libvrender и vrender-gui.

libvrender это основная библиотека, в ней расположены компоненты для организации загрузки и работы с шейдерами, текстурами, вводом с клавиатуры и мыши, камера, математическая библиотека (матрицы, вектора, кватернионы, шумы), реализация алгоритма Marching Cubes, парсер языка построения, организация многопоточности (OpenMP), экспорт в Wavefront. Библиотека написана на C. Требует OpenGL 3.0+. Линкуется с vrender-gui статически. Для сборки используется CMake.
Основным компонентом является реализация алгоритма Marching Cubes, который позволяет полигонизировать скалярное поле в реальном времени. Расчёт нормалей производится внутри шейдера, а при экспорте в Wavefront расчёт производится на CPU.

vrender-gui графическая оболочка над libvrender. Написана на C++. Требует Qt4. Для сборки используются средства Qt.

За более подробной информацией о программе и языке построения обращайтесь в Справку внутри программы.

Скриншоты:
http://i.pixs.ru:/storage/3/2/3/dev1png_4606957_6726323.png
http://i.pixs.ru:/storage/3/2/4/dev2png_9075609_6726324.png
http://i.pixs.ru:/storage/3/2/5/dev3png_7407850_6726325.png
http://i.pixs.ru:/storage/3/2/6/dev4png_1935366_6726326.png
http://i.pixs.ru:/storage/3/2/7/dev5png_9841770_6726327.png

Github: https://github.com/Sfera2/VRender

Скачать:
Linux
Windows

Жду конструктивные отзывы, feedback и информацию об обнаруженных багах и недоделках.


Почему не marching thethraedrons?

Нынче raycastinc модно, при том считать сразу на GPU, по-моему.

Неплохо прикрутить DICOM, практическая польза возрастёт в разы (хотя аналогичного софта и так достаточно).

invy ★★★★★
()
Ответ на: комментарий от invy

Raycasting - это отлично, но marching cubes тоже не плохо. По поводу DICOM - интересная вещь, но я решил отойти от медицинских визуализаций (их действительно полно)

Sfera
() автор топика
Ответ на: комментарий от Sfera

наше дело предложить :) если препод принимает и надо «сдать на нормальную оценку», то зачем перенапрягаться...

но по хорошему «баян», то есть особо ничего нового ;)

каменты на русском - ПЛОХО. если препод требует, то конечно не попрёшь...

и кстати, почему парсер самописный, а не генерированый? ну и, где грамматика языка, где автомат, всё такое...

пс если что, не думай чтя тут докапыаюсь, эти вопросы тебе может и препод задать, что будет менее приятным, и возможно их стоит обосновать в тексте и обдумать заранее.

invy ★★★★★
()
Ответ на: комментарий от invy

Я думаю, что для 3-ого курса колледжа (дипломная работа не по окончанию колледжа, это конкурс дипломных работ) будет достаточно возможностей, особенно, если учесть, что когда я начал делать, то я понятия не имел о том, как делать парсеры, что такое marching cubes и т. п. Это мой первый крупный проект, поэтому я сделал парсер самописным, чтобы лучше его понять, а комменты на русском - для себя. Но всё равно спасибо за отзыв =)

P.S. проект может и баян, но не совсем, т. к. подобных проектов я не нашёл

Sfera
() автор топика

FPS что-то великоват на скриншоте, думаю стоит ограничить его до 30 или 60, чтобы не жрать ресурсы просто так.

Norgat ★★★★★
()
Ответ на: комментарий от buddhist

А почему бы и нет? Можно было сделать и OpenGL 2.1+, но коли сейчас уже у всех видеокарты 3.0+, то я сделал так

P.S. кстати я сделал так ещё и потому, что работал с геометрическими шейдерами, но они не прижились

Sfera
() автор топика
Ответ на: комментарий от Norgat

FPS такой большой, т. к. я выключил вертикальную синхронизацию

Sfera
() автор топика

На мой взгляд явно не хватает нормальной документации, лучше всего на основе Doxygen.

imb ★★
()
Ответ на: комментарий от imb

Проект не такой большой, что нужна Doxygen-документация, по крайней мере я ещё не разрабатывал проект с doxygen...

P.S. У меня уже нет времени заниматься переписыванием документации, но если Вы готовы помочь, то я обязательно присоединюсь

Sfera
() автор топика

О и тут. Я про баги вам на гамедеве отписал.

RPG
()

Исправлены некоторые баги. Ссылки на обновленную программу такие же.

Огромное спасибо Всем кто помогает улучшать программу =)

Sfera
() автор топика
Ответ на: комментарий от Sfera

надо было делать opengles и писать в core profile сразу (не смотрел, может у тебя и так в core profile) ;)

invy ★★★★★
()
Ответ на: комментарий от invy

llvm pipe - это хорошо, но а что в программе нужно изменить?

P.S. Программа работает в Core profile

Sfera
() автор топика
Ответ на: комментарий от invy

Как я понял для работы с llvm pipe нужна перекомпиляция Mesa драйвера, а в программе ничего менять не надо

Sfera
() автор топика
Ответ на: комментарий от Sfera

Выглядит симпатично.

P.S. проект может и баян, но не совсем, т. к. подобных проектов я не нашёл

Э-э-эм.

import numpy as np
from mayavi import mlab

x, y, z = np.ogrid[-64:64:40j, -64:64:40j, -64:64:40j]
s = (30.0 - np.sqrt(x**2+y*y))**2 + z*z - 15.0**2

src = mlab.pipeline.scalar_field(s)
mlab.pipeline.iso_surface(src, contours=[10], opacity=1)

mlab.show()

Я в numpy ничего не понимаю, а про mayavi узнал, пока гуглил.

У этого подхода есть и минусы: ест много памяти и нет specular.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Я, конечно же, знаю про программы визуализации изо-поверхностей, но я не видел программу, которая и строит (по введенной формуле) и визуализирует (с указанием различных параметров).

Но, всё равно спасибо за наводки.

Sfera
() автор топика
Ответ на: комментарий от Sfera

наводки.

Если вдруг захочешь в дальнейшем развить программу дальше, можно глянуть на http://www.pacifict.com/Home.html для вдохновения. Это древняя программа, она только под Mac и Windows, но в подобном «жанре» они были первыми. В каком-то смысле, Graphing Calculator это эталон.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Вот это очень интересно, огромное спасибо за информацию.

Sfera
() автор топика

Перевел программу на OpenGL 2.1 и несколько баг-фиксов.

Вот новые ссылки:
Windows
Linux

Sfera
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.