Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > DirectX: Прозрачность


Автор: Annihilator 10.5.2009, 10:55
Добрый день. Задача такая. Имеется конус, который вращается вокруг осей X и Y. Задан материал и свет. Я хочу сделать так, чтобы материал был прозрачный, т.е. при вращении конуса были видны задние стенки сквозь переднюю.
пробовал сделать вот так
Код

Material.Diffuse.r = Material.Ambient.r = 1.0f;
Material.Diffuse.g = Material.Ambient.g = 0.0f;
Material.Diffuse.b = Material.Ambient.b = 0.0f;
Material.Diffuse.a = Material.Ambient.a = 0.9f;

pDirect3DDevice->SetMaterial(&Material);
pDirect3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
pDirect3DDevice->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL);

 ничего не получается. Такое ощущение, что прозрачность одинакова что при прохождении через одноу, что через две стенки, т.е. я не вижу вторую (заднюю стену)

Автор: BorisVorontsov 12.5.2009, 14:23
Во-первых, SetRenderState достаточно задавать единожды, если в дальнейшем не планируешь менять его где-нибудь в коде.
Во-вторых, ты не выставил параметры наложения. Добавь такой код:

Код

pDirect3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pDirect3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

Автор: Annihilator 14.5.2009, 20:00
BorisVorontsov, спасибо большое так и сделал. Но есть еще вопрос. У меня внутри конуса есть отрезок из вершины так вот как сделать так чтобы его прозрачность не менялась, т.е. отрезок был виден через конус

Автор: Annihilator 14.5.2009, 21:22
Решил вопрос! Нарисовал сначала отрезок, затем только конус.

Автор: C/L 15.5.2009, 10:03
 smile Все правильно. Если сначала нарисовать конус, то линия потом не пройдет проверку на z-буфере и не будет выведена. Так что сначала рисуют все непразрачное.

Автор: BorisVorontsov 15.5.2009, 10:23
Либо отключи Z-буфер, и будет рисоваться все smile

Автор: C/L 15.5.2009, 10:57
Цитата(BorisVorontsov @ 15.5.2009,  12:23)
Либо отключи Z-буфер, и будет рисоваться все smile

Да, но тогда объекты надо хотя бы отсортировать в порядке удаленности от наблюдателя, а то получится нехорошо  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)