10756
|
Компиляторы и платформы / Linux / OGL (XGL?) для Linux
|
: Декабрь 21, 2009, 17:45
|
Добрый день
Неожиданно получил еще один заказ перевести программу на Linux. Задача небольшая но использует OGL. Подскажите как его на Линукс (RedHat) ставить. Конечно гуглю но ничего конкретного пока не нашел.
Спасибо
|
|
|
10757
|
Программирование / С/C++ / Re: Открыть проассоциированный файл - пусто в *argv[]
|
: Декабрь 21, 2009, 17:17
|
Ну так запускающий делает дабл клик по файлу, и командную строку не открывает. Уточняю на всякий случай - запускается на сам бинарный файл, а пакет, его содержащий.
Ясно, запускается bundle/package. Так откуда же возьмутся аргументы командной строки если их никто не давал? Ну и будет argv[0] имя самой программы (не bundle) - и все.
|
|
|
10758
|
Qt / 2D и 3D графика / Re: освещение в OpenGL
|
: Декабрь 21, 2009, 17:12
|
Тааак. я теперь буду разбираться с построением нормалей, полагаю что нужно строить те которые под пунктом 1? а есть какие-нибудь тонкости, на которые мне необходимо сразу же обратить внимание при изучении материала и еще, может в какую-то сторону дополнительно нужно "покопать"?
Не увлекайтесь всякими "умными библиотеками" да как чего подключить и.т.п. - это все фуфло. Выучите 2 вещи: скалярное и векторное произведение. Твердо и капитально. Сделайте свой прикладной класс чтобы работать в векторах а не месить все время x, y, z. Для начала все. Вот пара задачек, если Вы сможете записать решения в 1 строку кода - Вы и нормали построите 1) Треугольник задан 3-мя точками (p0, p1, p2). Найти его площадь 2) Есть точка P (хотя для решения она не нужна). В этой точке есть вектор нормали к поверхности N и есть направление на источник света L (от точки к источнику). Найти отраженный вектор света V (угол падения = углу отражения)
|
|
|
10759
|
Программирование / С/C++ / Re: Открыть проассоциированный файл - пусто в *argv[]
|
: Декабрь 21, 2009, 16:55
|
Здравствуйте. Требуется открыть имеющийся файл написанной программой. В windows и linux вопрос решается получением имени файла из argv[1]. Но в макоси там пусто! Собственно вопрос - где брать имя открываемого файла под МакОсом?
Там же, из argv[1] (2 и.т.п). Если пусто - то это проблемы запускающего который не подал аргументы командной строки
|
|
|
10760
|
Qt / 2D и 3D графика / Re: освещение в OpenGL
|
: Декабрь 21, 2009, 16:00
|
Да, недавно дошло до меня про нормали, но как я понимаю их нужно вычислять, нужно знать формулу ... надо делать. А можно ли обойтись без нормалей и еще хочу уточнить, вот Вы пишите: надо задать нормали к вертексам (напр. с помощью glNormal..), а как можно еще их вычислить?
Хммм... ну вообще-то 3/4 работы по построению модели - это именно вычисление вертексных нормалей (в различных вариантах) и только 1/4 (часто меньше) - сама геометрия На практике используются 3 способа вычисления нормалей: 1) Аналитический. Напр. для сферы нормаль к вертексу = (vertex_position - center).normalize() 2) Градиентный (называется по-разному, но всегда применяется когда нужно пересчитать существующие нормали напр. при деформации исходной модели) 3) Через осреднение всех (или некоторых) нормалей к полигонам в которые данный вертекс входит. Это дает нормали худшего качества чем 1, зато метод универсальный. Не существует какого-то "легкого удобного" способа, ну разве что если это стандартная модель строится ф-цией библиотеки - но на этом далеко не уехать
|
|
|
10761
|
Qt / 2D и 3D графика / Re: освещение в OpenGL
|
: Декабрь 21, 2009, 15:29
|
Если используется GL_SMOOTH, то надо обеспечить/задать нормали к вертексам (напр. с помощью glNormal..). В Вашем тексте я этого не увидел
|
|
|
10762
|
Qt / Пользовательский интерфейс (GUI) / Re: Вставка виджетов в текст QTextEdit
|
: Декабрь 20, 2009, 21:56
|
ну я так понимаю никто не знает))
Хммм... а не много ли Вы хотите? То есть QTextEdit в который можно вставлять картинки, они будут обтекаться текстом в различных вариациях - довольно близко к профессиональной программе верстки, типа PageMaker хоть скажите с чего начинать его писать лучше
"В общем случае" - ни с чего, забыть как неосуществимую мечту. Потому что классов/инструментов таких нет - значит нельзя А "в частном случае" - сделать конкретную разметку конкретной страницы и повставлять текст кусочками, свой контрол для каждого. И вообще, поубавить притязания
|
|
|
10763
|
Qt / Общие вопросы / Re: Параллельные вычисления (проблемы)
|
: Декабрь 20, 2009, 21:43
|
а почему не загрузить весь файл за раз?
Все файлы грузятся полностью и читаются всего 1 раз. Но не для всех распакованное содержимое держится в памяти, для многих оно хранится постранично. Если памяти достаточно - все будет в памяти, нет - будет подкачиваться с диска. Согласен. Я так понял, это все же кластер?
Не имею цели подколоть, но не знаю что такое кластер (здесь), правда Ну например, выходной имедж имеет 1000 строк. Пользователь может задать число полос, напр 4. Значит будут запущены 4 копии. Первая получит задачу сделать первые 250 строк, вторая - вторые 250 и.т.п. Возможно какая-то копия не рассчитает ни одного пикселя - нечего считать, но результат (черный пустой имедж) все равно будет. То есть разбивается "тупо", по числу строк. Но эта задача давно решена и успешно эксплуатируется. А этот алгоритм, правильно спроектирован? Может корень проблемы в нем? Возможно вы боретесь с последствиями неправильной разработки алгоритма?
Да кто ж его знает где этот корень? Очень может быть я выбрал не лучший путь но в данном случае любой имеет трудности. niXman, мы весьма отвлеклись от темы, давайте переключаться в личку, с удовольствием отвечу на любые Ваши вопросы.
|
|
|
10764
|
Qt / Общие вопросы / Re: Параллельные вычисления (проблемы)
|
: Декабрь 20, 2009, 20:30
|
1. Данные общие? 2. Во время работы одной нитки, другая может изменить общие данные? 3. Если все же синхронизация ниток с общими данными не нужна, может каждой нитке передать копию данных? Ну и что, что памяти съест больше. Ныньче 2-4 гига на процесс не трагедия)
Подавляющее большинство исходных данных общие и "только чтение" (хотя они и требуют блокировок для подгрузки с диска). Проблема в том что нет четкой "мишени" - в начале расчетов неизвестно какие пиксели и как считать, это выясняется по ходу дела. Сетевой вариант задачи живет долго и вполне счастливо, он разбивает результат(изображение) на N полос (или кадров) и запускает свою копию для каждой части. При этом однако дублируются все исходные данные. Склеивание полос, передача исходных данных по сети и результатов обратно - все это в сумме не так уж дешево. Часть данных строится динамически и это будет тоже повторено N раз. Уязвимое место - относительно короткие расчеты (особенно превью), тогда запуск сетевой бандуры не окупает себя. В общем пришли к банальной истине: задача должна иметь как сетевой вариант, так и поддержку multi-threading
|
|
|
10766
|
Qt / Общие вопросы / Re: Параллельные вычисления (проблемы)
|
: Декабрь 20, 2009, 15:29
|
что такое OMP ?
OpenMP смею заметить, то, что если время тратиться на синхронизацию, то это говорить лишь об одном - слишком часто происходит блокировка/деблокировка. в этом случае, не стоит расчитывать на чудеса, а спроектировать иной алгоритм. В данном конкретном случае под "синхронизацией" понимается "старт и финиш" задачи для которой привлекаются все нитки. Это расчет одного пикселя который может состоять из N (100, 200, 400 в тестах) подрасчетов (распределяемых между нитками). Каждый подрасчет может быть более или менее трудоемким (зависит от многих исходных данных). Проблемы возникают из-за того что время расчета пикселя достаточно мало (меньше миллисекунды). в параллельном/распределенном программировании не новичек, но у меня никогда не было похожей проблемы. возможно ваш алгоритм именно таким образом и должен работать, возможно его и не перепроектируешь, и еще много раз возможно...
Понятно что заманчиво давать ниткам расчеты целых пикселей (а не "подрасчеты"). Но при этом мне надо гораздо больше распараллелить, появляется очень много массивов (где была 1 переменная), появляются конструкции указателей *** (понимаемые самим автором с трудом). Также резко нарастает число блокировок и их вес. Не берусь предсказать будет ли "более высокоуровневый подход" более эффективным, но что усилий и времени он съест много - это точно. И Вы не волнуйтесь, мне там еще с параллелизацией пахать и пахать. Вот например "запекание фотонной карты" - дивный алгоритм который я не знаю как положить на нитки. Мы с Вами обязательно это обсудим
|
|
|
10768
|
Qt / Установка, сборка, отладка, тестирование / Re: Установка Qt на Mac Snow Leopard
|
: Декабрь 20, 2009, 14:53
|
(вещь красивая но бесполезная) а почему бесполезная? или в мас-е он какой-то особенный? Особенный или нет - не знаю, потому что сравнить не могу (Qt стоит только на Mac). А бесполезный - моя личная точка зрения, не хочу чтобы кто-то мне чего-то наколбасил а я потом разбирайся, лучше я сам все сделаю как мне удобно. А если нужны формы - для этого есть designer (с дальнейшей загрузкой из ресурсов). И еще просьба: давайте не будем забивать тему, для обсуждения creator'а можно создать новую (если есть желание).
|
|
|
10769
|
Qt / Общие вопросы / Re: Параллельные вычисления (проблемы)
|
: Декабрь 20, 2009, 14:07
|
Проверил с компилятором Intel Результаты для 4 ниток, 2 процессора Intel Xeon по 2 ядра 1_100 1_200 1_400 2_100 2_200 2_400 --------------------------------------------------------- No threads 16 32 63 62 118 230 Custom impl. 19 28 46 50 79 135 GCC + OMP 18 28 48 57 87 149 Intel + OMP 10 18 35 32 57 108
В таблице время в секундах, колонка соответствует 1 тесту, напр. 2_200 значит: тест 2, выполняется 200 вычислений на точку. Сами тесты (1 и 2) отличаются трудоемкостью единичного вычисления. Придется использовать Intel хотя забот с ним более чем достаточно и компилирует он совсем не быстро. Досадно что GCC проигрывает с таким разгромным счетом, но надо заметить что это OSX, т.е. POSIX. Судя по исходникам GCC 4.4, для POSIX используется простая реализация семафора (mutex + pthread_cond_wait). Для Linux используется гораздо более изощренная техника фьютексов (futex) так что там результат может быть совсем иным.
|
|
|
10770
|
Qt / Установка, сборка, отладка, тестирование / Re: Установка Qt на Mac Snow Leopard
|
: Декабрь 20, 2009, 13:50
|
Я пока на 10.5 (леопард без снега ), так что извините если посоветую невпопад 1) Не спешите все сразу вставить. Зачистите все и поставьте SDK, просто инсталлером ничего не прописывая. После этого у Вас должны ходить все examples и Вы сможете создавать Xcode проекты с помощью qmake -spec macx-xcode example1.pro 2) Ставьте Creator (вещь красивая но бесполезная), он тоже должен пойти 3) Распакуйте исходники куда-нибудь - просто чтобы подсмотреть там что-то. Как собирать "статически" - не знаю и терять время не хочу, все равно скоро надо переходить на 10.6 а в недалеком будущем на Cocoa
|
|
|
|
|