Ana Menü
· Ana Sayfa
· Dosyalar
· Dökümanlar
· Forum
· Günün Resmi
· Haber Arşivi
· WWW Linkleri
· Üye Listesi

     Forumlar

 strncpy ve strncpy_s
 Konu adi : Borland c++ Builder ile Amiral Batti
 Rady10 - YerliOyun
 Kabusta Kaybolmak
 Konsol da programı bekletmek
 Oyun programlama icin hangi programlama dilli ?
 flash! şanlıurfa bilgisayar oyununda(no rapid)
 Sevgilim Olur musun?
 Directx'e başlamak isteyenler bi bakın
 PSP programlama
 Flash tan php
 Bilgisyr oyunu yapmam için üniverstde hangi bölüme girmeliym
 www.arshiv.gen.ms
 Cimg.h ilgilenenler icin
 müttefik oyunu

Konu Disi
 Emraah
 Yeni sitemiz açıldı
 Kalp krizi durumunda ne yapılmalı?
 Oyun sektöründe hangi görevde çalışmak isterdiniz?
 Takım arkadaşı sorunu
 msn de renklı nıck
 pc hata veriyor ! YARDIM!!
 Gülmek isteyenler Buraya
 İnanılmaz hl 2 modu görüntüsü
 Computer Languages History

[ Forumlara Git ]


oyunyapimi.org: Forums

www.oyunyapimi.org :: Başlığı Görüntüle - DirectDraw da surface e bitmap yuklemek...
 SSSSSS   AramaArama   Kullanıcı GruplarıKullanıcı Grupları   ProfilProfil   LoginLogin 

DirectDraw da surface e bitmap yuklemek...

 
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> Programlama Dilleri ve Algoritmalar
Önceki başlık :: Sonraki başlık  
Yazar Mesaj
MrCha0s



Kayıt: Dec 13, 2003
Mesajlar: 71
Nereden: Istanbul

MesajTarih: Mon Jun 14, 2004 3:45 pm    Mesaj konusu: DirectDraw da surface e bitmap yuklemek... Alıntıyla Cevap Ver

off aslinda cok uzun bi mesaj yazmistim buraya ama silindi Sad useniyom dermini uzun uzun anlatmaya kisaca bahsedeyim. bazen surface e basmak istedigim bitmapler tam olarak ekranin icine gelmiyor yukaridan asagidan sagdan soldan tasabiliyor iste bu tur durumlarda bitmap in x,y pozisyonlarini surface in disinda kalicak sekilde verdigimiz zaman directx exception veriyor bende bi kod yazdim verilen bitmap in surfacein disinda kalan kismi varmi onu kontrol ediyor eger kalan kismi varsada sadece bitmapin surface in icinde kalan kismini aliyor ve basiyor tabi ben bole uzun bi kod yazdim sizin bildiginiz daha iyi bir yontem varmi veya daha optimize edilmis bir kod parcasi netde arattim ama pek birsey bulamadim muhtemelen yanlis arattim
Alıntı:


if (_PosX < 0)
{
// Yatay Pozisyon 0 dan kucuk
if ((_PosX + _bmpsurface.SurfaceDescription.Width) > 0)
{
// Tamam bitmap in bir kismi yetisiyor cizilebilinir
StartPosX = 0;
FromX = -_PosX;
EndPosX = _PosX + _bmpsurface.SurfaceDescription.Width;
BitmapView = true;
}
else
{
// Bitmap in yatay genisligi ekrana girmeye yetmedi
BitmapView = false;
}
} else
if (_PosX > (BackSurface.SurfaceDescription.Width - 1 - _bmpsurface.SurfaceDescription.Width))
{
// Yatay Pozisyon cok genis

if (_PosX < BackSurface.SurfaceDescription.Width)
{
StartPosX = _PosX;
EndPosX = BackSurface.SurfaceDescription.Width - 1 - _PosX;
BitmapView = true;
}
else
{
BitmapView = false;
}

}
else
{
// Tile Surface in icinde yer aliyor
StartPosX = _PosX;
EndPosX = _bmpsurface.SurfaceDescription.Width;
BitmapView = true;
}

