Önceki başlık :: Sonraki başlık |
Yazar |
Mesaj |
devreci
Kayıt: Mar 04, 2005 Mesajlar: 256
|
Tarih: Thu Jun 30, 2005 8:30 pm Mesaj konusu: directx alpha sorunu |
|
|
zbuffer'e veri yazıldığı için saydam yüzeyler sanki katı madde gibi algılanıyor ve arkadaki şekiller gözükmüyor.
mesela araba yaptık diyelim camlar saydam olacak ama bi türlü yapamıyom tamam saydam oluyoda koltuklar ,yol ve adamın kellesi görünmüyor.
burda küçük bişey kodladım ne kadar kadar uğraştımsa düzeltemedim
http://www.free-webhosting.com/devreci/progs/deney.exe
kum saatinin camı güzel çalışıyor fakat camın arasındaki şekiller gözükmüyor ancak zbufferi kapatırsak veya camı en son cizdirirsek doğru çalışıyor. bu konuda yardım ederseniz sevinirim.
kaynak kodu var kodu değiştirip yollarsanız daha çok sevinirim.
birde gl de bu sorun varmı yoksa nasıl gideriliyor. |
|
Başa dön |
|
|
LorenSoth
Kayıt: Oct 12, 2004 Mesajlar: 99
|
|
Başa dön |
|
|
scg
Kayıt: Oct 30, 2002 Mesajlar: 38 Nereden: Ankara
|
Tarih: Thu Jun 30, 2005 9:29 pm Mesaj konusu: |
|
|
Önce opak nesneleri çizdir (normal z buffer işlemleri ile..)
Sonra transparan objeleri çizdir. (fakat z buffer a yazma , opakların z sini oku sadece.)
şöyle bişeyler:
Kod: |
d3d9->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
OpaklariCiz( );
d3d9->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );
TransparanlariCiz( );
|
|
|
Başa dön |
|
|
asyncore
Kayıt: Jan 13, 2004 Mesajlar: 110 Nereden: Gevrek, darı ve çiğdem yenen yerden
|
Tarih: Thu Jun 30, 2005 9:43 pm Mesaj konusu: |
|
|
Merhaba hocam, seni C++ & DX yazarken görmek ne kadar güzel
LorenSoth hocama (evet back to front çizdirmelisin) ek olarak alterantif yöntem ise şeffaf çizim yapaken z-bufferı kapatmaktır. Tabi ki bunun için şeffaf yüzeyler çizme işini sona bırakırsan daha iyi olur.
Z-Bufferı Aç
Katı yüzeyleri çiz
Z-Bufferı Kapat
Şeffaf yüzeyleri çiz
Senin örneğinde cam için blend doğru olmuyor sanırım. Sebebi ise kodunda farkettiğim kadarıyla
d3d9->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCCOLOR);
d3d9->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_BOTHSRCALPHA);
Source rengi doğru ama destination rengi hatalı.
Mesela camda kullandığın alphanın anlamına göre
Alpha = 0 iken cam tamamen şeffaf ise
d3d9->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);d3d9->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
Source burada şeffaf yüzeylerin rengini
Destination ise frame buffer'da yazılı rengi yani katı yüzeylerin rengini ifade etmektedir.
Bkz: DX9 SDK |
|
Başa dön |
|
|
asyncore
Kayıt: Jan 13, 2004 Mesajlar: 110 Nereden: Gevrek, darı ve çiğdem yenen yerden
|
Tarih: Thu Jun 30, 2005 9:47 pm Mesaj konusu: |
|
|
Z-Bufferı kapatmak değil tabiki, Z-Buffer'a yazmayı kapatıcaksın.
scg yazmasa daldım gidiyorum
İkisi farklı şeyler, yanlış anlaşılmaya mahal vermeyeyim |
|
Başa dön |
|
|
devreci
Kayıt: Mar 04, 2005 Mesajlar: 256
|
Tarih: Thu Jun 30, 2005 11:09 pm Mesaj konusu: |
|
|
arkadaşlar bu çok önemli konuymuş çünkü gl dede aynı hata var bir örnekte gördüm orada gldisable(zbuffer) gibi bişey vardı .
beyler tamam doğruda sizin dediğiniz yöntemle eğer zbuf'a çizimi engellersek üçgeni çizdirdikden sonra başka bir üçgen çizdirirsek uzaklık
ne olursa olsun saydam yüzeyin üstüne çizer yani oyun mahvolur.
saydamları en son çizdirirsek ve write'yi disable yaparsak işimiz çok zorlaşır çünkü saydam objeleri ensona ayarlamak baya uzun iş.
tamam bu işide yapdık diyelim bu seferde iki saydam objeyi hangisini önce hangisini sonra nasıl ayarlayacağız ??
birde operation flaspoint diye bi oyunda bu sorun yok arabaların camından içerisi ve hatta diyer cam ve gölgelerde hafif karanlık gibi durumlar ayarlanmış |
|
Başa dön |
|
|
asyncore
Kayıt: Jan 13, 2004 Mesajlar: 110 Nereden: Gevrek, darı ve çiğdem yenen yerden
|
Tarih: Thu Jun 30, 2005 11:14 pm Mesaj konusu: |
|
|
Hayır işte saydam cismi üzerine çizmesin dize z-bufferı açık bırakıp yazmayı kapatıyoruz. Yani test hala yapılıyor. Bufferdaki değere göre yine uzaklığa göre sıralanmış oluyor. Anlatabildim mi?
Bu yüzden z-bufferı kapatmakla z-buffera yazmayı kapatmak farklı dedim.
İki saydam yüzey için de bu yöntem sana güvence sağlar sorun olmaz. Sen dene göreceksin. |
|
Başa dön |
|
|
devreci
Kayıt: Mar 04, 2005 Mesajlar: 256
|
Tarih: Thu Jun 30, 2005 11:17 pm Mesaj konusu: |
|
|
birde şu back to front ne demek ?
benim aklıma bu iş için ayarlanmış özel bufferin olmasından başka bişey gelmiyor. stencil,zbuffer gibi alpha buffer olmalı sdk da baktım öyle bişey yok |
|
Başa dön |
|
|
LorenSoth
Kayıt: Oct 12, 2004 Mesajlar: 99
|
Tarih: Thu Jun 30, 2005 11:19 pm Mesaj konusu: |
|
|
devreci demiş ki: |
birde şu back to front ne demek ?
benim aklıma bu iş için ayarlanmış özel bufferin olmasından başka bişey gelmiyor. stencil,zbuffer gibi alpha buffer olmalı sdk da baktım öyle bişey yok |
hocam işte bakış açısına göre arkada kalacak olan polygon u ilk cizmek onun önündekini sonra cizmek. Yani sıra önemli. |
|
Başa dön |
|
|
asyncore
Kayıt: Jan 13, 2004 Mesajlar: 110 Nereden: Gevrek, darı ve çiğdem yenen yerden
|
Tarih: Thu Jun 30, 2005 11:20 pm Mesaj konusu: |
|
|
Alpha buffer diye birşey yok buna gerek de yok.
Back-to-front sahnedeki objelerin çizim sırasını kameraya uzaklığına göre uzaktan yakına doğru sıralama işlemidir. Bir dizi ile bile kolayca halledilirisin bunu.
Bir de saydam objeleri sona saklamak neden uzun iş ki anlamadım? Sadece katılardan sonra çizdireceksin o kadar |
|
Başa dön |
|
|
devreci
Kayıt: Mar 04, 2005 Mesajlar: 256
|
Tarih: Thu Jun 30, 2005 11:21 pm Mesaj konusu: |
|
|
arkadaşlar bu çok zor bi iş yandık desenize |
|
Başa dön |
|
|
devreci
Kayıt: Mar 04, 2005 Mesajlar: 256
|
Tarih: Thu Jun 30, 2005 11:24 pm Mesaj konusu: |
|
|
vertexlerin bana olan uzaklığını x*x+y*y+z*z diyerek kolayca bulabilirim
buna göre sıralayabilirim ama buda işime yaramaz gibime geliyor |
|
Başa dön |
|
|
devreci
Kayıt: Mar 04, 2005 Mesajlar: 256
|
Tarih: Fri Jul 01, 2005 12:02 am Mesaj konusu: |
|
|
sağulun var olun arkadaşlar
gece yarısı yataktan zıpladım yapdım uyku tumadı yau
http://www.free-webhosting.com/devreci/progs/3ddeney2.exe
işimiz baya zorlaştı ama olsun.
yaw benim aklımda hala "alpha buffer" düşü var.
birde iyi çalışıyomu şu deney. |
|
Başa dön |
|
|
asyncore
Kayıt: Jan 13, 2004 Mesajlar: 110 Nereden: Gevrek, darı ve çiğdem yenen yerden
|
Tarih: Fri Jul 01, 2005 8:29 am Mesaj konusu: |
|
|
Yine olmamış
Kum saatinin çerçevesini saydam yapmışsın. Bir sütunun içinden taban, tavan ve diğer sütunlar gözüküyor. Sütunları çizerken alphayı kapalı tutacaksın. Camı çizerken açacaksın sadece.
Buna ek olarak camdaki blend hatası halen sürüyor. Sana attığım ilk mesajdaki şekilde yapmazsan camdan doğru saydam görüntü alamazsın. |
|
Başa dön |
|
|
vmeydaneri
Kayıt: Dec 08, 2004 Mesajlar: 583 Nereden: Ankara
|
Tarih: Fri Jul 01, 2005 11:30 am Mesaj konusu: |
|
|
modeli ayir :
->Modelin Cam kismi
->Modelin Cam olmiyan kismi
bunu her polygona TUR vererek sagliyabilirsin.
->Cam kisma = 1
->Cam olmayan kisma = 0
dersek
Cizerken :
if(POLYGON == 0)
{
// cam olmayan kismi ciz
}
if(POLYGON == 1)
{
//cam olan kismi ciz
}
boylelikle her zaman blend uyguladigin nesne en son cizilecek ve allttaki nesneler gozukecetir.
zaten diger arkadaslar olayi aciklamislar...Ben indirdigim programdaki olayi anlatmak icin yazdim.. |
|
Başa dön |
|
|
|