A_javad Ответов: 3

Нужна помощь для принятия решения в выборе фреймворка для графики


Привет
Я пишу научную программу, и в части моей программы есть 40 миллионов объектов ( в некоторых случаях более 40 )
Я пишу эту часть с помощью c# и WPF, но когда я перемещаю объекты, они движутся очень медленно. Поэтому я решаю написать эту часть с OpenGL ,
I тест в блоке кода ( используется для оператора "for{i=0 ; i<40000000;i++} " ) :

1 - OpenGL с c# : результат не очень хороший
2 - OpenGL с QT : не очень хорошо.
3 - OpenGL с MFC : не очень хорошо
4 - OpenGL с c++ в консольном приложении visual studio : результат хороший
Но в данном случае у меня нет графического интерфейса для моей программы.

Что является лучшим фреймворком для меня ?

Что я уже пробовал:

1 - OpenGL с c# : результат не очень хороший
2 - OpenGL с QT : не очень хорошо.
3 - OpenGL с MFC : не очень хорошо
4 - OpenGL с c++ в консольном приложении visual studio : результат хороший

3 Ответов

Рейтинг:
25

Dave Kreskowiak

Ты не понимаешь, в чем проблема.

Проблема не в структуре, которую вы выбираете, и не в языке. Дело в том, что вы пытаетесь нарисовать 40 000 000 объектов! Нет никакого способа, чтобы у вас был монитор с 40 000 000 пикселей, так почему же вы пытаетесь нарисовать так много объектов?

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


A_javad

большое спасибо Дэйв Кресковяк

Рейтинг:
2

Rick York

Я проделал большую работу с MFC и OpenGL, и у меня были очень хорошие результаты. Я установил таймер обновления 16 мс, и он без проблем дает устойчивые 60 кадров в секунду с отображением более 1 м треугольников. Кроме того, мне очень легко работать с диалогами и тому подобным. Я использую список отображения для рисования, и это хорошо работает для меня. На этом сайте есть несколько программ, которые используют MFC и OpenGL, и те, которые я пробовал, работают хорошо. Взгляните на один из них под названием "50 проектов MFC OpenGL" или что-то в этом роде.

Я нашел несколько хороших приложений с исходным кодом, написанным на C++ и WxWidgets, и они работают довольно хорошо. Тот, что приходит на ум, называется Супершейпер. Вы должны быть в состоянии найти его легко.

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

Желаю удачи.


A_javad

Привет мистер Рик Йорк
я тестирую mfc и opengl из установочного файла, который нашел на этом сайте, и меняю функцию draw с помощью оператора for до тех пор, пока не нарисую 40 миллионов строк в одном и том же месте, но рисовать на экране очень медленно ( моя система-core i7 ).
Должен ли я что-то установить в mfc или opengl ?
(следует отметить, что во всех этих тестах я не использовал буфер во временных работах)

Rick York

Я написал: "я использую список отображения для рисования, и это хорошо работает для меня". это приводит к одному вызову в библиотеку, чтобы сделать весь рисунок. Без списка отображения вы вызываете библиотеку 40 миллионов раз, и это очень много накладных расходов, с которыми приходится иметь дело в любом API.

Рейтинг:
1

KarstenK

Проблема не в этом КАКОЙ-НИБУДЬ из этих фреймворков, но интерфейс OpenGL с ними. Мой длительный опыт работы с MFC и C# заключается в том, что производительность в основном так же быстра, как и C++, но недостатки реализации или неоптимальное использование замедляют их существенно вниз. Итак, мой диагноз таков: Вы делаете что-то неоптимальное.

Рабочие примеры на codeproject похожи Проекты OpenGL MFC или OpenGL в .NET Попробуйте вставить свой код чертежа в эти примеры.

мой совет: деактивируйте части кода MFC/QT/C#, чтобы найти свое узкое место и оптимизировать его, например, многократное создание или инициализацию, или массовое копирование объектов, например работу со строками. Я думаю ты найдешь его ;-)


A_javad

спасибо

KarstenK

Я добавил несколько ссылок для примеров.