Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с палитрой в Direct3D 
:(
    Опции темы
cossack5
Дата 14.6.2012, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.9.2011

Репутация: нет
Всего: нет



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

PALETTEENTRY PAL[256];
//заполняем PAL
LPDIRECTDRAW DD;
//создаем DirectDraw
LPDIRECTDRAWSURFACE DSURFACE;
// создаем поверхность
LPDIRECTDRAWPALETTE DDPAL;
bool PaletteLoaded=false;
if (!PaletteLoaded){
  DD->CreatePalette(DDPCAPS_8BIT,&PAL[0],&DDPAL,NULL); // создаем 8-битную палитру.
  DSURFACE->SetPalette(DDPAL); 
  PaletteLoaded=true;
  }else{
    DDPAL->SetEntries(0,0,256,PAL);
};

Что касается Direct3D (Direct3D9), то там есть лишь одна функция. IDirect3DDevice9::SetPaletteEntries
Код

HRESULT SetPaletteEntries(
  [in]  UINT PaletteNumber,
  [in]  const PALETTEENTRY *pEntries
);


В MSDN говорится, что PaletteNumber - порядковый номер палитры. Возник вопрос, где взять этот порядковый номер? И например, если установить его в 0, то функция не вернет D3D_OK. 
Код

HRESULT dd=g_pd3dDevice->SetPaletteEntries(0,PAL);
if (dd==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.
Код

// д3д уже создан, девайс создан, поверхность создана
    PALETTEENTRY PAL[256];
    memset(PAL,0,sizeof PAL);
         if (g_pd3dDevice->GetPaletteEntries(0,PAL)==D3D_OK) 
{
// действия 
};



Это сообщение отредактировал(а) cossack5 - 14.6.2012, 18:58
PM MAIL   Вверх
BEOWOLF
Дата 16.6.2012, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 24.8.2007

Репутация: нет
Всего: 2



В Direct3D при отрисовке через интерефейс спрайта, можно передавать цвет-маску, это частично заменяет использование палитры. Ещё можно спрайты-маски делать. Ещё можно натягивать разные текстуры и по-разному микшировать... Ну и предлагаю вообще не работать с сурфейсами, а лучше с текстурами smile

Добавлено через 5 минут и 38 секунд
да, ещё есть мысль: можно при отрисовке конкретного спрайта использовать пиксельный шейдер, заменяющий одни цвета на другие smile
PM MAIL   Вверх
cossack5
Дата 24.6.2012, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.9.2011

Репутация: нет
Всего: нет



Может кто-нибудь знает, как использовать формат D3DFMT_P8? Поверхность с таким форматом не создается. Мне лишь удалось узнать, что именно он должен использоваться при работе с палитрой.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.