GDI проти DirectX проти OpenGL Графіка та звук - C # і

З нами з: 13.03.2007
Повідомлень: 41
Середовище розробки: Visual Studio 2008
Походження: Дюссельдорф

проти

GDI + проти DirectX проти OpenGL

Доброго ранку,
Я працюю в металургійній компанії, яка створює технологічні моделі. На даний момент ми працюємо трохи застарілою зі старою версією Fortran, яка інтегрована у Visual Studio 6. Графічний інтерфейс та графічний результат дуже хороші

Тепер я нарешті зміг переконати свого начальника отримати нове середовище розробки, за допомогою якого ми можемо реалізувати графічний інтерфейс та результати обчислень, але сам розрахунок все ще робиться у Fortran.

Ми вирішили вибрати VS2005 з C #. Структура програми буде такою: Введення всіх можливих даних через форму. Після натискання кнопки старту дані надсилаються у зовнішню DLL Fortran, яка потім починає обчислювати. Після обчислення результати повертаються до C #, C # малює поточні результати.

Тепер мова йде про виведення графічного виводу результатів на екран, я бачу 3 можливості: GDI +, DirectX і OpenGL.

Звичайно, важливим є те, ЩО я хочу зробити:
- нормальні діаграми в системі координат X/Y, де, наприклад, з часом відображається крива температури.
- Криві температури як ізотерми; Наприклад, прямокутник, де гарячі точки червоні, а там, де холодно, дрібно градуйовано до синього.
- Вільно намальовані зображення, або вставлені як BMP/будь-який формат зображення, або намальовані під час виконання.
- Я мав би змогу роздрукувати схеми та зберегти їх як зображення.
- Нові можливості також показують речі в 3D, кімнати з нашими системами, наприклад.

Останні кілька днів я робив трохи з GDI +, чого було б достатньо для нормальних діаграм X/Y. Як я розумію, малювання має бути зроблено методом OnPaint (). Було б краще, якби я дав імпульс перекроювати, щоб центральний процесор не був надмірно обтяжений. Я отримаю підручник відразу Малювання в програмах Windows (Paint/OnPaint, PictureBox) привести до розуму. Думаю, це дасть відповідь на багато питань (просто дурне, що його складно надрукувати).

Я не дуже ладнаю з DirectX SDK за лютий 2007 року. З одного боку, допомога все ще актуальна з серпня 2005 року, тому методи Direct3D тощо були перейменовані або відсутні або замінені. Мені не вдалося намалювати простих ліній, але я також ще не зміг застрягти належним чином.
З іншого боку, мене турбує те, що, як кажуть, DirectDraw більше не підтримується, і краще більше з ним не розвиватися. Оскільки ми тут зупиняємося на XP, DirectX9, ймовірно, залишиться останньою версією для XP. Тож мені все одно, правда?

Я ще не торкався OpenGL.

Було б непогано, якби той чи інший міг опублікувати свій досвід роботи з трьома системами, я з нетерпінням чекаю кожного пориву та поживи для роздумів

З нами з: 04.06.2005
Внесок: 1439
Середовище розробки: Notepad ++ + csc + nmake
Походження: Лінц, Австрія

З нами з: 13.03.2007
Повідомлень: 41
Середовище розробки: Visual Studio 2008
Походження: Дюссельдорф

Тема стартера

З нами з: 04.06.2005
Внесок: 1439
Середовище розробки: Notepad ++ + csc + nmake
Походження: Лінц, Австрія

З нами з: 17.03.2005
Внесок: 5914
Середовище розробки: VS 2017/VS Code
Походження: Центральна Швейцарія

Для діаграм та не дуже чудових анімованих 2D-сюжетів я б також використовував GDI +. Це легко зробити, і, як я вже сказав, не обов'язково вимагає тривалого періоду тренувань.

Що стосується більш складної анімації та/або 3D-візуалізації, то ніяк не обійти OpenGL або DirectX.
Тут ви зіпсовані вибором, для OpenGL ви знайдете більше підручників загалом, але переважно не у зв'язку з C #.
В Інтернеті існує відносно багато підручників для DirectX, особливо у зв’язку з C #. Але здебільшого англійською.

Спочатку я розробляв прості уявлення за допомогою GDI +, а пізніше щось розширював за допомогою OpenGL або DirectX.

З нами з: 07.07.2005
Внески: 2890
Середовище розробки: SharpDevelop/VS.NET
Походження: Німеччина

Цитата:
просто дурний, що його складно друкувати

Десь була дискусія щодо роздруківки у форматі PDF, щодо форуму, шукайте її

Цитата:
"Проблема", яку я все ще маю з GDI, полягає в тому, що початок малювання знаходиться вгорі ліворуч. З діаграмами це внизу ліворуч. Чи можете ви це якось змінити, чи мені доведеться щоразу конвертувати його?

Шукайте матрицю та переклад, якщо вам це подобається

Код C #:
Матриця матриця = нова матриця ();
matrix.Translate (x, y);

зробіть це і застосуйте це до графічного об’єкта:

річ з’їдена,
в іншому випадку вам завжди доведеться навернутися.
Що в цьому випадку не буде великою справою, просто переверніть Y.
DeinY = походження - Y.

Цитата:
Я бачу 3 можливості: GDI +, DirectX і OpenGL.

Я б також використовував GDI.

З DirectX та OpenGL у вас є більше роботи, тому що ви повинні ознайомитись із темою далі. У GDI ви можете почати малювати відразу.
У OpenGL та DirectX спочатку потрібно створити вікно відображення. Звичайно, ви також можете відобразити тривимірну графіку пізніше.

IMHO, DirectX вимагає найбільших зусиль.

Тож візьміть GDI і - якщо потрібно - перейдіть на OpenGL.

Однак для мене ця потреба ніколи не виникала, тому що GDI досить швидкий.

Цю публікацію редагували 1 раз, востаннє dr4g0n76 03.15.2007 12:28 .

З нами з: 08.08.2006
Повідомлень: 95
Середовище розробки: VS 2010 Pro
Походження: Тіроль

З нами з: 1 жовтня 2006 р
Внески: 11 397
Середовище розробки: Visual Studio 08.05.10 Проф.

я також для gdi для простих подань (2D), і якщо ви хочете перейти на 3D, ви також можете використовувати фреймворк XNA. Завдяки цьому набагато простіше розробити 3D, оскільки ви позбавлені багатьох речей, які вам все одно доведеться робити вручну за допомогою стандартного керованого DirectX.

в іншому випадку, якщо ви хочете відображати лише прості геометричні моделі в змодельованому 3D, ви також можете зробити це за допомогою gdi, але у вас там немає текстур.

З нами з: 13.03.2007
Повідомлень: 41
Середовище розробки: Visual Studio 2008
Походження: Дюссельдорф

Тема стартера

Перш за все дякую за відповіді!

З перетворенням матриці я прочитав, що працює: дзеркально відобразити його на осі X і посунути вниз по висоті екрана. Однак BMP потім також віддзеркалюються, що не зовсім суть. Зараз я перезаписав потрібні мені методи "заміни" для методів Graphics.Draw ****, де виправляю значення Y.

Зедграф виглядає досить приємно. Хтось справді доклав зусиль. Я повинен перевірити, чи відповідає він моїм цілям, інакше ви все одно можете використовувати його для інших цілей відображення.

На вихідних я подивлюся на OpenGL вдома. Вже знайшов пару сторінок з обгортками для C #.

Поки що я не буду чіпати XNA. По-перше, оскільки наразі це доступно лише для C # Express, а по-друге, я не хочу встановлювати тисячу інших програм на цільових системах.