Программа-просмотрщик объектов: требуется помощь программистов!

Автор Zontik, 21 июля 2017 10:16:53

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Призрак Boris'а3000

Цитата: Chuzhoi от 27 июля 2017 01:27:17
А вот безделушка:
http://chuzhoi.city/files/railroad.zip
Пришлось поломать голову, как освободить мышку из плена. Судя по ридми на инглише, не совсем безделушка. Как понимаю, она софтовая, раз адски грузит процессор? Вопрос -- что мешает написать софтовый просмотрщик?
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

HellRaiser

#61
Цитата: Boris3000 от 27 июля 2017 02:45:34
Как понимаю, она софтовая, раз адски грузит процессор?
D3d.

Цитата: Boris3000 от 27 июля 2017 02:45:34
Вопрос -- что мешает написать софтовый просмотрщик?
Да вобщем, ничего, кроме того, что это уже будет изобретением не велосипеда, а двигателя внутреннего сгорания. Момент №2: это будет выглядеть убого, работать медленно, как бы там не усрались оптимизировать. У меня ещё для ДОСа валялись программки-курсовички: рисовалки транзисторов по заданной 3д-модели (которую забить надо было жёстко в коде, ну да ладно). В общем, в подробности окунаться не будем, но довольно приятная bgi-графика не вытягивала подобных "красот". Сейчас всё наверное попроще, но всё равно - лучше чем первая халфа в софтварном режиме, эта штука выглядеть не будет. А работы по сути - написать свой драйвер (свою графическую библиотеку - чуть упрощённый аналог D3d/OpenGL), что есть совсем не тривиальная задача.

[off]
ЗЫ: Чужой, мне очень понра. Пробежался косым взглядом по коду - смотреть приятно. А учитывая, что это твой первый опыт, то вообще крутотень! Я бы точно в 2006-м так сделать не смог =))
[/off]

Zontik

ЦитироватьСейчас всё наверное попроще, но всё равно - лучше чем первая халфа в софтварном режиме, эта штука выглядеть не будет.
Я понимаю, конечно, что делать примитивные и некрасивые вещи скучно и неинтересно. Но нам ведь и не нужны красота и разрешение как для проектора в Имаксе. Пускай выглядит хоть как второй Вор в 640х480 и с дизерингом, да хоть в ч/б, это не помешает опознать модель. Назначение сугубо утилитарное, а не для того, чтобы потом лет через десять кто-то открыл исходники и ахнул.
Хотя да... снова понимаю. Свой интерес, как ни крути, обязан присутствовать.
Дайте глазам отдохнуть! Тёмное место

HellRaiser

#63
Да не, дело как раз не в этом. Просто с готовой библиотекой оно как раз будет в разы проще. Только надо разобраться, как с библиотекой работать, какие готовые функции она предоставляет. А если самому всё это писать и попиксельно выводить на экран, то выйдет дрянь, реализованная десятками (если не сотнями) тысяч строк совершенно бесполезного и никому ненужного кода. Поэтому, нефиг выделываться, а то так и до рендера собственного производства доползём, а это ни много ни мало - половина движка компутерной игры.

Кстати, только чейчас дошло:
Цитата: Boris3000 от 27 июля 2017 02:45:34
Судя по ридми на инглише, не совсем безделушка.
Борь, не обращай внимания - ничего особенного. Это всего лишь стандартное ридми, которое студия генерит вместе с заготовкой проекта.

UPD:
А вот с гуём мы выделываться (пока) не будем - никаких там рибборнов, wpf и прочих красивых (а-ля блендер/фотошоп) контролов. Всё стандартненькое, минималистичное, шиндовс95-стайл :)

Chuzhoi

Цитата: HellRaiser от 27 июля 2017 09:40:47
[off]
ЗЫ: Чужой, мне очень понра. Пробежался косым взглядом по коду - смотреть приятно. А учитывая, что это твой первый опыт, то вообще крутотень! Я бы точно в 2006-м так сделать не смог =))
[/off]
[off]Спасибо. Я вот тоже посмотрел код - эх, думаю, как я основательно подошел...[/off]

Maxim

HellRaiser Спасибо за интерес и начинания!  :up:

А вот скриншот T2OComplete.