if (_PosY < 0)
{
// Dikey Pozisyon 0 dan kucuk
// Yatay Pozisyon 0 dan kucuk
if ((_PosY + _bmpsurface.SurfaceDescription.Height) > 0)
{
// Tamam bitmap in bir kismi yetisiyor cizilebilinir
StartPosY = 0;
FromY = -_PosY;
EndPosY = _PosY + _bmpsurface.SurfaceDescription.Height;
BitmapView = true;
}
else
{
// Bitmap in yatay genisligi ekrana girmeye yetmedi
BitmapView = false;
}

} else
if (_PosY > (BackSurface.SurfaceDescription.Height - 1 - _bmpsurface.SurfaceDescription.Height))
{
// Dikey Pozisyon cok yuksek
if (_PosY < BackSurface.SurfaceDescription.Height)
{
StartPosY = _PosY;
EndPosY = BackSurface.SurfaceDescription.Height - 1 - _PosY;
BitmapView = true;
}
else
{
BitmapView = false;
}
}
else
{
// Tile Surfacein icinde yer aliyor
StartPosY = _PosY;
EndPosY = _bmpsurface.SurfaceDescription.Height;
}
*/

if (BitmapView == true)
{
try
{
//BackSurface.DrawFast(_posy, _posx, _bmpsurface, DrawFastFlags.DoNotWait | DrawFastFlags.SourceColorKey);
BackSurface.DrawFast(StartPosX, StartPosY,_bmpsurface, new Rectangle (FromX,FromY,EndPosX, EndPosY),DrawFastFlags.DoNotWait | DrawFastFlags.SourceColorKey);
}
catch
{
// Sebebini bilmedigim bir hata var haritayi cizerlen veriyor ScreenY degeri 592 oldugunda oluyor asagidaki hata mesajida onu gonderiyor
//MessageBox.Show("Screen X : "+ScreenX.ToString()+"\n Screen Y : "+ScreenY.ToString()+"\n StartPosX : "+StartPosX.ToString()+"\n StartPosY : "+StartPosY.ToString()+"\n FromX : "+FromX.ToString()+"\n From Y : "+FromY.ToString()+"\n EndPosX : "+EndPosX.ToString()+"\n EndPosY : "+EndPosY.ToString());
}

}

Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
deniz
Site Yöneticisi
Site Yöneticisi


Kayıt: Sep 14, 2002
Mesajlar: 838
Nereden: Ankara

MesajTarih: Mon Jun 14, 2004 4:22 pm    Mesaj konusu: Alıntıyla Cevap Ver

DirectDraw bilmiyorum sadece biraz tecrübe ile bişiler söylemeye çalışıcam

Şimdi sen bi bitmap i bi surface e yüklüyorsun.. burası tamam.. bide başka bir surface in var (double buffer mesela?).. neyse yapmak istediğinde bitmap surface ini diğer surface e kopyalamak... şimdi bu iş için Blit tarzı bir yordam yokmu?.. Böyle bir yordam var ise bunun "boundary checking" denen naneyi yapıp programın cortlamasını engellemesi gerekmez mi?

++ iki surface in bit derinlikleri (pixel format felan filan) aynı değilmi, sakın bunların farklı olması sorun çıkarıyor olmasın..

ben bi allegro nun directDraw gerçekleştiriminin koduna bakayımda şu blit olayına daha bi derinden gireyim..

görüşmek üzere..
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
Ziyaretci



Kayıt: Apr 24, 2003
Mesajlar: 287
Nereden: İstanbul

MesajTarih: Mon Jun 14, 2004 4:28 pm    Mesaj konusu: Alıntıyla Cevap Ver

bilmiyorum sorununla ne kadar alakalidir ama,Y değerlerini kontrol ettiğin IF bloğunu bi if le daha çevrelemen olayı hızlandırabilir:

Kod:

if( BitmapView ) {

if (_PosY < 0)
...bla bla bla...

}


şeklinde bişeyler.. böylece, eğer resim X değerlerinden dolayı dışarda ise, Y değerleri yüzünden tekrar içerde muamelesi görmez..

hadi kolay gelsin!![/code]
Başa dön
Kullanıcı profilini gör
Ziyaretci



Kayıt: Apr 24, 2003
Mesajlar: 287
Nereden: İstanbul

MesajTarih: Mon Jun 14, 2004 4:31 pm    Mesaj konusu: Alıntıyla Cevap Ver

bir de bişey daha farkettim;
ama benim bilgi eksiğimden olması da muhtemel:

en altta function call ederken her seferinde new Rectangle (... ) şeklinde bişeyler yapmak bi memory leak olmuyor mu? yoksa bunu bi yerlerde delete ediyon mu?
Başa dön
Kullanıcı profilini gör
deniz
Site Yöneticisi
Site Yöneticisi


Kayıt: Sep 14, 2002
Mesajlar: 838
Nereden: Ankara

MesajTarih: Mon Jun 14, 2004 4:34 pm    Mesaj konusu: Alıntıyla Cevap Ver

