Russian Qt Forum
Апрель 28, 2024, 20:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 3 [4] 5 6 ... 761
46  Qt / Вопросы новичков / Re: Создание динамической таблицы : Ноябрь 06, 2021, 07:48
Я бы не стал изыскивать какие-то инструменты, а просто нашел бы нужный сигнал (типа "ячейка изменилась") и реализовал слот для просчета сумм и др. Дешевле/быстрее выйдет.
47  Программирование / Алгоритмы / Re: Адаптивный Монте-Карло для размерности D > 1 : Ноябрь 05, 2021, 15:30
Пуляем рандомно туеву хучу фотонов от источника света.
Это давно реализовано, но увы, устарело  (техника середины 90-x) и сдано в архив

Ну почему же.. У меня есть гипер куб- это область интегрирования.. Например для 1D - [x1, x2], для 2D - [x1, x2], [y1, y2]  и т.д..
А она "непрерывна"? Т.е. можно ли спокойно брать/заниматься любой точкой внутри куба? Заметим что напр в моей задаче это не так (точка должна существовать в сцене)

Точки рандомно генерируются под капотом Монте-Карло внутри этого гипер кубика.
Тут однозначно нужен псевдо (или квази) рандом. Предполагаем что есть "латиска" (3D сетка с достаточно малым шагом, хранить ее не надо).- Проходим 3 циклами по точкам латиски. Смотрим находится ли данная точка внутри радиусов уже имеющихся. Только если нет - добавляем эту точку в octree.

Проблема в том, что в каких то областях этого гипер кубика пулять бессмыслено, поскольку там всё с функцией гладко..
Инструмент - радиус захвата. Если есть доп инфа - она учитывается в радиусе. Т.е. он больше для "спокойных" областей и наоборот.

Это первый проход. Потом начинается "стягивание", напр разница между соседями значительна - уменьшаем их радиусы. В рез-те образуются новые "непокрытые" точки, считаем их, и.т.д

Ну это не очень решение.. Вот предположим, Вы пуляете N фотонов в заданном маленьком телесном угле.. Вам прилетает в ответ N значений (пускай для простоты скаляров) f1, f2,... fN. Вот Вы их знаете: какой математический критерий Вы изберёте, чтоб прекратить далее пулять в этом телесном угле, или продолжить? Разница в "цвете"? Серьёзно?
Да, серьезно. Напр
Цитировать
fabs(f1 - f2) > threshold
И "случайно" никто не пуляет, конечно нужно организовать адаптивную сетку и.т.п.

Ах, ну где же Вы "болезненное" увидели? Улыбающийся Да, и "справедливую" лучше в кавычки)
Не нравится - могу и помолчать  Улыбающийся
48  Программирование / Алгоритмы / Re: Адаптивный Монте-Карло для размерности D > 1 : Ноябрь 05, 2021, 14:02
Ну слушайте: когда Вы говорите слово "адаптивно", это подразумевает некую коррекцию на следующем шаге. Где у Вас намёк на то, что по известной информации от предыдущих результатах Вы корректируете параметры для следующего "пуляния"?
Грубо говоря "разница в цвете", о чем вверху сказано дважды. Если соседи (вычисленные значения) отличаются более чем на заданную величину - считать еще. Это можно делать как на уровне точек, так и на уровне лучей одной точки.

Что у Вас плохо - не определены "точки". Вот человек создал сцену - прицепил стандартные чайник и пол (плоскость). Отрендерил картинку. Теперь он хочет чтобы чайник отсвечивал на пол и наоборот. Для всех точек на картинке. Ну или "в общем" - вот комната, в ней светит лампочка или свет проникает сквозь окно. Но не все места освещены напрямую. Однако и в этих местах все хорошо видно, "темноты" нигде нет. На заре компутерной графики это решалось абы-как (доливался амбиент, ставились лампочки подсветки и.т.п.). Но сейчас др времена - вынь да положь "физически корректный" расчет (пусть и далеко не быстрый).

В своем изложении Вы опускаете такую "стартовую позицию", и все сразу "повисает в воздухе". Откуда берутся Ваши 3D точки (на худой конец 2D)? Они "все заранее известны" или есть объем в котором они заключены или как? Какой-то начальный просчет с (псевдо) равномерным шагом видимо неизбежен, можно начать и с этой позиции.

Ну как и в большинстве Ваших)
Ах как болезненно критикующий реагирует на (справедливую) критику  Улыбающийся
49  Программирование / Алгоритмы / Re: Адаптивный Монте-Карло для размерности D > 1 : Ноябрь 05, 2021, 12:12
Много занимался (и занимаюсь) расчетами пере-отражений света. Поскольку никакой конкретной постановки в стартовом посте нет, постараюсь кратко изложить свою

