С Рождеством дорогие читатели!
Хочу бескорыстно поделиться своим скромным проектом.
Основные возможности:
- вывод 3D графики (модели, сцены) на рабочий стол Windows;
- переход в скринсейвер и обратно;
- импорт моделей;
- установка последнего 3D кадра картинкой рабочего стола;
Предыстория
Проект закончил еще в сентябре 2011 года, когда был готов официальный сайт, с тех пор я не вспоминал и не занимался проектом вовсе.
Предпосылки для создания было две: то, что это возможно и то, что это что-то удивительное, я имею в виду покрытие десктопа живой 3D картинкой, меня поначалу это завораживало, да и есть где фантазии разгуляться. Конечно, способов анимировать десктоп и сейчас хватает, но решений подобно моему я не встречал.
Принцип действия
Если описать весь процесс, то все довольно просто:
- получение главного окна системы (самое нижнее окно в иерархии окон рабочего стола);
- инициализация и вывод 3D графики на главном окне;
- установка прозрачности слоев находящихся над главным окном;
- и установка хуков на действия пользователя над рабочим столом.
hP = FindWindow(L"ProgMan", NULL);
hD = GetDesktopWindow();
if (!SUCCEEDED(InitD3D(hD))) { FatalError( L"Can't init Direct3D" ); ExitProcess(NULL);}
SetWindowLong(hP,GWL_EXSTYLE, GetWindowLong(hP,GWL_EXSTYLE) | WS_EX_LAYERED );
UAC_hook = SetWinEventHook( EVENT_SYSTEM_DESKTOPSWITCH, EVENT_SYSTEM_DESKTOPSWITCH, NULL, WinEventCallback, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNTHREAD);
Кстати, исходный код представлен в довольно необычной форме, более 3000 строк кода и все одном файле, связано это с первым опытом C++ и DirectX.
Недостатки
Единственным недостатком, из-за которого решение нельзя было бы назвать правильным, является именно вывод 3D графики на рабочем столе главном окне, которое под это в принципе не предназначено.
Хотелось бы предупредить, что программа потребляет неодинаковое количество ресурсов на разных компьютерах и операционных системах, т.е. может использовать <1% CPU на одном компьютере и >40% на другом, примерно такой же комплектации (лучшая производительность на Windows XP). Используйте спящий режим — двойной щелчок на иконке в трее.
Применение
Помимо рендера обоев с разных ракурсов 3D модели, пускай даже с фотографиями родных или календариком (да да, тем самым календариком который нам подарил на новый год дорогой anatoly_rr), можно постараться найти несколько полезных применений подобному решению, таких как:
- вывод информации второстепенной важности, будь то: система мониторинга дома или движения грузовиков на карте;
- вывод фирменной эмблемы в 3D на экранах в офисе или магазине.
Импорт моделей
Все, включая модели, делал в одиночку и конечно не всем они могут быть по душе, понимаю.
Импорт собственной модели не составит особого труда, особенно если Вы владеете 3D редактором, вчера специально создал небольшой мануал (англ.) по импорту 3D модели из 3Ds Max, так же имеется видео на youtube. Существует несколько нюансов, ведь, как вы наверное догадались, тени отрисовываются не налету, а экспорт же происходит в старый добрый *.X файл. Если у Вас будут обои, сбрасывайте, я их разшарю в специальном разделе. Спасибо за внимание!
Ссылки
Сайт проекта: michael.verhov.com/project/full3dwallpaper
Официальный: full3dwallpaper.com
GitHub: github.com/verhov/full3dwallpaper
Видео немножко: www.youtube.com/watch?v=zkVRyfxRGn0
Автор: verhov