Конференция "Игры" » Мелкие объекты в Direct3D [Delphi, Windows]
 
  • @!!ex © (23.12.07 17:47) [20]
    Хотя вопрос про заливку снят... Она нужна, смотрб на чертежи.. используется. и часто.
    А как вы реализуете градиент и штриховку?
  • novarm (23.12.07 17:50) [21]
    Заливка везде применяется, поскольку это не чертеж и все объекты имеют ширину. На картинках показан только схематик, там оно не очень актуально, хотя тоже применяется. А в PCB просто чертеж не катит, там должны быть дорожки, заливка медью и т.п. (если кто знаком с тематикой).
  • novarm (23.12.07 17:51) [22]
    Градиент и штриховка не нужны, поэтому никак.
  • homm © (23.12.07 17:52) [23]
    > [21] novarm   (23.12.07 17:50)
    > просто чертеж не катит, там должны быть дорожки, заливка медью

    Толщина линий = Масштаб*Коэффициент.

    Как тебе мой алгоритм? )
  • @!!ex © (23.12.07 17:54) [24]
    > [23] homm ©   (23.12.07 17:52)

    Так оно выродится также как и полик. :)
    Да к томуже толщину придется для каждого элемента указывать...
  • homm © (23.12.07 17:55) [25]
    > [24] @!!ex ©   (23.12.07 17:54)
    > Так оно выродится также как и полик. :)

    Ок.

    Толщина линий = Масштаб*Коэффициент.
    Если толщина < 1, то толшина = 1.
  • XProger © (23.12.07 17:57) [26]
    В OpenGL достаточно выводить линии при помощи GL_LINES (толщина не меняется в зависимости от проекционной матрицы)... думаю, в DX безусловно есть аналог подобного "примитива"
  • @!!ex © (23.12.07 17:58) [27]
    В приципе если для вас переход к представлению всего через линии(заливку через них тоже можно реализовать, кстати) не вариант, то единственно что я могу предложить - вынести расчет картинки для нового масштаба в отдельный поток, тогда не будет секунды задержки.
  • novarm (23.12.07 18:00) [28]
    При пересчете делается ширина не меньше единицы, но при масштабировании пересчета нет, поэтому поменять ширину я не могу. Теоретически можно анализировать какие треугольники исчезают и чего-то с ними делать при перегонке из массива в видуху, вчера пробовал - не очень получилось (штрих-пунктиры, а вставлять много операций чтобы точно высчитать направление и т.п. не очень хотелось, хотя может и не замедлит сильно), возможно на днях еще раз попробую или дам задание тому кто это собственно писал.
  • @!!ex © (23.12.07 18:00) [29]
    > [25] homm ©   (23.12.07 17:55)

    Медленно. Расчет для миллионов объектов... убицца ап стену...
  • XProger © (23.12.07 18:02) [30]
    Сам уже больше года занимаюсь CAD системой, поэтому рекомендую не жалеть ресурсов и использовать OpenGL. Компьютеры проектировщиков - это считай Hi-end железо обычно.
    Насчёт вылета на забугорных машинах, в региональных настройках системы можно изменять знак запятой в дробях. Поэтому, FloatToStr и StrToFloat могут выдавать разные результаты на разных машинах. Решение - DecimalSeparator := '.' или ','
  • novarm (23.12.07 18:03) [31]
    Новый масштаб не известен до того момента пока он не достигнут. Секундная задержка введена специально (т.е. если масштабирование закончено, то пересчитываем новую картинку).
  • @!!ex © (23.12.07 18:03) [32]
    > [28] novarm   (23.12.07 18:00)

    Кстати, есть вариант...
    Берем картинку, и каждый объект представляем в двух видах...
    как полик, и как линию.
    Рисуешь полик, потом сверху линию единчной толщиной.
    Пока полик невырожден, линия погоды делать не будет.
    Как только полик вырождается, линия берет на себя отображение примитива.
  • novarm (23.12.07 18:07) [33]
    С точками и запятыми все решено давно уже, системе все-равно что будет введено (свои функции). Тем более у нас тоже настройки забугорные и английская винда.
    Вылетает не у всех, а только у некоторых товарищей. Хотя может где-то внутри D3D это действительно имеет место. В общем, пока тестим
  • homm © (23.12.07 18:09) [34]
    > [29] @!!ex ©   (23.12.07 18:00)
    > Медленно

    Что медленно? Я сомневаюсь, что нужнабольшая точность, и по пикселям будут мерить реальные размеры дорожек, так что считать нужно один раз при изменении масштаба. В крайнем случае можно объеденить дорожки в группы, по признаку « большие, меньше, крохотные» и считать по группам.
  • @!!ex © (23.12.07 18:10) [35]
    > [34] homm ©   (23.12.07 18:09)

    ИМХО проще рисовать полик и сверху линию.
    хотя х.з. статистики на сей счет не имею...
  • novarm (23.12.07 18:11) [36]
    Хорошая мысль с линией.
    В общем, если настройками D3D это никак не решить, то прийдется самим либо треугольники корректировать, либо линии дорисовывать.
  • novarm (23.12.07 18:16) [37]
    OpenGL попробуем опционально в будущем (больше для совместимости с не-Windows). В этот же модуль его встроить, думаю, проблем не составит.
  • @!!ex © (23.12.07 18:26) [38]
    > [37] novarm   (23.12.07 18:16)

    Будут проблемы.
    DirectX - COM, а OpenGL - нет.
    Довольно сложно их синхронизировать, особенно если делать это "потом"
  • novarm (24.12.07 14:10) [39]
    У нас все в своих массивах до выхода на DirectX, поэтому просто заменить инициализацию и процедуры вывода должно быть не сложно. Так что по идее синхронизировать их не нужно - будет все раздельно. Основная сложность была в преобразовании всего в треугольники и системе работы с буфером (своим).
 
Конференция "Игры" » Мелкие объекты в Direct3D [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]