Вот есть 3D точка (x, y, z) и надо посчитать как она освещена окружающей сценой (вторичное освещение). Из точки выбрасывается заданное кол-во лучей, в точках их пересечения со сценой считается цвет, рез-т осредняется. Чистый монте-карлик. По сути это все. Но за этой "простой" постановкой масса сложнейших задач, о каждой написаны тысячи статей, но лишь немногие имеют проверенные решения. Обозначу некоторые, а Вы выберете что желаете обсуждать, иначе тема слишком обширна

1) Какие точки выбирать для расчета? Может все имеющиеся (в моем случае все видимые напрямую в сцене), но может и нет. Обычно/часто есть "моря", т.е. большие но неинтересные области где ровным счетом ничего не происходит, и было бы замечательно просчитать 5% точек и интерполировать остальные

2) Считать адаптивно. Минимальное число лучей 200. Давайте выбросим сначала напр 13 и посмотрим: если все они принесли один и тот же цвет - ну значит принимаем его и остальные не считаем (это соответствует областям 100% и 0% света). Так-то оно так, но всегда есть риск "пропустить". Один профессор (умер, хороший был мужик) высказал интересную мысль типа: если одна точка "пропустила", то соседние не пропустят. К сожалению, ни одной практической реализации этой задумки мне найти не удалось

Адаптивность можно понимать/трактовать и по-другому. Напр для соседних лучей разница в цвете оказалась достаточно велика - ну значит пытаемся "уточнить" это место добрасывая туда еще лучей. То же самое на уровне точек (пункт 1)

3) И самое страшное: эта хрень рекурсивна. Это я так сказал "считаем цвет в точках пересечения", на деле расчет цвета требует той же освещенности. Ну это так, для общего развития, такие задачи могут повредить std::голову

Что из этого (или что-то еще) Вы хотите обсуждать ?
50  Qt / Пользовательский интерфейс (GUI) / Re: Видео по сети : Октябрь 27, 2021, 08:44
Заинтересовало.... А почему на уровне cli? Вроде есть родные мануалы с примерами на си. Более того, нашел даже QtGStreamer с тёплоламповым qml-ем
Может и в базовых примерах есть, мне он был нужен для другого. Но ихнюю "концептуальную" доку лучше отложить на потом (бьет по ушам). В любом случае нужно "смонтировать" pipeline, грубо говоря цепочку кодеков, и это удобно из командной строки. Напр назначил (пока) стандартный вывод видео - и заниматься источником
51  Qt / Пользовательский интерфейс (GUI) / Re: Видео по сети : Октябрь 26, 2021, 13:38
Возможно стоит покопаться в GStreamer (на уровне командной строки). Удовольствие ниже среднего, но шансы есть. Если получится из командной строки - остальное уже "дело техники". Привлекает что можно назначить "источник" в виде URL (там как-то чуть иначе называется, уже забыл), а он разберется с драйверами и.т.п.
52  Qt / Пользовательский интерфейс (GUI) / Re: PyQt5 обработка событий (Events), событие и его источник : Октябрь 25, 2021, 13:39
лисп хихикает в сторонке
[off]Классный язык, в свое время года полтора писал на AutoLISP. Вначале долго "лупал глазками", напр "..присваивает выражение не вычисляя его" - это как Непонимающий Но потом в кайф [/off]
53  Qt / Пользовательский интерфейс (GUI) / Re: Подключение библиотеки на QT5 с виджетом на QML к программе на QT4 : Октябрь 25, 2021, 11:32
Перенос проекта на 100 тыс. строк с QT3 на QT4 занимает около года, не думаю что переход от QT4 к QT5 стал легче. Потом ещё долго вылавливать ошибки, добавленные в процессе переноса.
Сколько чего займет - то Вам виднее, но по-любому здесь надо проявить принципиальность. Проект жив? Если да, то надо его апдейтить. Если нет - не дергаться с новыми фичами. А так больше времени уйдет на связки/затычки. И даже в случае их успеха вывод будет типа "нужно делать нормально,, по-человечески"
54  Qt / Пользовательский интерфейс (GUI) / Re: Подключение библиотеки на QT5 с виджетом на QML к программе на QT4 : Октябрь 15, 2021, 07:56
Есть большая программа на QT4,
Решение: портировать это приложение на Qt5. Конечно найдется 100 причин "почему не хочется", но попытки что-то пристегнуть к старой обречены, разница только когда придет понимание этого (может с этим постом чуть быстрее  Улыбающийся)