groups.google.com da "blitting surface clipper" diye arat.. allegro kodunu hızlı bi tradımda .. BltFast gibisinden komutlar gayet güzel çalışıyor gibi.. clipping olayını otomatik yapıyorlar gibi geldi bana..
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
MrCha0s



Kayıt: Dec 13, 2003
Mesajlar: 71
Nereden: Istanbul

MesajTarih: Mon Jun 14, 2004 4:46 pm    Mesaj konusu: Alıntıyla Cevap Ver

Selam cevaplar icin tesekkur ediyorum. Once denize cevap vermeye calisayim Smile sanirim boundary checking den bahsediyoruz ben ismini bilmedigim icin kaynak bulamamistim sorun o olabilir yani sole aciklayim iki adet surface kullaniyorum back surface front surface diyelim butun cizimleri back e yapiyorum daha sonra back surfacei front surface e atiyorum ve front surface i de ekrana basiyorum flip methodu ile :p tamamdir surfaceleri yaratirken back i front a atacladigim icin bit per pixel den filan herhangi bir sorun cikmiyor sorun su oluyor bir bitmap yaratiyorum mesela 32x16 boyutlarinda sonucda elimde 32x16 pixellik bir surface oluyor adi da _bmpsurface diyelim sonra ben bunu backsurface de yatay da (X) 100 dikeyde (Y) 150 kordinatlarina basiyorum ve no problem ekrana 32x16 pixellik resmin cikiyor ben diyorumki simdi bu X kordinati 100 degilde 0 dan kucuk bir deger oldugunda yani -10 program dogal olarak cokuyo Smile exception veriyor bende bu kodu yaziyorum ve bu kodun olayi su diyoki himmm deger 0 dan kucuk ozaman bu bitmap in hepsi ekrana basilmicak bakalim ne kadari basilcak once su bitmap surfacein boyu neymish himmm demek 32 pixel eee bunu x de -10 dan ektana basicaksak bu bitmapin sadece 22 pixellik bir kismi ekran da gozukcek hadi ben onu bi dortgenin icine alayim ve basayim olayi olyuo Smile iste bunu hesaplayan kodu yazdim sizin bildiginiz daha kisa bir olay veya teknik varsa anlatirsaniz sevinirim hic bir kutuphane veya bilesen kullanmadan bole bodozlama kod yazmaya kalkinca bilmedigin bi konuda bole takildigin yerler olur :p simdi tahmin ettigim kadariyla boundary checking diye aratirsam bi sonuca ulasabilirim...

Ziyaretci bende C# kullanmaya bu projede basladim ondan cok iyi bilmiyorum ama aklimda kaldigini soyluyorum eger method private ise baska classlar tarafindan kullanilmadigi icin o fonksiyon icinde tanimlanan degiskenler o fonksiyon cagrildiginda yaratilir ve fonksiyon bittiginde destroy edilir yani yanlis hatirliyorda olabilirim ...
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
Ziyaretci



Kayıt: Apr 24, 2003
Mesajlar: 287
Nereden: İstanbul

MesajTarih: Mon Jun 14, 2004 5:13 pm    Mesaj konusu: Alıntıyla Cevap Ver

bu c# miydi? c++ diye düşünmüştüm.. c#sa herhalde kendi garbage collectorlari vardir.. (yoksa yok mudur??)

Ayrıca, bu bitmapleri falan çizen fonksiyonlar genelde bu clipping işlerini yaparlar.. DX niye yaptırmıyokine ??

kolay gelsin..
Başa dön
Kullanıcı profilini gör
MrCha0s



Kayıt: Dec 13, 2003
Mesajlar: 71
Nereden: Istanbul

MesajTarih: Mon Jun 14, 2004 9:56 pm    Mesaj konusu: Alıntıyla Cevap Ver

yok yaw fonksiyon filan kullanmiyom Smile Direkt Direct Draw kodu kullaniyom yani bitmap icin once bi surface yaratiyom bitmap boylarinda sonra o surface e bir description orda trasparent sa iste colorkey lerini filan tanimliyom vs... yani baya bi kod ameliligi yapiyom ama zevkli bi seyler ogreniyorum en azindan....
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
levent



Kayıt: Mar 13, 2003
Mesajlar: 188
Nereden: İstanbul

MesajTarih: Fri Jul 02, 2004 5:19 pm    Mesaj konusu: Alıntıyla Cevap Ver

selam,
ihtimal 1,sanırım clipper'a ihtiyacın var:
Vb için şöyle code var:
Initialize procedure'na bunu eklemelisin.

