Pull to refresh

3D на рабочий стол Windows (+исходники)

Working with 3D-graphics *
3D модели на рабочем столеС Рождеством дорогие Хабравчане!

Хочу бескорыстно поделиться своим скромным проектом.

Основные возможности:

  • вывод 3D графики (модели, сцены) на рабочий стол Windows;
  • переход в скринсейвер и обратно;
  • импорт моделей;
  • установка последнего 3D кадра картинкой рабочего стола;




Предыстория


Проект закончил еще в сентябре 2011 года, когда был готов официальный сайт, с тех пор я не вспоминал и не занимался проектом вовсе.
Предпосылки для создания было две: то, что это возможно и то, что это что-то удивительное, я имею в виду покрытие десктопа живой 3D картинкой, меня сначала это завораживало (особенно вращающийся тигр из уроков по DirectX на ярко синем фоне рабочего стола), есть где фантазии разгуляться, думал я. Конечно, способов анимировать десктоп и сейчас хватает, но решений подобно моему я не встречал.

Принцип действия


Если описать весь процесс, то все довольно просто:
  • получение главного окна системы (самое нижнее окно в иерархии окон рабочего стола);
  • инициализация и вывод 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 модели на рабочем столе
Помимо рендера обоев с разных ракурсов 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
Tags:
Hubs:
Total votes 97: ↑87 and ↓10 +77
Views 90K
Comments Comments 35