Нужен совет относительно перехода на DirectX or DirectDraw

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Fedorfx
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 10.10.2002 (Чт) 0:14

Нужен совет относительно перехода на DirectX or DirectDraw

Сообщение Fedorfx » 29.10.2003 (Ср) 12:44

Всем привет.
Есть у меня программа котороя строит графики ( биржевые)
т.е. есть массив значений и по нему строится график.
Массив постоянно изменяется, точнее добавляются новые элементы ( цены).
Все это работает в реал тайм. Массив изменяется до 3 раз в сек.
Как это реализовано сейчас.
1-Определяю какой участок цен должен отобразится на экране.
2- Нахожу Min-Max данного участка.
3- Рисую линию ( для простоты, хотя отобразить цену можно и не только точкой)
4- Доп методы - Шкала слева, снизу .
Все работает но:
1- код ужастно большой
2- Если в массиве > 1000 элементов то возникаю тормоза ( загруз процессора 50-100 проц) хотя код стараюсь оптимизировать.

ВОПРОС - Какие современные технологии помогут мне перевести данную прогу на новый уровень. Ведь там все по старинке - найти точку - расчитать координаты итд. Я в свое время пытался разобраться с DirextX новстал в тупик - Когда рисуешь в 2D все точно - нет искажений а в 3D прямая может стать кривой от изменения камеры. А биржа точность любит.
Хочется перейти на обьекты и чтоб не заниматься их отрисовкой.

Заранее благодарен за совет.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 29.10.2003 (Ср) 14:13

Если в массиве > 1000 элементов то возникаю тормоза ( загруз процессора 50-100 проц) хотя код стараюсь оптимизировать.

И все >1000 элементов видно на экране? Вряд ли. По этой фразе похоже, что тормоза не в выводе графики.
А в DirectX, чтобы не было перспективных искажений, нужно использовать формат вертекса D3DFVF_XYZRHW, как для изометрии.

Fedorfx
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 10.10.2002 (Чт) 0:14

Сообщение Fedorfx » 29.10.2003 (Ср) 17:14

разрешение экрана 1280*1024 ( кстати у меня Matrox Parhelia и 3 монитора 1280*1024 но это частный случай)
Так вот чтобы нарисовать кривую по 1280 точкам

For i =1 to 1280
movetoex
lineto
next i
это просто пример - на самом деле я использую буфер и иногда надо нарисовать не одну линию а несколько.Да и если надо смемстить картинку влево - приходится перерисовывать всю поверхность - короче наступил предел возможности построения графиков по используемой технологии GDI.

Буду очень благодарен за пример построения линии по точкам с применением DirectX без искажений от перспективы.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 30.10.2003 (Чт) 17:04

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

http://www.tuapse-mikle.narod.ru/grapho.zip

Fedorfx
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 10.10.2002 (Чт) 0:14

Сообщение Fedorfx » 31.10.2003 (Пт) 1:25

Благодарю за пример.
Именно то, что и хотелось увидеть.

Осталось пару вопросов для окончательного принятия решения о закупке книг по DirectX и изучения данного направления.
1- я так понимаю что D3DVertexBuffer8SetData vBuf1, 6& * p * SizeOfVertex, 6& * SizeOfVertex, 0, Vertices(0) добавляет обьект в сцену. Могу ли я получить доступ к этим обьекта в дальнейшем??
2- Есть ли возможность получить список обьектов удовлетворяющих некоторым требованиям -- допустим перебрать все обекты и найти все с высотой меньше Х??
3- Можноли получить список обектов видимых на экране а не на всей сцене??
4- Каковы ограничения по кол-ву обьектов( поверхностей) в одной сцене ( в примере невозможно указать lTab больше 5461.)
5- Имеет смысл копать 9Х или остановится на 8Х или может для моих нужд ( отображение графиков ) нужно покапать в другом месте??(OpenGL или что еще?)

P.S. Еще раз спасибо за пример.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 31.10.2003 (Пт) 10:25

1. Для изменения значения сделана уже SetVal1 или SetVal2. У меня оно используется для заполнения, можно применять в любой момент для изменения любого произвольного значения.
2. Образы графиков лучше хранить в массиве. Присваиваю ячейке массива новое значение одновременно вызывать SetVal. Есть варианты и прямого чтения вертексбуффера, но это не рационально - и по скорости, и по тому, что там много "лишних" данных, типа цвета, координат Z и X.
3. Это будут величины типа:
Код: Выделить всё
    xMin=hScr1.value+dxMin
    xMax=hScr1.value+dxMax

Константы dxMin и dxMax найди вручную.
4. Это потому, что график, использующий TriangleList, использует по 6 вертексов на значение, а 5461*6= 32766. Следующая величина уже вызовет переполнение Integer. Но даже избавившись от Integer, увеличишь размер только вдвое. Больше 65535 все равно нельзя на стандартных настройках. А график с TriangleStrip позволяет использовать втрое большие значения.
5. DX9 имеет смысл использовать, если ориентируешь программу на соответствующие видеокарты, что вряд ли, сейчас немногие игры на них ориентированы. А OpenGL я бы посоветовал, будь ты пользавателем Delphi, а в бейсике традиционно используют D3D. Обрати внимание - в теме VB & 3D ни одой подтемы про OpenGL.

...Пожалуйста.

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Re: Нужен совет относительно перехода на DirectX or DirectDr

Сообщение sanches » 17.11.2003 (Пн) 23:23

Fedorfx писал(а):2- Если в массиве > 1000 элементов то возникаю тормоза ( загруз процессора 50-100 проц) хотя код стараюсь оптимизировать.

Совет не по графике, а так. Когда элементов становится так много, нужно сделать "проредь" в массиве, то есть, к примуру убрать каждый пятый или третий. Процедура эта недолгая и вызывать ее относительно редко надо будет.
Изображение


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

    TopList  
cron