Просто просмотрщик. Да, дизайна там никакого нет. А он и нафиг не нужен. Нам же рабочий инструмент надо, а не кнопочки разглядывать.
Still they talk anyway
When there's nothing to say
There's so much said in empty words...

HellRaiser

Maxim, да, минимализм это очень хорошо. Ничего лишнего.
А вот что у меня есть. Но это готовая софта, так что вы внимания не обращайте пока.

Zontik

У минимализма есть один плюс, на который никто не обращает внимания, пока его не лишится. Это скоростной старт. Программу не нужно весь день держать открытой в страхе перед повторным ее запуском (как поступаю я с Фотошопом на работе).
Я хорошо понимаю тех, кому хочется украсить свое творение хоть каким-нибудь бантиком. Да пускай, лишь бы чувство меры не изменяло. Слава богу, у нас здесь маркетологи пока не завелись.
[off]Вот что стоило Дуболомущиту добавить к картинке номер в иерархии, а? Все эти номера жестко забиты в Dark.gam, они точно так же статичны, как и картинки, а процедура поиска упростилась бы в разы.[/off]
Дайте глазам отдохнуть! Тёмное место

HellRaiser

#68
Zontik, сейчас я тебя немного огорчу. Инициализация окна(окон) обычного виндового интерфейса и какого-нибудь wpf будут не сильно различаться по времени. Всё это время тратится на инициализацию самой программы. и дополнительных плюшек, свойственных конкретной реализации компилятора. Т.е, какая-нибудь сишарпная прога сначала запустит виртуальную среду (если не) и подкомпилируется под конкретную машину (один раз при первом запуске), подсосёт всякие сборщики мусора и прочую фигню. Делфийская прога ещё на всякий случай подгрузит свой BDE, даже в том случае, если программа с БД вообще не работает. Сишная программа тоже далеко не с main()-а начинается, но тут тоже всё зависит от типа бинарника, флагов компиляции и собственно компилятора, и даже его версии.  Ах, да, ещё и сама винда должна немного потрудиться: при запуске (помимо стандартных системных процедур запуска ) надобно проверить все зависимости, найти все длл-ки, на которые ссылается программа (в 3-х местах!), подгрузить их, если надо... 

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

Zontik

Цитироватьнарендерить превьюшек
Не знаю, как Максим к этому отнесется, а мне такие бантики не нужны. Информативность у них околонулевая, а тормозить будет прилично. И работы программисту больше.
Лучше все ресурсы пустить на прорисовку выбранной модели, чем на кучу превьюшечек, для опознания которых понадобятся лупа и уйма воображения.
Одно дело превьюшечка для текстуры, там хоть что-то увидеть можно (а некоторые так и вообще в полный рост). В случае с 3D моделью, да еще в неудачном ракурсе, мы будем иметь картинку ради картинки.
Дайте глазам отдохнуть! Тёмное место

Призрак Boris'а3000

[off]
Цитата: HellRaiser от 27 июля 2017 09:40:47
D3d
А почему она тогда так грузит процессор и не желает синхронизироваться с частотой обновления монитора?[/off]
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

Chuzhoi

[off]
Цитата: Boris3000 от 27 июля 2017 23:55:14
А почему она тогда так грузит процессор и не желает синхронизироваться с частотой обновления монитора?
Не знаю. У меня она грузит процессор на 8-10%, а FPS равен 60, т. е. частоте монитора. У тебя не так?[/off]

HellRaiser

[off]
Цитата: Boris3000 от 27 июля 2017 23:55:14
А почему она тогда так грузит процессор и не желает синхронизироваться с частотой обновления монитора?
Ну наверное, потому что Чужой правильно выразился - безделушка. Видно же, что человек просто упражнялся, хоть и к коду подошёл в другом смысле серьёзно. D3d - это всего лишь набор функций, а не всемогущий горошочек с кашей :biggrin: Протокол TCP существует уже тыщу лет, в куче разных реализаций, но чтобы сделать годную программу, которая тупо гоняет пакеты - необходимо попотеть. Библиотека или даёт возможность не изобретать велосипед, или открывает некий фунционал (обычно это всякие SDK). Но она не делает вообще всё за тебя (хотя более свежие версии пытаются инкапсулировать всё больше плюшек, чтобы в конечном итоге программизм как род занятий мог быть доступен даже дегенератам). Я в код пока особо не вглядывался и с самой directX SDK тоже никогда не работал, но предположу, что там есть некоторые нюансы, есть что пооптимизировать (или погонять именно на такой машине как у тебя), но это же всё  - дополнительный кодинг, лишние условия, которые могут вообще выполниться или не выполниться только на конкретной машине. Так что не придирайся :)
[/off]