55  Qt / Мультимедиа / Re: сохранение прозрачности у QImage : Октябрь 14, 2021, 13:35
а почему?
Ну придется рисовать "с оглядкой на него", и полученная альфа 1 бит (bool). Оно может "сегодня больше и не надо", но будет и завтра
56  Qt / Мультимедиа / Re: сохранение прозрачности у QImage : Октябрь 14, 2021, 12:08
Кажется я понял свою ошибку: у меня палитра и так уже содержит 256 цветов, а я свой прозрачный цвет влепил туда 257-м Улыбающийся
Indexed8 - это "байт на точку", альфу негде хранить. Назначить один из 256 прозрачным можно, но это коряво

Получается, мне надо или вектор argb (и руками конвертировать индексы) или задавать пиксели сразу на QImage.
Indexed8  - вроде бы заманчиво (в 4 раза меньше данных), но не оправдывает себя, проще и лучше юзать ARGB_32 (и выше если нужно). Тогда можно спокойно зачистить с Qt::transparent и рисовать с альфой (uint на точку). Заметим что создание альфа-маски "из черных пикселей" не обеспечивает тот же рез-т всегда
57  Qt / Мультимедиа / Re: сохранение прозрачности у QImage : Октябрь 13, 2021, 17:14
так а что надо сделать, чтоб альфа появилась в конечном изображении?
Она там есть, наверно Вы хотите "альфа-маску", надо ее откуда-то взять/создать, здесь не видно др источника/данных кроме черных пыкселей. Значит в ARGB32 и по буферу
Код
C++ (Qt)
if (p == 0xff000000)  // или 0x000000ff, могу путать
 p = 0;

Ну или "готовые проверенные" типа createAlphaMask и др
58  Qt / Мультимедиа / Re: сохранение прозрачности у QImage : Октябрь 13, 2021, 16:09
При сохранении картинки в формате png прозрачный цвет становится черным,
Ваш аттач имеет альфа-канал, он "весь белый". Format_Indexed8 - по-моему у него альфы и нет, при сохранении ARGB32 будет что в аттаче
59  Qt / OpenGL / Re: gluLookAt : Октябрь 13, 2021, 14:03
А что не так с описанием функции?
Вроде "все так", и это место одно из самых понятных и безобидных. Но тут "бросили кость" - слово "viewing", ну и соответственно перевод "матрица вида" (повбивав би). В рез-те стойкая ассоциация "lookAt - это матрица вида". Многочисленные пережевывания посвящены "глазу", "цели" и где это "вверх".

Однако это всего лишь "частный случай", сама по себе lookAt просто создает матрицу новой СК из подручных средств (аргументов). Умножение на эту матрицу переводит точку из исходной СК (в которой были заданы eye и др) в созданную. В данном конкретном случае (OpenGL render) "из мира в камеру", но это может быть связано с др смыслом.

Да, вопрос чисто академический, где научные работники? Гуляют с собачкой или boost/std пьянствуют  Плачущий
60  Qt / Вопросы новичков / Re: Проблема с функцией класса MainWindow, вызванной из другого : Октябрь 10, 2021, 08:12
Наверное, для этого в C++ есть какие-то корректные механизмы?
Плюсы ничего не навязывают, можно просто использовать глобальную переменную
Код:
// mainwindow.cpp
MainWindow * theMainWin = nullptr;
и установить этот указатель при создании MainWindow
Тогда из др окна
Код:
// win1.cpp
extern MainWindow * theMainWin;
...
if (theMainWin)
 theMainWin->DoSomething();
Если же делать "в духе плюсов/OOП", то так
Код
C++ (Qt)
// MainWindow.h
class MainWindow {
..
public
 static MainWindow * Instance( void ) { return m_instance; }
private:
static MainWindow * m_instance;
};
И обеспечить корректность m_instance в конструкторе/деструкторе
Код
C++ (Qt)
// MainWindow.cpp
MainWindow * MainWindow::m_instance = nullptr;
 
MainWindow::MainWindow(.. )
{
 Q_ASSERT(m_instance == nullptr);
 m_instance = this;
 ...
}
 
MainWindow::~MainWindow( void )
{
 Q_ASSERT(m_instance == this);
 m_instance = nullptr;
 ...
}
Тогда использование
Код
C++ (Qt)
// win1.cpp
#include "MainWindow.h"
...
auto * inst = MainWindow::Instance();
if (inst)
inst->DoSomething();
 

Да, увидел Ваш последний пост, но не стал ничего менять, так даже лучше  Улыбающийся
Страниц: 1 2 3 [4] 5 6 ... 761

Страница сгенерирована за 0.134 секунд. Запросов: 23.