Dim Clipper As DirectDrawClipper
Set Clipper = DDRAW.CreateClipper(0)
Clipper.SetHWnd myhWnd
Primary.SetClipper Clipper

2.Her Render'da Window rectini düzeltmediğin için çerçeve dışına kayma oluyor olabilir.Bu da exception (automation error)'a neden oluyor olabilir.
o da şöyle:
Bu da her flip ettiğinde flip'ten önce yapılacak işlem.
Dim Destrect As RECT
DX.GetWindowRect myhWnd, Destrect
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
MrCha0s



Kayıt: Dec 13, 2003
Mesajlar: 71
Nereden: Istanbul

MesajTarih: Fri Jul 02, 2004 5:55 pm    Mesaj konusu: Alıntıyla Cevap Ver

levent cevap icin saol sorun cerceve disindan kalmakdan kaynaklaniyor kendim bi kod yazdim. ve bu sorunu cozdum ama senin yazdigin kod cok daha kisa :p duruyor pek anlamadim kodu bana biraz daha aciklarmisin ?
DestRect dedigin hedef dortgen olsa gore simdi bu hedef dortgen benim flip edicegim surfacein dortgenimi yoksa bitmapimin yuklu oldugu surface in mi ? sunu biraz daha aciklarsan bekli anlarim :p cevap icin saol
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
Arda



Kayıt: Feb 25, 2003
Mesajlar: 226

MesajTarih: Sun Nov 21, 2004 3:39 pm    Mesaj konusu: Alıntıyla Cevap Ver

http://msdn.microsoft.com/archive/en-us/ddraw7/directdraw7/ddover_93qv.asp?frame=true
Başa dön
Kullanıcı profilini gör MSN Messenger
Arda



Kayıt: Feb 25, 2003
Mesajlar: 226

MesajTarih: Sun Nov 21, 2004 6:49 pm    Mesaj konusu: Alıntıyla Cevap Ver

soru:
ddraw da, fullscreen de clipper kullanirken, lpPrimary->flip(); yapabiliyoluyuz? yoksa back_buffer i ayri tutup (attached buffer yapmadan) blit mi etmeliyiz? (bayaa yavaslatmaz mi?)

hubele
Başa dön
Kullanıcı profilini gör MSN Messenger
Arda



Kayıt: Feb 25, 2003
Mesajlar: 226

MesajTarih: Wed Nov 24, 2004 2:29 pm    Mesaj konusu: Alıntıyla Cevap Ver

C++ da directdraw la clipping yapmak istiyorsaniz, ornek clipper ekleme fonksiyonu burada ki kaynak dosyasinda mevcut. Clipper'i backsurface'e linklemek gerekiyor. Dikkat edilmesi gereken nokta, resim blitlerken bltfast yerine blt fonksiyonunu kullanmak lazim, aksi halde clipper calismiyor.

Biraz monolog gibi oldu bu reply lar ama epey zaman kaybettim nasil calistigini anlayana kadar ve msdn de yeterli bilgi yok. En azindan benim gibi ddraw la ugrasmak isteyen baska 2D ciler piyasa cikarsa diye yaziyorum...
Başa dön
Kullanıcı profilini gör MSN Messenger
levent



Kayıt: Mar 13, 2003
Mesajlar: 188
Nereden: İstanbul

MesajTarih: Fri Nov 26, 2004 2:11 pm    Mesaj konusu: Alıntıyla Cevap Ver

Mr Chaos:mesajıma cevap yazdığını şimdi fark ettim çok üzgünüm.

Arda:Katkıların için sağol.
BltFast'in çalışmaması flag olarak DDL_WAIT'in verilmemesi olabilir mi?
Ben de 2D kullanıyorum ama VB ile...
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
Mesajları göster:   
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> Programlama Dilleri ve Algoritmalar Tüm saatler GMT +2 Saat
1. sayfa (Toplam 1 sayfa)

 
Forum Seçin:  
Bu forumda yeni konular açamazsınız
Bu forumdaki mesajlara cevap veremezsiniz
Bu forumdaki mesajlarınızı değiştiremezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu forumdaki anketlerde oy kullanamazsınız


Powered by phpBB 2.x.x © 200x phpBB Group
Türkçe Çeviri : Onur Turgay & Erdem Çorapçıoğlu
Türkçe Düzenleme: Alexis Canver
Version 2.x.x of PHP-Nuke Port by Tom Nitzschner © 200x www.toms-home.com




Web site powered by PHP-Nuke
Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Sayfa Üretimi: 0.159 Saniye