![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
cossack5 |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 8.9.2011 Репутация: нет Всего: нет |
Возникла острая необходимость перенести проект с 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 нашел функцию, но похоже она не годится для этого, хотя я не уверен. Даже великий гугл ничего не может дать (за исключенем кучи сайтов не отличающихся от MSDN). Также не вызывается метод GetPaletteEntries(UINT PaletteNumber, PALETTEENTRY *pEntries): выдает access violation.
Это сообщение отредактировал(а) cossack5 - 14.6.2012, 18:58 |
||||||||
|
|||||||||
BEOWOLF |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 24.8.2007 Репутация: нет Всего: 2 |
В Direct3D при отрисовке через интерефейс спрайта, можно передавать цвет-маску, это частично заменяет использование палитры. Ещё можно спрайты-маски делать. Ещё можно натягивать разные текстуры и по-разному микшировать... Ну и предлагаю вообще не работать с сурфейсами, а лучше с текстурами
![]() Добавлено через 5 минут и 38 секунд да, ещё есть мысль: можно при отрисовке конкретного спрайта использовать пиксельный шейдер, заменяющий одни цвета на другие ![]() |
|||
|
||||
cossack5 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 8.9.2011 Репутация: нет Всего: нет |
Может кто-нибудь знает, как использовать формат D3DFMT_P8? Поверхность с таким форматом не создается. Мне лишь удалось узнать, что именно он должен использоваться при работе с палитрой.
|
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |