Проблема прозрачности Directx8 при перекрытии двух объектовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема прозрачности Directx8 при перекрытии двух объектов

Сообщение Anonymous »

Привет, я новичок в DirectX, я в основном использую его, потому что это интерфейс, который использовался для старой игры, для которой я пишу что-то вроде функции очистки экрана, поэтому все работает нормально, пока мне не придется перекрывать два объекта, это всего лишь два простых четырехугольника с назначенной текстурой png. Я использую эту функцию для установки этапа рендеринга и вызова функции

Код: Выделить всё

static void RW_SetupRenderState(IDirect3DDevice8* dev)
{
dev->SetRenderState(D3DRS_ZENABLE, FALSE);
dev->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);

dev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
dev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
dev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
dev->SetRenderState(D3DRS_LIGHTING, FALSE);

dev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
dev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
dev->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);

dev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
dev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
dev->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);

dev->SetVertexShader(D3DFVF_XYZRHW| D3DFVF_DIFFUSE | D3DFVF_TEX1);
}

Код: Выделить всё

        for (i = 0; i < g_scene.objectsCount; ++i)
{
self->BeginScene();
RW_SetupRenderState(self);
RWObject* o = &g_scene.objects[i];
if (!o->id[0]) continue;
RW_RenderObject(self, o, g_curFrame);
self->EndScene();
}
и вот как это выглядит, когда два объекта перекрываются, оно довольно прозрачное и кажется, что цвета первого объекта сливаются со вторым
Изображение

Кроме того, да, я сначала рисую логотип, а затем эффект блика
Моя цель — сделать это похожим на блендер
Изображение

Любая помощь в этом будет полезна, так как я не знаю, куда еще пойти, также протестировал много разных комбинаций, которые я видел в Интернете, но это была лучшая

Подробнее здесь: https://stackoverflow.com/questions/798 ... ts-overlap
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»