Цитата: Chuzhoi от 28 июля 2017 02:50:37
Не знаю. У меня она грузит процессор на 8-10%, а FPS равен 60. У тебя не так?
Кстати да, я тоже ничего подозрительного не заметил. Видимо правило "на моём компе работает" тут имеет место. Но и на моём  гладенько всё. Так что вот да (см выше ) - это же не корпоративный софт, который проверяют на всевозможных конфигурациях: свою поставленную задачу выполняет - и ладно.

Chuzhoi

[off]Я думаю, у Бориса просто по каким-то причинам не включилась синхронизация, поэтому на его машине программа просто бешено бегает по кругу, загружая процессор на 100% и выдавая, к примеру, 800 fps. А у нас с тобой она включилась, поэтому процессор после рендеринга каждого кадра простаивает, и в итоге грузится несильно. Почему не включилась - трудно сказать. Я крайне бегло посмотрел код и не нашел навскидку какого-то специального вызова функции или какого-то аргумента при вызове функции, управляющего синхронизацией. Более того, я совершенно не помню, придавал ли я какое-то значение синхронизации, когда писал программу - ведь это было 12 лет назад, а глубоко сейчас влезать в этот код совершенно недосуг. Могу предположить, что параметры синхронизации в программе вообще никак не задаются и оставлены на откуп системе или DirectX'у, которые у Бориса более старых версий (XP и 9), и по умолчанию у него синхронизация выключена, а у нас, в более новых ОС/DirectX, по умолчанию включена. Других версий у меня нет. Ради эксперимента Борис может попробовать принудительно для данного приложения включить синхронизацию через нвидиевские драйверы.[/off]

Призрак Boris'а3000

[off]
Цитата: Chuzhoi от 28 июля 2017 02:50:37
У меня она грузит процессор на 8-10%, а FPS равен 60, т. е. частоте монитора. У тебя не так?
Даже отдалённо не так.
Загрузка процессора -- 25%. 25% от квада -- это попросту одноядерный проц на 100%. Топовое ядро 2008-2009 годов на частоте 4.1 ГГц грузится на 100% чисто графической программкой, написанной в 2005-ом. Там ведь нет просчёта физики, да?
ФПС -- 55-60 при частоте обновления 70 Гц. Тут можно предположить, что она попросту тормозит, поэтому и нет синхронизации, а загрузить квад больше, чем на четверть, она не может, т. к. однопоточная.

Но и 10% -- это слишком много для более-менее современных процов. У меня такая загрузка при воспроизведении ДВД-видео, да и то лишь на пиках, в основном -- 3-5%.

Цитата: Chuzhoi от 28 июля 2017 02:50:37
у Бориса просто по каким-то причинам не включилась синхронизация, поэтому на его машине программа просто бешено бегает по кругу, загружая процессор на 100% и выдавая, к примеру, 800 fps
Нет, со скоростью всё в порядке. Процессор -- да, на 100%, если не брать в расчёт лишние ядра. А фпс 55-60.

Цитата: Chuzhoi от 28 июля 2017 02:50:37
параметры синхронизации в программе вообще никак не задаются и оставлены на откуп системе или DirectX'у, которые у Бориса более старых версий (XP и 9)
Но ведь и программка была написана в 2005-ом, а не сейчас.

Цитата: Chuzhoi от 28 июля 2017 02:50:37
по умолчанию у него синхронизация выключена
Обижаешь. :biggrin: Такие вещи как вертикальная синхронизация, анизотропная фильтрация и антиальясинг у меня всегда включены.


Цитата: HellRaiser от 28 июля 2017 02:57:14
Но она не делает вообще всё за тебя
Я тут при чём? Она должна делать не за меня, а за процессор. Если используется D3D, то нагрузка должна лечь на видеокарту, разгрузив проц -- ради этого ж и задумано. В такой программке загрузка процессора должна болтаться в районе нуля, и даже в софтовом режиме не должна и близко доходить до 100% одного ядра.[/off]
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26