Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > работа с палитрой в Direct3D |
Автор: cossack5 14.6.2012, 18:46 | ||||||||
Возникла острая необходимость перенести проект с DirectDraw на Direct3D (чтобы можно было использовать преимущества последнего). Все было бы хорошо, если не палитра, которая используется в проекте. В DirectDraw для палитры отведен отдельный интерфейс, да и функций там больше. Вариант остаться на DirectDraw или не юзать палитру не предлагать (слишком много спрайтов "запалитренных" этой палитрой). Пример кода создания рабочей и палитры средствами DirectDraw:
Что касается Direct3D (Direct3D9), то там есть лишь одна функция. IDirect3DDevice9::SetPaletteEntries
В MSDN говорится, что PaletteNumber - порядковый номер палитры. Возник вопрос, где взять этот порядковый номер? И например, если установить его в 0, то функция не вернет D3D_OK.
Даже если и вернет D3D_OK, цвета останутся теми же. Если создать поверхность с D3DFMT_A8 или D3DFMT_P8 вместе каких бы то ни было корявых изображений белый экран, работает так (но без палитры, все в сером цвете): g_p3dDevice->CreateOffscreenPlainSurface(width,height,D3DFMT_L8,D3DPOOL_DEFAULT,&g_p2DSurface,NULL); В GDI нашел http://msdn.microsoft.com/en-us/library/dd183507(v=vs.85).aspx, но похоже она не годится для этого, хотя я не уверен. Даже великий гугл ничего не может дать (за исключенем кучи сайтов не отличающихся от MSDN). Также не вызывается метод GetPaletteEntries(UINT PaletteNumber, PALETTEENTRY *pEntries): выдает access violation.
|
Автор: BEOWOLF 16.6.2012, 15:35 |
В Direct3D при отрисовке через интерефейс спрайта, можно передавать цвет-маску, это частично заменяет использование палитры. Ещё можно спрайты-маски делать. Ещё можно натягивать разные текстуры и по-разному микшировать... Ну и предлагаю вообще не работать с сурфейсами, а лучше с текстурами ![]() Добавлено через 5 минут и 38 секунд да, ещё есть мысль: можно при отрисовке конкретного спрайта использовать пиксельный шейдер, заменяющий одни цвета на другие ![]() |
Автор: cossack5 24.6.2012, 22:06 |
Может кто-нибудь знает, как использовать формат D3DFMT_P8? Поверхность с таким форматом не создается. Мне лишь удалось узнать, что именно он должен использоваться при работе с палитрой. |