![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: нет Всего: 4 |
Всем доброго времени суток. Столкнулся с необходимостью вывода огромного числа точек на экран(порядка 10^7). Выводить это множество надо именно как точки(если кому интересно - математическая проблема, вывод образа динамической системы). Я использую обычный лобовой пересчет и вывод примерно таким циклом
Но тут возникает проблема времени, тебуемого для построения всего это множества, у меня строиться порядка 40-50 секунд(и примерно столько же при повороте). И вот собственно вопрос - можно ли как то это время ускорить? Может стоит сначала создавать растр и потом выводить его как картинку? Или стоит поменять способ пересчета? Я opengl знаю не сильно, так что пожалуйста поподробнее ![]() Заранее благодарен |
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
функция glDrawArrays,glDrawElements
Это сообщение отредактировал(а) Graf_h - 18.4.2008, 17:36 -------------------- Иногда переменная - это просто переменная |
|||
|
||||
Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: нет Всего: 4 |
Graf_h, спасибо. А эти функции сильно ускоряют вывод?
|
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
Не знаю на сколько быстро, не тестировал! но могу сказать на порядок быстрее, чем в цыкле! можете протестировать! -------------------- Иногда переменная - это просто переменная |
|||
|
||||
Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: нет Всего: 4 |
Ну ок, спасибо. Буду тестировать
|
|||
|
||||
FIaR |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.11.2006 Репутация: 2 Всего: 2 |
На много быстрее. ФАКТ!
--------------------
Шуруп забитый молотком, держится лучше, чем гвоздь закрученый отверткой. |
|||
|
||||
Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: нет Всего: 4 |
Спасибо всем, кто откликнулся! Но в процессе тестирования возникла вот такая вот проблема:
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 моя проблема не может быть решена и лучше использовать какую нить другую технологию? Заранее благодарен |
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
Скажу точно, что проблема не в ОпенЖЛ и не VC6! Может покажете код, а то кто его знает что вы написали там ![]() Это сообщение отредактировал(а) Graf_h - 21.4.2008, 09:32 -------------------- Иногда переменная - это просто переменная |
|||
|
||||
Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: нет Всего: 4 |
Graf_h, весь код наверное выкладывать не стоит - длинный он, а вот ключевые моменты:
Все переменные объявлены выше. Это сообщение отредактировал(а) Vladus - 21.4.2008, 14:23 |
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
такой масив. да еще и статический
![]() ![]() -------------------- Иногда переменная - это просто переменная |
|||
|
||||
Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: нет Всего: 4 |
Graf_h, спасибо, буду пробовать
|
|||
|
||||
FIaR |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.11.2006 Репутация: 2 Всего: 2 |
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 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
Vladus, а почему не разбить масив например на 10 масивов вывода?
зачем нести большой груз если его можно разбить на кусочки... ![]() Это сообщение отредактировал(а) Graf_h - 22.4.2008, 17:57 -------------------- Иногда переменная - это просто переменная |
|||
|
||||
Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: нет Всего: 4 |
Graf_h, я об этом думал. Просто не знаю, точно как потом надо делать вывод. Последовательно выводить все массивы? Не могли бы вы мне показать на примере?
![]() ![]() |
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: нет Всего: 21 |
Запусти несколько потоков, и каждый поток пусть работает и выводит только свою часть точек.
Может быть так будет быстрее? -------------------- Мне нужны помощники. |
|||
|
||||
Graf_h |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
Примерно так:
а далее рисуеш каждые елемент масива dat! А он у тебя масив!
Это сообщение отредактировал(а) Graf_h - 23.4.2008, 09:27 -------------------- Иногда переменная - это просто переменная |
||||||
|
|||||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
зачем так много точек, они будут сливаться и их не будет видно...
|
|||
|
||||
evilguard |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 19.11.2006 Репутация: нет Всего: нет |
У меня была похожая проблема - массив в куче надо размещать через new.
|
|||
|
||||
Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: нет Всего: 4 |
Спасибо всем откликнувшимся, буду пробовать
![]() |
|||
|
||||
Sharkfire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: нет Всего: 2 |
ну и как успехи?
|
|||
|
||||
StLynx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 4.8.2007 Где: Владимир Репутация: нет Всего: нет |
С каких это пор double стал 4 байта? Число двойной точности - 64 бита, т.е. 8 байт. => dat[100000000][3] - 2 с лишнем гига в стеке ![]() |
|||
|
||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
не лучше ли рассчитать шаг исходя из размеров Viewport? бОльшая часть точек останется за бортом.
кажется можно написать чуть более оптимально ![]() |
||||
|
|||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |