{"id":140,"date":"2009-07-08T04:50:10","date_gmt":"2009-07-08T11:50:10","guid":{"rendered":"http:\/\/www.shultays.com\/blog\/?p=140"},"modified":"2009-07-08T04:50:10","modified_gmt":"2009-07-08T11:50:10","slug":"directx-ilk-testler","status":"publish","type":"post","link":"https:\/\/enginmercan.com\/?p=140","title":{"rendered":"Directx, ilk testler"},"content":{"rendered":"<p>Yava\u015f yava\u015f directx ile \u00f6rnekleri incelemeye ve kendi \u00e7al\u0131\u015fmalar\u0131m\u0131 yapmaya ba\u015flad\u0131m.<\/p>\n<p>Directx kullan\u0131rken asl\u0131nda opengl i yanl\u0131\u015f kulland\u0131\u011f\u0131m\u0131 farkettim. Misal opengl de bir \u015fekil \u00e7izerken<\/p>\n<p>glVertex3f(&#8230;);<br \/>\nglVertex3f(&#8230;);<br \/>\nglVertex3f(&#8230;);<\/p>\n<p>gibi 3 tane koordinat veriyordum. Bu fonksiyonlarda bu koordinatlar\u0131 ekran kart\u0131na yolluyor ve \u00e7izim i\u015flemlerine ba\u015fl\u0131yordu. Her frame i\u00e7in tekrar tekrar yollad\u0131\u011f\u0131m\u0131z i\u00e7in \u00e7ok fazla y\u00fck biniyormu\u015f.<\/p>\n<p>Directx \u00f6\u011frenirken ise bu koordinatlar\u0131 (vertex leri diyeyim art\u0131k) bir vertex buffer \u0131na bir kere yaz\u0131yoruz ve daha sonra bu buffer \u0131 ekran kart\u0131 haf\u0131zas\u0131na kopyalad\u0131\u011f\u0131m\u0131z\u0131 g\u00f6rd\u00fcm. Daha sonra istedi\u011fimiz zaman directx e &#8220;koordinatlar\u0131 bu bufferdan al art\u0131k&#8221; diyerek ekstra bir i\u015flemci-ekran kart\u0131 aras\u0131nda veri ak\u0131\u015f\u0131 olmadan \u00e7izimlerimizi yapabiliyorduk.<\/p>\n<p>Yanl\u0131\u015f hat\u0131rlam\u0131yorsam opengl de de vard\u0131 b\u00f6yle bir i\u015flem (illa vard\u0131r yani =) ). Lakin bu \u00f6zelli\u011fi kullanmay\u0131nca \u00e7ok daha k\u00fc\u00e7\u00fck polygon say\u0131lar\u0131 ile u\u011fra\u015f\u0131yordum. Directx de ne kadar fazla polygon kullanabildi\u011fimi g\u00f6r\u00fcnce ufak bir \u015fok ya\u015fad\u0131m.<\/p>\n<p>Bir \u00f6rnek ile g\u00f6stereyim. A\u015fa\u011f\u0131da ki \u00f6rnekte 512*512*2 yani yakla\u015f\u0131k 525 bin tane polygon var. Ve gayet ak\u0131c\u0131 bir \u015fekilde \u00e7al\u0131\u015f\u0131yor.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-142 alignleft\" title=\"test2\" src=\"http:\/\/www.shultays.com\/blog\/wp-content\/uploads\/2009\/07\/test1.jpg\" alt=\"test2\" width=\"224\" height=\"140\" \/><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-141\" title=\"test1\" src=\"http:\/\/www.shultays.com\/blog\/wp-content\/uploads\/2009\/07\/test4.jpg\" alt=\"test1\" width=\"224\" height=\"140\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-144 alignleft\" title=\"test3\" src=\"http:\/\/www.shultays.com\/blog\/wp-content\/uploads\/2009\/07\/test2.jpg\" alt=\"test3\" width=\"224\" height=\"140\" \/><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-145\" title=\"test4\" src=\"http:\/\/www.shultays.com\/blog\/wp-content\/uploads\/2009\/07\/test3.jpg\" alt=\"test4\" width=\"224\" height=\"140\" \/><\/p>\n<p><a href=\"http:\/\/shultays.com\/directxtest.rar\">Binary dosyalar<\/a><br \/>\n<a href=\"http:\/\/shultays.com\/directxtestsource.rar\">Kaynak Dosyalar<\/a><\/p>\n<p>Shader de\u011fi\u015ftirmek i\u00e7in 1-9 tu\u015flar\u0131n\u0131 kullanabilirsiniz.<\/p>\n<p>Sol \u00fcst resim haritan\u0131n normal renkleri. Sa\u011f \u00fcst resim ise siyah beyaz. Siyah beyaz olmas\u0131 i\u00e7in pixel shader kulland\u0131m. Kabaca pixel shader her pixel ekrana \u00e7izilirken ekran kart\u0131 \u00fczerinde \u00e7al\u0131\u015fan o pixelin rengini veren program(c\u0131k). Mesela ilk resim i\u00e7in pixel shader o an kulland\u0131\u011f\u0131m\u0131z texture \u00fczerinde ger\u00e7ek rengi d\u00f6nd\u00fcr\u00fcrken, siyah beyaz yapabilmek i\u00e7in (r + g + b)\/3 rengini d\u00f6nd\u00fcr\u00fcyoruz. Pixel shader HLSL ile yaz\u0131l\u0131yor, ve .fx dosyalar\u0131 i\u00e7inde bulabilirsiniz.<\/p>\n<p>Sol alt resim gene farkl\u0131 bir pixel shader \u00fcr\u00fcn\u00fc. O anki g\u00f6r\u00fcnt\u00fcn\u00fcn emboss effect li halini veriyor. Son resim i\u00e7in durum biraz daha farkl\u0131. O post processing ile yap\u0131ld\u0131 (asl\u0131nda hepsi post processing ile yap\u0131l\u0131 benim \u00f6rne\u011fimde ama son resim i\u00e7in post processing zorunlu =)). Postprocessing sahnenin ekrana de\u011filde bir buffer a \u00e7izilmesi ve daha sonra bu buffer ekrana \u00e7izilirken pixel shader ile oynamalar yap\u0131lmas\u0131 i\u015flemi. Burada da resmin x koordinat\u0131n\u0131n sin\u00fcs \u00fcne g\u00f6re y koordinat\u0131n\u0131 hafif kayd\u0131r\u0131yoruz ve b\u00f6yle dalgal\u0131 bir g\u00f6r\u00fcnt\u00fc elde etmi\u015f oluyoruz.<\/p>\n<p>Ayr\u0131ca dikkat ederseniz t3.x diye hayvani boyutta bir dosya var. Bu arazinin model dosyas\u0131. 3d max ile olu\u015fturdum. \u0130\u015fleri baya basitle\u015ftiriyor, .x dosyas\u0131n\u0131 y\u00fckledikten sonra tek bir fonksiyon \u00e7a\u011f\u0131rarak kendisini \u00e7izebiliyoruz. Lakin \u00e7izmek d\u0131\u015f\u0131nda pek bir i\u015flemimiz yok tabi. Mesela collision detection yapabilmek i\u00e7in .x dosyas\u0131n\u0131 y\u00fckl\u00fcyorum, daha sonra bunu tekrar normal ram e kopyal\u0131yorum anca o zaman kullanabiliyorum =)<\/p>\n<p>Bu ara pek ha\u015f\u0131r ne\u015fir oldu\u011fum siteler<\/p>\n<p><a href=\"http:\/\/www.directxtutorial.com\/\">http:\/\/www.directxtutorial.com\/<\/a> ba\u015flang\u0131\u00e7 i\u00e7in harika bir kaynak<br \/>\n<a href=\"http:\/\/www.applicachia.com\/\">http:\/\/www.applicachia.com\/<\/a> \u00e7ok g\u00fczel \u00f6rnekler var. Benim \u00f6rnekte asl\u0131nda buradakilerden bir tanesinin \u00fczerinden gidiyor =D<\/p>\n<p>ve google tabiki =)<\/p>\n<p>Daha yaz\u0131lacak \u00e7ok \u015fey var ama akl\u0131ma gelenler bunlar. Geli\u015ftirdik\u00e7e daha ayr\u0131nt\u0131 olarak anlataca\u011f\u0131m umar\u0131m<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yava\u015f yava\u015f directx ile \u00f6rnekleri incelemeye ve kendi \u00e7al\u0131\u015fmalar\u0131m\u0131 yapmaya ba\u015flad\u0131m. Directx kullan\u0131rken asl\u0131nda opengl i yanl\u0131\u015f kulland\u0131\u011f\u0131m\u0131 farkettim. Misal opengl de bir \u015fekil \u00e7izerken glVertex3f(&#8230;); glVertex3f(&#8230;); glVertex3f(&#8230;); gibi 3 tane koordinat veriyordum. Bu fonksiyonlarda bu koordinatlar\u0131 ekran kart\u0131na yolluyor ve \u00e7izim i\u015flemlerine ba\u015fl\u0131yordu. Her frame i\u00e7in tekrar tekrar yollad\u0131\u011f\u0131m\u0131z i\u00e7in \u00e7ok fazla y\u00fck biniyormu\u015f. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,15,12],"tags":[],"class_list":["post-140","post","type-post","status-publish","format-standard","hentry","category-cc","category-directx","category-grafik"],"_links":{"self":[{"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=140"}],"version-history":[{"count":0,"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/140\/revisions"}],"wp:attachment":[{"href":"https:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}