| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Вывод огромного числа точек |
| Автор: Vladus 18.4.2008, 16:41 | ||
Всем доброго времени суток. Столкнулся с необходимостью вывода огромного числа точек на экран(порядка 10^7). Выводить это множество надо именно как точки(если кому интересно - математическая проблема, вывод образа динамической системы). Я использую обычный лобовой пересчет и вывод примерно таким циклом
Но тут возникает проблема времени, тебуемого для построения всего это множества, у меня строиться порядка 40-50 секунд(и примерно столько же при повороте). И вот собственно вопрос - можно ли как то это время ускорить? Может стоит сначала создавать растр и потом выводить его как картинку? Или стоит поменять способ пересчета? Я opengl знаю не сильно, так что пожалуйста поподробнее Заранее благодарен |
| Автор: Graf_h 18.4.2008, 17:33 |
| функция glDrawArrays,glDrawElements |
| Автор: Vladus 18.4.2008, 17:41 |
| Graf_h, спасибо. А эти функции сильно ускоряют вывод? |
| Автор: Graf_h 18.4.2008, 17:49 |
Не знаю на сколько быстро, не тестировал! но могу сказать на порядок быстрее, чем в цыкле! можете протестировать! |
| Автор: Vladus 18.4.2008, 18:51 |
| Ну ок, спасибо. Буду тестировать |
| Автор: FIaR 19.4.2008, 02:47 |
| На много быстрее. ФАКТ! |
| Автор: Vladus 19.4.2008, 12:40 |
| Спасибо всем, кто откликнулся! Но в процессе тестирования возникла вот такая вот проблема: Could not execute: Bad executable format(Win32 error 193) ну и такой варнинг Debug/kvadr2.exe : warning LNK4084: total image size -492695552 exceeds max (268435456); image may not run Я так понимаю, что нехватает памяти. Никто не подскажет, как решить такую проблему? Использую VC6(openGL создаю в "winApi окне"). Не лучше ли использовать VC 2005? А может в openGl моя проблема не может быть решена и лучше использовать какую нить другую технологию? Заранее благодарен |
| Автор: Vladus 21.4.2008, 14:21 | ||
Graf_h, весь код наверное выкладывать не стоит - длинный он, а вот ключевые моменты:
Все переменные объявлены выше. |
| Автор: Graf_h 21.4.2008, 16:12 |
| такой масив. да еще и статический |
| Автор: Vladus 21.4.2008, 18:50 |
| Graf_h, спасибо, буду пробовать |
| Автор: FIaR 22.4.2008, 15:09 |
| double dat[100000000][3]; double - 4 байта 4 * 100000000 = 400000000 байт 400000000 * 3 = 1200000000 байт 1200000000 / 1024 / 1024 = 1144, 4091796875 (Мбайт) Многовато будет, ничего из этого хорошего не выйдет. У меня gcc компилятор, и при компиляции выдаёт ошибку: error: size of variable 'dat' is too large |
| Автор: Graf_h 22.4.2008, 17:56 |
| Vladus, а почему не разбить масив например на 10 масивов вывода? зачем нести большой груз если его можно разбить на кусочки... |
| Автор: Vladus 22.4.2008, 19:26 |
| Graf_h, я об этом думал. Просто не знаю, точно как потом надо делать вывод. Последовательно выводить все массивы? Не могли бы вы мне показать на примере? |
| Автор: Mazzi 23.4.2008, 09:02 |
| Запусти несколько потоков, и каждый поток пусть работает и выводит только свою часть точек. Может быть так будет быстрее? |
| Автор: Graf_h 23.4.2008, 09:21 | ||||||
Примерно так:
а далее рисуеш каждые елемент масива dat! А он у тебя масив!
|
| Автор: Lazin 23.4.2008, 09:28 |
| зачем так много точек, они будут сливаться и их не будет видно... |
| Автор: evilguard 24.4.2008, 17:22 |
| У меня была похожая проблема - массив в куче надо размещать через new. |
| Автор: Vladus 24.4.2008, 22:06 |
| Спасибо всем откликнувшимся, буду пробовать |
| Автор: Sharkfire 14.5.2009, 22:49 |
| ну и как успехи? |
| Автор: StLynx 24.6.2009, 17:18 | ||
С каких это пор double стал 4 байта? Число двойной точности - 64 бита, т.е. 8 байт. => dat[100000000][3] - 2 с лишнем гига в стеке |
| Автор: baldina 24.6.2009, 18:14 | ||||
не лучше ли рассчитать шаг исходя из размеров Viewport? бОльшая часть точек останется за бортом.
кажется можно написать чуть более оптимально |