<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bilgisayar Kavramları &#187; Bilgisayar Grafiği (Computer Graphics)</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/bilgisayar-grafigi-computer-graphics/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Hesaplamalı Geometri (Computational Geometry)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/10/28/hesaplamali-geometri-computational-geometry/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/10/28/hesaplamali-geometri-computational-geometry/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 19:12:14 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Bilgisayar Matematiği]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/10/28/hesaplamali-geometri-computational-geometry/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, geometri konusunun bir alt kolu olan hesaplamalı geometriyi izah etmektir. Esas itibariyle mühendis kelimesinin kökü olan, hendese kelimesini büyük ölçüde karşılayan geometri kelimesinin başına hesaplamalı gibi bir kelime getirmek anlamlı değildir. Çünkü zaten geometri hesaplamalı bir çalışma alanıdır. Buradaki hesaplamalı kelimesi daha çok bilgisayar ile işlenen anlamını [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bu yazının amacı, geometri konusunun bir alt kolu olan hesaplamalı geometriyi izah etmektir. Esas itibariyle mühendis kelimesinin kökü olan, hendese kelimesini büyük ölçüde karşılayan geometri kelimesinin başına hesaplamalı gibi bir kelime getirmek anlamlı değildir. Çünkü zaten geometri hesaplamalı bir çalışma alanıdır. Buradaki hesaplamalı kelimesi daha çok bilgisayar ile işlenen anlamını taşımaktadır. Yani hesaplamalı geometri ile kasıt (computational geometry) bilgisayar ile işlenen geometri çalışmalarıdır. İngilizcede kullanılan computational kelimesi bu anlamda, bilgisayarı (computer) çağırması açısından daha doğru bir tercihtir.
</p>
<p>Geometri ve bilgisayar çalışmalarının kesişim noktası olan hesaplamalı geometri konusuna bilgisayar bilimleri açısından bakıldığında, geometrik problemleri çözen algoritmaların geliştirilmesi ve iyileştirilmesi (optimisation) olarak düşünülebilir.
</p>
<p>Hesaplamalı geometri çalışmalarının ilk çıkışı, <a href="http://www.bilgisayarkavramlari.com/category/bilgisayar-grafigi-computer-graphics/">bilgisayar grafikleri</a> konusunda yapılan çalışmalardır. Örneğin bir bilgisayar animasyonu veya bilgisayar destekli çizim tasarım ve üretim yazılımları (CAD / CAM) hesaplamlı geometrinin doğuşuna ve gelişmesine öncülük etmiştir.
</p>
<p>Günümüzde, ayrıca robot çalışmaları, coğrafi bilgi sistemleri (geographic information systems, GIS) veya entegre devre tasarımı (integrated circuit , IC) gibi konularda da hesaplamalı geometriden yoğun olarak istifade edilmektedir.
</p>
<p>Yapı olarak çoğu bilgisayar bilimleri çalışmasında görüldüğü üzere iki farklı usül görülebilir.
</p>
<p>Terkîbî hesaplamalı hendese (combinatorial computational geometry): Bilgisayar bilimlerinde bulunan terkibi çalışmaların (combinatorial) bir alt grubudur. Genel olarak birden fazla ihtimali içersen sonlu sayıdaki elemalı kümelerin (finite element sets) üzerinde çalışan ve bu kümeler üzerinde ihtimal veya ittihat (birleştirme) (combination) işlemleri yapan çalışmalara, birleştirme anlamında terkip (combinatorial) ismi verilmektedir. Bu alan, bilgisayar bilimleri açısından da önemli bir yere sahiptir.
</p>
<p>Sayısal hesaplamalı hendese (numerical computational geometry): Bilgisayar bilimlerinde, karşılaşılan problemlerin çözülmesi için geliştirilen diğer bir yöntem de sayısal analiz yöntemlerini kullanmaktır. Buna göre sistemden sonlu sayıda noktanın analizi yapılmaktadır. Örneğin sarnıçlama yöntemi ile seçilen noktalar üzerinde hesaplama yapıp sisteme genellemek gibi yöntemler kullanılır.
</p>
<p>Yukarıdaki iki farklı hesaplamalı geometri usulünün farkını anlatmak için bir misal verelim.
</p>
<p>Örneğin aşağıda (üstteki mavi çizimle gösterilen) fonksiyon, basit bir sin(x) fonksiyonudur.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/102811_1912_HesaplamalG1.png" alt=""/>
	</p>
<p>Bu fonksiyonun analitik değerinin sin(x) olduğunu bilmeden, fonksiyona çeşitli değerler vererek şekli çizilirse, alttaki resimde görüldüğü üzere doğrusal bir fonksiyon bulunur. Bu fonksiyon, orjinal fonksiyona yakın ancak tam değildir. Örneğin integral almak gibi basit geometrik işlemler, yukarıdaki ilk fonskiyon üzerinden analitik olarak yapılabileceği gibi, ikinci fonksiyondaki örnek noktalar üzerinden de yapılabilir (bkz. Aradeğer ile integral hesabı (integral by interpolation))</p>

<p class="sayac_bilgi">321 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/10/28/hesaplamali-geometri-computational-geometry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sierpinski Üçgeni (Sierpinski Triangle)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/01/29/sierpinski-ucgeni-sierpinski-triangle/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/01/29/sierpinski-ucgeni-sierpinski-triangle/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 14:05:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>
		<category><![CDATA[Scheme (Lisp)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/01/29/sierpinski-ucgeni-sierpinski-triangle/</guid>
		<description><![CDATA[Orijinal ismi Sierpiński olan Polonyalı matematikçi tarafından 1915 yılında tanımlanan bu üçgen, yapı olarak özyineli (recursive) iç üçgenlerden oluşur. Kısaca üçgenin her parçası, üç adet alt üçgen oluşturacak şekilde bölünür. Örneğin aşağıdaki eşkenar üçgeni ele alalım: Bu üçgenin üç köşesinde üç ayrı üçgen oluşturarak işlemimize başlayabiliriz. Yukarıdaki şekilde görüldüğü üzere 3 adet siyah eşkenar üçgen [...]]]></description>
			<content:encoded><![CDATA[<p>Orijinal ismi Sierpiński olan Polonyalı matematikçi tarafından 1915 yılında tanımlanan bu üçgen, yapı olarak <a href="http://www.bilgisayarkavramlari.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/">özyineli (recursive)</a> iç üçgenlerden oluşur.</p>
<p>Kısaca üçgenin her parçası, üç adet alt üçgen oluşturacak şekilde bölünür.</p>
<p>Örneğin aşağıdaki eşkenar üçgeni ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig1.png" alt="" /></p>
<p>Bu üçgenin üç köşesinde üç ayrı üçgen oluşturarak işlemimize başlayabiliriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig3.png" alt="" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere 3 adet siyah eşkenar üçgen oluştu. Bu üçgenlerin her birisini ilk başta ele aldığımız üçgen gibi bir adım daha ilerleyerek üç parçaya bölmeye çalışalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig5.png" alt="" /></p>
<p>Görüldüğü üzere bölme işlemi sonucunda her alt üçgeninin üç köşesinde, ilk adımda yapılan işleme benzer şekilde 3 ayrı üçgen oluşturulmuştur.</p>
<p>Bu işlem sonsuza kadar devam ettirilebilir. Ancak bilindiği üzere bilgisayar bilimlerinde sonsuz yoktur. Dolayısıyla bu işlem için bir limit belirlenir ve belirlenen limite kadar işlem devam ettirilir.</p>
<p>Sierpinski üçgeninin kodlanması</p>
<p>Yukarıda anlatılan üçgeni, Scheme dilinde programlamaya çalışalım. Bu kodlama sırasında PLT Scheme kullanılacaktır.</p>
<p>Öncelikle gerekli olan bazı bilgilerimizi hatırlayalım. Çizim için draw.ss teachpackinin yüklü olması gerekiyor.</p>
<p>Bunun için Language menüsünden Add Teachpack seçeneğini seçip draw.ss paketini yüklüyoruz.</p>
<p>Ardından basit bir üçgenin scheme ile nasıl çizileceğine bakalım.</p>
<p>Ne yazık ki üçgen çizen hazır bir fonksiyonumuz bulunmuyor. Bunun için üçgeni oluşturan üç ayrı doğruyu ayrı ayrı çizdiren bir fonksiyonu bizim yazmamız gerekiyor.</p>
<p>(define (draw-triangle a b c)( and (draw-solid-line a b)(draw-solid-line b c)(draw-solid-line c a)))</p>
<p>Yukarıdaki draw-triangle fonksiyonu üç ayrı nokta almaktadır. Bu noktaları birleştiren üç ayrı doğruda fonksiyon içerisinde çizilmektedir. Bilindiği üzere draw-solid-line fonksiyonu verilen iki nokta arasında bir doğru çizer. Bu noktalar make-posn yapısında olmalıdır. Örneğin çizim ekranında (ki ekranın sol üst köşesi 0,0 olarak kabul edilir) 100, 150 koordinatlarından 200, 250 koordinatlarına bir doğru çizmek istiyorsak aşağıdaki şekilde komut vermemiz gerekir:</p>
<p>(draw-solid-line (make-posn 100 150) (make-posn 200 250))</p>
<p>Üçgen çizen fonksiyonumuz olduğuna göre artık sirepinski üçgenini kodlamaya geçebiliriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig7.png" alt="" width="514" height="464" /></p>
<p>Kodumuzu yukarıdaki şekilde yazabiliriz. Kodda dikkat edilirse üçgen çizimi sırasında orta nokta bulma yöntemi kullanılmıştır. Buradaki amaç, üçgenin köşelerinde 3 ayrı üçgen elde etme işlemi sırasında üçgenin kenarlarının orta noktalarının birleştirilmesi ile bir ters üçgen oluşturulması olarak düşünülebilir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig8.png" alt="" /></p>
<p>Yukarıdaki şekilde de gösterildiği üzere alsında kenarların orta noktalarını birleştiren bir üçgen çizilmektedir.</p>
<p>İşte üçgeni meydana getiren 3 nokta ve bu noktaların oluşturduğu 3 doğru için orta noktalar bulunmakta ve bulunan bu orta noktaları birleştiren yeni bir üçgen çizilmektedir. Bu noktaları bulan kodumuz, yukarıda verilen mid-point fonksiyonudur. Bu mid-point fonksiyonu da, aritmetik ortalama kullanarak, nokta koordinatlarını toplayıp ikiye bölmekte ve bu işlem için yine yukarıdaki kodda verilen mid fonksiyonunu kullanmaktadır.</p>
<p>Ardından üçgenin 3 alt üçgeni yeniden sierpinski üçgeni çizen fonksiyonumuzu yeni noktalar ile verilmektedir.</p>
<p>Sierpinski üçgeninde dikkat edilirse, üçgeni oluştran 3 nokta (a b ve c) dışında ilave olarak bir n parametresi kullanıyoruz. Bu parametrenin amacı, fonksiyonun belirli bir yerde durmasıdır. Bu sayede kullanıcı, işlemimizin kaç adım gidilebileceğini parametre olarak girebilmekte ve belirtilen adım dolduğunda işlem durmaktadır.</p>
<p>Yukarıdaki kodun çalıştırılması aşağıdaki şekilde olabilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig10.png" alt="" /></p>
<p>Görüldüğü üzere, üçgenin içerisine çizileceği üç nokta belirlenmiştir. Burada noktaları belirlerken, üçgenin eşkenar üçgen olması için ufak bir hesaplama yapılmıştır. Çizim tuvalimiz, 400 400 olarak verilmiş yani bize ekranda 400e 400 pixellik (imgecik) bir alan açılmaktadır. Bu alanı nispeten ortalayan bir üçgende A B ve C noktalarının birleştirilmesi ile teşekkül etmiş olur.</p>
<p>Son olarak sierpinski üçgenini çizen <a href="http://www.bilgisayarkavramlari.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/">özyineli (recursive) fonksiyonumuzu</a> bu üç noktanın koordinatları ve 10 adım gidileceğini belirten 10 sabit sayısı ile çağırıyoruz.</p>
<p>Sonuç olarak ekrana çizilen görüntü aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig11.png" alt="" /></p>
<p>Yukarıdaki şekilde, 10 adım ilerlenmiş ve 10 adım sonunda detaylı bir görüntü oluşmuştur. Örneğin aynı üçgeni 3 parametresi ile, yani 3 adım ilerleyecek şekilde çağırsaydık:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig12.png" alt="" /></p>
<p>Yukarıda verilen biraz daha ilkel halini görecektik.</p>

<p class="sayac_bilgi">657 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/01/29/sierpinski-ucgeni-sierpinski-triangle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bezier Eğrisi Çizen Kod</title>
		<link>http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrisi-cizen-kod/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrisi-cizen-kod/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 19:18:05 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>
		<category><![CDATA[Scheme (Lisp)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrisi-cizen-kod/</guid>
		<description><![CDATA[Soru: Üç noktanın koordinatlarını alarak bu noktalardan geçen eğriyi bezier algoritması ile ekrana çizen kodu yazınız. Çözen : Şadi Evren ŞEKER Çözüm: Bezier eğrisini çizebilmek için ikinci dereceden bir denkleme ihtiyaç duyulur. Burada denklemin ikinci derece olmasının sebebi 3 nokta ile çizim yapılmasının istenmesidir. Öncelikle programımızda kullanacağımız basit temel fonksiyonları kodlayalım: İki nokta verildiğinde bu [...]]]></description>
			<content:encoded><![CDATA[<p>Soru: Üç noktanın koordinatlarını alarak bu noktalardan geçen <a href="http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrileri-bezier-curves/">eğriyi bezier algoritması ile ekrana çizen</a> kodu yazınız.</p>
<p>Çözen : Şadi Evren ŞEKER</p>
<p>Çözüm:</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrileri-bezier-curves/">Bezier eğrisini</a> çizebilmek için ikinci dereceden bir denkleme ihtiyaç duyulur. Burada denklemin ikinci derece olmasının sebebi 3 nokta ile çizim yapılmasının istenmesidir.</p>
<p>Öncelikle programımızda kullanacağımız basit temel fonksiyonları kodlayalım:</p>
<p>İki nokta verildiğinde bu iki noktanın ortasındaki noktayı hesaplayan fonksiyonu kodlayalım:</p>
<p>(define (mid-point a-posn b-posn)</p>
<p>(make-posn</p>
<p>(mid (posn-x a-posn) (posn-x b-posn))</p>
<p>(mid (posn-y a-posn) (posn-y b-posn))))</p>
<p>Yukarıda iki sayının orta değerini (aritmetik ortalamasını) hesaplayan mid fonksiyonunu kullandık. Bu fonksiyonu basitçe iki sayının toplamının yarısı olarak aşağıdaki şekilde tanımlayabiliriz:</p>
<p>(define (mid x y)</p>
<p>(/ (+ x y) 2))</p>
<p>Artık bezier fonksiyonumuzu kodlayabiliriz. Buradaki püf noktası sürekli olarak noktaların arasındaki noktaların hesaplanmasıdır. Bu açıdan bir fraktal üretimine benzetilebilir:</p>
<p>(define ( bezier  p1 p2 p3) (cond</p>
<p>[(too-small? p1 p2 p3) true]</p>
<p>[else (and (draw-solid-disk (mid-point (mid-point p1 p2) (mid-point p2 p3)) 3)</p>
<p>(bezier (mid-point (mid-point p1 p2) (mid-point p2 p3)) (mid-point p2 p3) p3)</p>
<p>(bezier p1 (mid-point p1 p2) (mid-point (mid-point p1 p2) (mid-point p2 p3)))</p>
<p>)]))</p>
<p>Yukarıdaki kod 3 nokta alıp bu noktalar arasındaki mesafe çizilemeyecek kadar küçük oluncaya kadar (bu mesafe aynı zamanda çizimdeki noktaların seyrekliğini de belirtmektedir) ara nokta hesaplamakta ve hesaplanan bu ara noktaları çizmektedir. Yukarıdaki fonksiyonda bitişi belirten too-small? Fonksiyonunu aşağıdaki şekilde tanımlayabiliriz:</p>
<p>(define (too-small? p1 p2 p3)(cond[(&lt;  (abs(- (posn-x p1)  (posn-x p2)))  10) true]</p>
<p>[else false]</p>
<p>))</p>
<p>Burada noktalar arası mesafe 10 veya daha düşükse artık yeni nokta üretimi duracaktır.</p>
<p>Çözüm çalıştırması:</p>
<p>(define p1 (make-posn 50 50))</p>
<p>(define p2 (make-posn 150 150))</p>
<p>(define p3 (make-posn 250 100))</p>
<p>Üç nokta tanımlanmıştır</p>
<p>(start 300 200)</p>
<p>Çizim alanı açılmıştır</p>
<p>(bezier p1 p2 p3)</p>
<p>Ve son olarak fonksiyonumuza üç nokta parametre verilmiştir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/103109_1918_BezierErisi1.png" alt="" /></p>
<p>Kodun çalıştıktan sonra ekranda oluşturduğu çizim aşağıdaki şekilde görülebilir</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/103109_1918_BezierErisi3.png" alt="" /></p>

<p class="sayac_bilgi">230 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrisi-cizen-kod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bezier Eğrileri (Bezier Curves)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrileri-bezier-curves/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrileri-bezier-curves/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 19:04:01 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>
		<category><![CDATA[Bilgisayar Matematiği]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrileri-bezier-curves/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinin bir çalışma alanı olan bilgisayar grafiklerinde kullanılan eğri biçimidir. Bezier eğri çiziminin özelliği parametrik olarak noktalar ile çalışmaları ve verilen noktalara göre bir eğri çizmesidir. Literatürde bézier curve veya bezier eğrisi olarak geçmektedir. İsmi bu hesaplama yöntemini ilk bulan Fransız matematikçiden gelmektedir. Bezier eğrilerinin boyutlarından bahsetmek doğrudur. Buna [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinin bir çalışma alanı olan bilgisayar grafiklerinde kullanılan eğri biçimidir. Bezier eğri çiziminin özelliği parametrik olarak noktalar ile çalışmaları ve verilen noktalara göre bir eğri çizmesidir.  Literatürde <a href="http://www.bilgisayarkavramlari.com/2009/08/10/splines-seritler/">bézier curve veya bezier eğrisi</a> olarak geçmektedir. İsmi bu hesaplama yöntemini ilk bulan Fransız matematikçiden gelmektedir.</p>
<p>Bezier eğrilerinin boyutlarından bahsetmek doğrudur. Buna göre bir bezier eğrisinin derecesi yada boyutu, bu eğriyi meydana getiren nokta sayısıyla ölçülebilir. Örneğin iki noktayı parametre alarak çalışan bir algoritmada sonuç olarak bir doğru çıkacaktır.</p>
<p>Bu çizim için P<sub>0</sub> ve P<sub>1</sub> olmak üzere iki nokta aldığımızı düşünürsek, eğrinin formülü (daha doğrusu doğrunun formülü) aşağıdaki şekilde yazılabilir</p>
<p>B(t) = P<sub>0 </sub> + t(  P<sub>1</sub> &#8211; P<sub>0 </sub>)</p>
<p>Daha açık bir ifadeyle iki noktadan birini başlangıç (P<sub>0</sub>) ve birini bitiş (P<sub>1</sub>) noktası olarak kabul edecek olursak. Bitiş noktasına giden yol üzerindeki her nokta, başlangıç noktasına eklenen ve bitiş noktası istikametindeki bir fark kadar ötelenmiş noktadır.</p>
<p>Bu gösterimi açacak olursak :</p>
<p>(1-t) P<sub>0</sub> + t P<sub>1</sub></p>
<p>Olarak yazmak da mümkündür. Bu yazılım bezier denklemleri açısından daha anlamlıdır. Bunu daha yüksek seviyeli denklemlerde anlayacağız.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Şimdi iki yerine 3 nokta ile teşkil edilen bir bezier eğrisini aynı mantıkla formülleştirmeye çalışalım.</p>
<p>Buna göre eğrimizde sırasıyla P<sub>0</sub>,  P<sub>1</sub> ve  P<sub>2</sub> noktaları olacaktır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/103109_1903_BezierErile1.png" alt="" /></p>
<p>Yukarıdaki şekilde 3 noktadan oluşan ikinci derece eğri gösterilmiştir. Ayrıca eğrinin daha iyi anlaşılabilmesi için 3 noktayı birleştiren klavuz çizgileri de bulunmaktadır. Eğri aslında yukarıdaki iki çizginin arasında kalan şekil olup, eğrinin orjinali aşağıda açık olarak verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/103109_1903_BezierErile3.png" alt="" /></p>
<p>Yukarıdaki bu eğriyi elde etmek için kullanacağımız formül şu şekilde oluşturulur:</p>
<p>B(t) = (1-t)<sup>2</sup> P<sub>0</sub> +2 (1- t) t  P<sub>1</sub> + t<sup>2</sup> P<sub>2</sub></p>
<p>Yukarıdaki denklemde dikkat edilirse binom üçgenindeki (pascal triangle) bulunan katsayılar kullanılmıştır. Bunun sebebi iki bilinmeyenli ikinci derece denklem açılımı olmasıdır.</p>
<p>Benzer şekilde üçüncü derece bezier eğrisi için de binom üçgeninin üçüncü satırı kullanılır:</p>
<p>B(t) = (1-t)<sup>3</sup> P<sub>0</sub> +3 (1- t)<sup> 2</sup> t  P<sub>1</sub> +3 (1-t)  t<sup>2</sup> P<sub>2</sub> + t<sup>3</sup> P<sub>3</sub></p>
<p>Yukarıdaki denklemden de anlaşılacağı üzere t ve (1-t) değişkenlerinin 4 nokta üzerindeki dağılımları birer katsayı olarak gelmektedir.  4 nokta ile çizilebilen bezier eğrilerine aşağıda örnekler verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/103109_1903_BezierErile5.png" alt="" /></p>
<p>Bezier eğrilerinin bir avantajı da bu eğrilerin adım adım çizilebilmesidir. Yani eğrinin oluşturulması sırasında kesikli matematik (discrete math) kullanılabilir. Örneğin 2. Derecen olan bezier eğrisi aşağıdaki şekilde çizilebilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/103109_1903_BezierErile7.png" alt="" /></p>
<p>Yukarıda sadece doğrular çizilerek bir eğri oluşturulmuştur. Buradaki 3 nokta çizim alanı olan karenin 3 köşe noktasıdır ve bu noktalar kullanılarak doğru kaydırılmış ve şekilde eğri ortaya çıkmıştır.</p>
<p>Yukarıdaki formül binom dağılımı kullanılarak ilerletilebilir ve istenilen dereceden eğri çizimi elde edilebilir.</p>

<p class="sayac_bilgi">382 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/10/31/bezier-egrileri-bezier-curves/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rendering (Görselleştirme)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/12/rendering-gorsellestirme/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/12/rendering-gorsellestirme/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 09:02:36 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/08/12/rendering-gorsellestirme/</guid>
		<description><![CDATA[Yazan: Tuğçe Doğan 1. Rendering nedir? Bilgisayar programları yardımıyla bir modelden resim yaratma sürecine &#8220;rendering&#8221; (görselleştirme) adı verilir. Model, 3 boyutlu nesnelerin katı bir biçimde tanımlı bir dil veya veri yapısının tanımıdır. Model, geometri, bakış açısı, (texture) doku özelliği, ışıklandırma ve gölgelendirme bilgileri içerebilir. Resim ise dijital resim veya taramalı/ızgara grafik resimdir. Rendering aynı zamanda [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Yazan: Tuğçe Doğan</p>
<h1><span style="font-family:Times New Roman; font-size:12pt"><em>1. Rendering nedir?<br />
</em></span></h1>
<p style="text-align: justify">Bilgisayar programları yardımıyla bir modelden resim yaratma sürecine &#8220;rendering&#8221; (görselleştirme) adı verilir. Model, 3 boyutlu nesnelerin katı bir biçimde tanımlı bir dil veya veri yapısının tanımıdır. Model, geometri, bakış açısı, <a href="http://www.bilgisayarkavramlari.com/2009/08/09/texture-filtering-doku-suzme/">(texture) doku özelliği</a>, ışıklandırma ve gölgelendirme bilgileri içerebilir. Resim ise dijital resim veya taramalı/ızgara grafik resimdir.</p>
<p style="text-align: justify">Rendering aynı zamanda videonun en son çıktısını oluşturmak için video düzenleme dosyasında yapılan etkileri hesaplama işlemi sürecine verilen addır.</p>
<p style="text-align: justify">3 boyutlu bilgisayar grafiğinin en büyük alt başlıklarından biri olan rendering, modellere ve animasyonlara nihai görünüşlerini vermeden önceki son adımdır. 1970&#8242;ten beri bilgisayar grafiği alanında yaşanan ilerlemelerden ötürü başlı başına bir konu olmuştur.</p>
<p style="text-align: justify">Rendering, farklı dağılımdaki özellikler ve tekniklerle mimaride, video oyunlarında, simülatörlerde, film ve TV özel efektlerinde kullanılmaktadır. Bazısı daha büyük modelleme ve animasyon paketleriyle bütünleşik, bazısı tek başına çalışan, kimisi de açık kaynak projeler olmak üzere ürün bazında pek çok değişik rendering mevcuttur. Esasen rendering, basit fizik, görsel algılama, matematik ve program geliştirme gibi farklı disiplinlerin karışımına dayanan dikkatlice oluşturulmuş bir programdır.</p>
<p style="text-align: justify">
<p style="text-align: center"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr1.jpg" alt="" /></p>
<p style="text-align: center">Şekil 1. Rendering</p>
<ol>
<li>
<div style="text-align: justify"><em>Kullanımı<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Nesnelerin ön- resim hali tamamlandığında (genelde wireframe olarak çizilirler), Bitmap dokusu veya süreçsel dokular, ışıklar, şişkinlik haritalaması ve göreceli konumlandırma rendering ile nesnelere eklenir. Sonuç, müşterinin gördüğü tamamlanmış resimdir.</p>
<p style="text-align: justify">Aşağıdaki resimlerde rendering uygulanmamış ve uygulanmış araçlar bulunmaktadır.</p>
<p style="text-align: center"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr2.jpg" alt="" /></p>
<p style="text-align: center">Şekil 2 . Rendering uygulanmamış araç</p>
<p style="text-align: center"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr3.jpg" alt="" /></p>
<p style="text-align: center">Şekil 3. Rendering uygulanmış araç</p>
<ol>
<li>
<div style="text-align: justify"><em>Özellikleri<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Rendering uygulanmış bir resim, görülebilen birkaç özelliğe göre incelenebilir. Rendering alanındaki araştırmalar ve geliştirmeler aşağıda verilen özellikleri iyileştirmek ve daha etkili hale getirmek amacıyla yapılmaktadır. Bunların bazıları doğrudan belirli algoritma ve tekniklerle ilişkiliyken, öte yandan diğerleri birlikte oluşturulur.</p>
<ul>
<li>
<div style="text-align: justify"><em>Gölgeleme: </em>Işıklandırmayla yüzeyin rengi ve parlaklığının nasıl değiştiğini irdeler.</div>
</li>
<li>
<div style="text-align: justify"><em>Doku haritalama: </em>Yüzeylere ayrıntı uygulanmasıdır.</div>
</li>
<li>
<div style="text-align: justify"><em>Şişkinlik haritalama:</em> Yüzeylerdeki küçük boyuttaki şişkinlikleri benzetimdir.</div>
</li>
<li>
<div style="text-align: justify"><em>Sis:</em> Işığın havadan veya net olmayan bir atmosferden geçerken nasıl donuklaştığını irdeler.</div>
</li>
<li>
<div style="text-align: justify"><em>Gölgeler:</em> Işığı engellemenin etkileridir.</div>
</li>
<li>
<div style="text-align: justify"><em>Yumuşak gölgeler:</em> Kısmen engellenmiş ışık kaynaklarından ötürü değişken karanlıktır.</div>
</li>
<li>
<div style="text-align: justify"><em>Yansıma:</em> Ayna benzeri veya oldukça cilalı yansımadır.</div>
</li>
<li>
<div style="text-align: justify"><em>Saydamlık:</em> Işığın katı cisimleri geçerkenki keskin aktarımıdır.</div>
</li>
<li>
<div style="text-align: justify"><em>Yarı saydamlık:</em> Yüksek oranda dağılmış ışığın katı cisimleri geçerkenki aktarımıdır.</div>
</li>
<li>
<div style="text-align: justify"><em>Kırılma:</em> Saydamlıktan ötürü ışığın eğilmesidir.</div>
</li>
<li>
<div style="text-align: justify"><em>Kırınım:</em> Bir cismi geçerken ışığın eğilmesi, yayılması ve karışmasıdır.</div>
</li>
<li>
<div style="text-align: justify"><em>Kısmi aydınlanma:</em> Yüzeylerin ışık kaynağından doğrudan aydınlanmak yerine, diğer yüzeylerden yansıyan ışıklar ile aydınlanmasıdır.</div>
</li>
<li>
<div style="text-align: justify"><em>Caustics: </em>Yunanca yanık anlamına gelen &#8220;Caustics&#8221;, kısmi aydınlanmanın bir çeşididir. Parlak bir nesneden yansıyan ışık veya saydam bir nesnenin içinden geçen ışığın odaklanmasıyla, başka bir nesne üzerinde parlaklıkların oluşmasıdır.</div>
</li>
<li>
<div style="text-align: justify"><em>Alan derinliği:</em> Odaktaki bir nesnenin önü veya arkasında çok yakında bulunulması durumunda, cisimlerin çok bulanık gözükmesidir.</div>
</li>
<li>
<div style="text-align: justify"><em>Hareket bulanıklığı:</em> Nesnelerin yüksek hızda hareketi veya kameranın hızı yüzünden cisimlerin bulanık gözükmesidir.</div>
</li>
<li>
<div style="text-align: justify"><em>Gerçekçi olmayan fotoğraf rendering&#8217;i:</em> Bir tablo veya çizimmiş gibi gözükmesi amacıyla, sahnelere artistik stilde rendering uygulanmasıdır.</div>
</li>
</ul>
<ol>
<li>
<div style="text-align: justify"><em>Teknikler<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Pek çok rendering tekniği araştırılmasının ardından, kullanılan yazılımlar son resmi elde etmekte farklı tekniklere başvurmaktadır. Sahnedeki bütün ışınları takip etmenin uygulanabilirliği mümkün olmamakla beraber çok fazla zaman alır. Resim oluşturacak büyüklükteki bir sahne örneği bile, eğer akıllıca sınırlandırılmamışsa ışınların takibi yine uzunca bir zaman alır.</p>
<p style="text-align: justify">Bütün ışınları takip etmenin zorluğundan ötürü, birbirinden serbest ışık ulaşımında daha etkili 4 serbest teknik oluşmuştur: ızgaralama (hat tarama rendering&#8217;i), ışın kalıplaması, ışınsallık ve ışın takibi. Izgaralama, sahnedeki nesneleri gelişmiş görsel efektler kullanmadan geometrik olarak resim düzlemine yansıtır. Işın kalıplaması tekniği sahneyi belirli bir noktadan görülüyormuş gibi düşünür ve gözlemlenen resmi sadece geometri ve çok basit yansıma yoğunluğu kanunlarına göre hesaplar, bazen işlem hatalarını azaltmak amacıyla Monte Carlo tekniklerine de başvurabilir.  (Bu yazı Tuğçe Doğan tarafından yazılmış olup bilgisayarkavramlari.com sitesinde yayınlanmaktadır, lütfen alıntı yapılması durumunda gerekli atıfta bulununuz). Işınsallık, yüzeyden yansıyan ışınların dağılışını simule etmek için sonlu eleman matematiğini kullanmaktadır. Işın takibi, ışın kalıplamasına benzer özellikler içerir; ancak daha gelişmiş görsel simülasyon uygular. Işın takibi tekniğinde çoğunlukla Monte Carlo teknikleri daha yavaş fakat daha gerçekçi sonuçlar elde etmek için kullanılır.</p>
<p style="text-align: justify">Çoğu gelişmiş yazılım, yukarıda belirtilen tekniklerden iki ya da daha fazlasını harmanlayarak kullanıcılarına cüzi fiyatta yeterince iyi görüntüler sağlar.</p>
<ol>
<li>
<div style="text-align: justify"><em>Hat tarama ve ızgaralama<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Bir resmin yüksek seviye temsili, piksellerin farklı alanlarındaki elemanları zorunlu olarak içerir. Bu elemanlara ilkel adı verilir. Örnek olarak, taslak çiziminde çizgi parçaları ve eğriler ilkel iken, 3 boyutlu sıvalamada uzaydaki üçgenler ve çokgenler ilkel olabilir.</p>
<p style="text-align: justify">Eğer rendering için piksel- piksel yaklaşımı(resim mertebesi) belli bir görev için çok yavaş veya uygulanamaz ise, ilkel- ilkel yaklaşımı(nesne mertebesi) daha yararlı olabilir. Bu noktada, her bir ilkel için döngüye girilir. Bu ilkellerin hangi pikselleri etkilediği belirlenir ve bu pikseller değiştirilir. Bu işleme &#8220;ızgaralama&#8221; adı verilir ve günümüzdeki tüm grafik kartlarının kullandığı rendering yöntemidir.</p>
<p style="text-align: justify">Izgaralama (ilkel- ilkel yaklaşım), büyük oranda piksel- piksel rendering&#8217;ten hızlıdır. İlk etapta, resmin büyük alanları hiçbir ilkel içermeyebilir; ızgaralama bu alanları yok sayacaktır, fakat piksel- piksel rendering bu noktaları geçmek durumundadır. İkinci etapta, ızgaralama önbellek tutarlılığını geliştirebilir ve resimdeki komşu olmaya meyilli, tek bir ilkel barındıran piksellerden faydalanarak gereksiz işi azaltabilir. Bu nedenlerden ötürü ızgaralama, etkileşimli rendering gerektiği durumlarda genellikle seçilen yaklaşımdır. Bununla beraber, piksel- piksel yaklaşımı çoğunlukla yüksek kalitede resimler üretir ve bu yaklaşımın çok yönlülüğü, ızgaralama alanındaki varsayımları içermediğinden ötürü daha fazladır.</p>
<p style="text-align: justify">Izgaralamanın eski sürümünün en karakteristik özelliği bütün yüzeye tek bir renk ile rendering uygulanmasıdır. Başka bir seçenek olarak, ızgaralama daha karmaşık bir yöntem izlenerek yapılabilir: İlk olarak yüzeyin köşelerine rendering uygulayıp daha sonra bu köşelerin birleştikleri noktaların renklerinin karıştırılarak piksellerin ızgaralanmasıdır. Izgaralamanın bu sürümü, eski yöntemin yerini grafiklerin karmaşık dokumalar olmadan akışını sağlamasından ötürü almıştır. Izgaralamanın bu daha yeni yöntemi grafik kartının gölgeleme fonksiyonlarını daha fazla kullanmak ile beraber, daha fazla performans sağlamaktadır. Çünkü bellekteki daha basit dokumalar daha az yer kaplamaktadır. Kimi zaman tasarımcılar bazı yüzeylerde eski ızgaralama yöntemini tercih ederken, yeni yöntemi açıya bağlı olarak kullanarak hızı arttırıp genel etkiyi kısmadan aynı sonucu alabilmektedirler.</p>
<ol>
<li>
<div style="text-align: justify"><em>Işın kalıplaması<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Işın kalıplaması, ayrıntının çok önemli olmadığı veya işlemsel aşamada daha iyi performans elde etmek adına ayrıntıların sahtesini yapmanın daha etkili olduğu, gerçek zamanlı simülasyonlar olan 3 boyutlu bilgisayar oyunları ve çizgi filmlerde kullanılmaktadır. Bu, genel olarak çok sayıda film karesinin animasyon olarak gösterilmesi gerektiği durumlardır. Meydana gelen yüzeyler,  karakteristik bir düz yüzey görünüşe ve sahnedeki nesnelerin tümü mat bir bitime sahiptir.</p>
<p style="text-align: justify">Modellenen geometri piksel- piksel, hat- hat bakış noktasından dışarı doğru, sanki kalıplar bu bakış noktasından ışıyormuşçasına ayrıştırılır. Bir nesne ile kesişme yaşandığında, o noktadaki renk değeri çeşitli teknikler ile değerlendirilir. En basit halinde, kesişim noktasındaki nesnenin renk değeri o pikselin değeri olur. Renk, dokuma haritasından da belirlenebilir. Daha incelikli diğer yöntem ise renk değerinin bir aydınlanma faktörü ile ayarlanmasıdır; ancak bu yöntemde, simule edilmiş ışık kaynağı ile ilişkisi hesaplanmaz. İşlem hatalarını azaltmak amacıyla farklı yönlerdeki çeşitli ışınları ortalaması alınır.</p>
<p style="text-align: justify">Görsel özelliklerin kaba simülasyonlarına ek olarak başvurulabilir: nesneden çıkan ışının bakış açısına doğru basit bir hesaplama yapılır. Diğer bir hesaplama ışık kaynağından çıkan ışınların açısını bulmak için yapılır. Buna ek olarak, belirtilen yoğunluktaki ışık kaynaklarının da yardımıyla pikselin değeri hesaplanır. Başka bir simülasyon, ışınsallık algoritması kullanılarak çizilmiş aydınlanmayı kullanır.</p>
<ol>
<li>
<div style="text-align: justify"><em>Işınsallık<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Doğrudan aydınlanmış yüzeylerin dolaylı ışık kaynağı gibi kullanılarak diğer yüzeylerin aydınlatılmasının simülasyonun denendiği tekniğe &#8220;ışınsallık&#8221; denir. Bu sayede daha gerçekçi gölgeleme sağlanır ve daha iyi bir kapalı alan ambiyansı yakalanır. Bunun tipik örneği gölgelerin oda köşelerinin kucaklama şeklidir.</p>
<p style="text-align: justify">Simülasyonun görsel ilkesi, verilmiş bir yüzeydeki belirli bir noktadan yayılmış ışınların geniş spektrumlu yönlerde yansıması ve bunun çevresindeki alanı aydınlatmasına dayanır.</p>
<p style="text-align: justify">Simülasyon tekniği zorluk bakımından farklılık gösterebilir. Çoğu rendering kabaca bir ışınsallık tahminine sahiptir ve bunu, bütün sahneyi ambiyans denilen faktör ile hafifçe aydınlatarak yapar. Bununla birlikte, gelişmiş bir ışınsallık tahmini ile yüksek kalitede bir ışın takip algoritması beraber kullanıldığında resimlerin, özellikle de kapalı alan sahnelerinde, ikna edici bir gerçeklik sergilediği görülür.</p>
<p style="text-align: justify">Gelişmiş ışınsallık simülasyonlarında,  yinelemeli sonlu eleman algoritmaları ışığı modeldeki yüzeyler arasında belirli bir yineleme limitine ulaşana kadar ileri- geri yansıtır. Bu sayede, bir yüzeyin renklendirilmesi komşusunun da renklendirilmesini etkiler. Tüm modelin aydınlanma sonuçları (bazen boş alanlarınki de dahil olmak üzere) depolanır ve bunlar, ışın kalıplaması ve ışın takibi modelleri hesaplamalarında ek girdiler olarak kullanılır.</p>
<p style="text-align: justify">Hızlı ışınsallık hesaplamalarının standartlaştırılmasından önce, kimi grafik sanatçıları yanlış ışınsallık adı verilen teknik kullanmışlardır. Bu teknikte, dokuma haritasının ilgili köşelerinin, birleşme yerlerinin ve girintilerinin alanlarını karartılır ve bunlar kendini aydınlatma ve dağılım haritalaması yardımıyla hat tarama sıvalaması için uygulanır. Şu anda bile, gelişmiş ışınsallık hesaplamaları duvardan, zeminden ve tavandan yansıyan ışığın oluşturduğu odanın ambiyansını, bu karmaşık nesnelerin yarattığı ışınsallığın katkısını incelemeden hesaplar veya karmaşık nesneler, ışınsallık hesabı sırasında benzer boyutta ve dokuda daha basit nesneler ile yer değiştirilir.</p>
<p style="text-align: justify">Eğer sahnedeki nesnelerin ışınsallığında ufak bir değişiklik olursa, aynı ışınsallık verisi pek çok film karesi için tekrardan kullanılabilir ve bu sayede ışınsallık, ışın kalıplamasındaki düz yüzeyliği geliştirirken zaman başına sıvalanan genel film karesini ciddi bir şekilde etkilemez. Bu sebepten, ışınsallık öncü gerçek zamanlı sıvalama tekniği olmuştur ve son zamanlarda çekilen uzun metrajlı 3 boyutlu animasyonların oluşturulmasında kullanılmıştır.</p>
<p style="text-align: justify"><em>2.4. Işın takibi<br />
</em></p>
<p style="text-align: justify">Işın takibi tekniğinde amaç, zerrecik olarak yorumlanan ışığın doğal akışını simule etmektir. Işın takibi tekniklerine, rendering denklemini tahmin etmek amacıyla Monte Carlo teknikleri uygulanır. En çok kullanılan ışın takip tekniklerinden bazıları: Patika takibi, Çift Yönlü Patika Takibi veya Metropolis Işık Ulaşımıdır. Bunlara ek olarak melez yöntemler ve Whitted Tarzı Işın Takibi gibi yarı gerçekçi teknikler de mevcuttur. Yöntemlerin çoğu ışığı doğrusal olarak yayılmasına izin vermekle beraber, uygulamaların göreceli uzay-zaman etkilerinin simülasyonu üzerinde etkileri mevcuttur.</p>
<p style="text-align: justify">Işın takibi ile oluşturulacak bir ürünün son hali için, her bir piksel için çeşitli ışınların çekimi yapılır. Optiğin bilinen yasalarından &#8220;geliş açısı ile yansıma açısı birbirine eşit olmalıdır&#8221; ile kırılma ve yüzey pürüzlülüğüyle ilgilenen daha ileri seviye optik yasalarını kullanarak, bu ışınlar ilk nesne ile kesişim yerine ardışık yansımalara kadar takip edilir.</p>
<p style="text-align: justify">Işın bir ışık kaynağı ile karşılaşana dek veya daha muhtemeli, belirli bir seviyedeki yansıma sayısı değerlendirildiğinde, o noktadaki yüzey aydınlanması yukarıda anlatılan teknikler ile yapılır. Daha sonra, çeşitli yansımalar arasındaki yolda meydana gelen değişikler, bakılan noktada bir değer tahmin etmek amacıyla değerlendirilir. Bu işlem her örnek ve her piksel için tekrarlanır.</p>
<p style="text-align: justify">Dağılımsal ışın takibinde, her bir kesişim noktasında ışınlardan çok sayıda üretilir. Öte yandan patika takibinde ise, her bir kesişim noktasında Monte Carlo deneylerinin istatistiksel doğasından faydalanarak sadece bir tane ışın ateşlenir.</p>
<p style="text-align: justify">Temelindeki işleyiş yüzünden, ışın takibi gerçek zamanlı uygulamalarda kullanılabilirliği çok yavaş olduğundan tercih edilmezdi. Hatta yakın geçmişe kadar herhangi kalitedeki bir kısa film için bile çok yavaştı. Buna rağmen, ardışık özel efektlerde ve reklamların yüksek kalite gerektiren kısa bölümlerinde ışın kalıbının kullanımına rastlanabilir.</p>
<p style="text-align: justify">Öte yandan, ayrıntının yüksek olmadığı veya ışın takibinin özelliklerine bağımlı olmadığı iş bölümlerinin hesaplamalarını düşürmek için yapılan iyileştirme çalışmaları, yakın zamanda ışın takibi tekniğinin daha geniş kullanımına yönelik sonuçlar doğurdu. Şu anda, prototip( ilk örnek) aşamasında bile olsa, ışın takibini hızlandıran donanım ekipmanları ve gerçek zamanlı ışın takibi donanımı ve yazılımı kullanan oyun demoları piyasada mevcuttur.</p>
<ol>
<li>
<div style="text-align: justify"><em>Optimizasyon<br />
</em></div>
</li>
<li>
<div style="text-align: justify"><em>Sahne Geliştirme sırasında sanatçının kullandığı optimizasyonlar<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Yüksek sayıda hesaplamalardan ötürü devam etmekte olan bir işe, genellikle sadece o süre içinde yapılmış iş kadar ayrıntılı rendering işlemi uygulanır. Bu sebeple, modellemenin ilk safhalarında hedeflenen çıktının ışınsallık içeren ışın takibi olduğu durumlarda bile, tel kafes (wireframe) ve ışın kalıplaması kullanılabilir. Sahnenin sadece yüksek ayrıntılı parçalarının renderinglenmesi ve geliştirilen o sahnedeki önemli olmayan nesnelerin yok sayılması oldukça yaygındır.</p>
<ol>
<li>
<div style="text-align: justify"><em>Gerçek zamanlı rendering için genel optimizasyonlar<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Gerçek zaman rendering&#8217;i için, bir veya daha fazla yaygın yakınlaştırmayı sadeleştirmek uygundur ve bunlar, en iyi sonucu almak için önceden karar verilmiş parametrelere ayarlanmış ilgili sahnedeki hassas parametrelere ayarlanır.</p>
<ol>
<li>
<div style="text-align: justify"><em>Örnekleme ve filtreleme<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Hangi yöntemi seçerse seçsin tüm rendering sistemlerinin uğraşmak zorunda olduğu örnekleme sorunu vardır. Temel olarak, rendering süreci resim uzayından resimlere, sonlu sayıda piksel kullanarak sürekli bir fonksiyon resmetmeye çalışır. Örnekleme teoreminin sonucu olarak, tarama frekansı nokta oranının iki katı olmalıdır ki bu da resim çözünürlüğüyle orantılıdır. Daha basit terimlerle, bu durum bir resmin bir piksel küçük ayrıntıları sergileyemeyeceğini ifade etmektedir.</p>
<p style="text-align: justify">Eğer orta halli bir rendering algoritması kullanılırsa, resim fonksiyonundaki yüksek frekanslar resmin son halinde kenarlarda bulunacak çirkin çentikli görüntülere(aliasing) neden olacaktır. Çentikli görüntüler kendilerini nesnelerin köşelerinde testeremsi bir yapı olarak gösterecektir. Çentikli görüntüyü ortadan kaldırmak adına, tüm rendering algoritmalarının yüksek frekansları yok etmek için resim fonksiyonunu filtrelemesi gerekmektedir. Bu işleme &#8220;çentik yok etme&#8221; (antialiasing) adı verilir.</p>
<ol>
<li>
<div style="text-align: justify"><em>Matematiksel işleyiş<br />
</em></div>
</li>
<li>
<div style="text-align: justify"><em>Rendering denklemi<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Bu denklem rendering için anahtar teorik konudur. Rendering&#8217;in algılanması zor yönünün en özet ve düzgün halidir. Diğer tüm eksiksiz algoritmalar bu denklemin belirli biçimlerinin çözümleri olarak görülebilir.</p>
<p style="text-align: justify; margin-left: 35pt"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr4.png" alt="" /></p>
<p style="text-align: justify">Yukarıdaki denklemin anlamı, belirli bir konum ve yönde giden ışık (Lo), emilen ışık (Le) ve yansıyan ışığın toplamına eşittir. Yansıyan ışık ise bütün yönlerden gelen ışığın toplamının yüzey yansıması ve ışığın gelme açısıyla çarpımına eşittir. Bir etkileşim noktasıyla dışarı doğru olan ışığı içeri doğru olan ışık ile bağdaştırması nedeniyle, bu denklem sahnedeki tüm ışığın ulaşımını sağlamaktadır.</p>
<ol>
<li>
<div style="text-align: justify"><em>Çift yönlü yansıma dağılım fonksiyonu<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Çift Yönlü Yansıma Dağılım Fonksiyonu, ışığın yüzey ile temasını basit bir model ile ifade eder:</p>
<p style="text-align: justify; margin-left: 35pt"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr5.png" alt="" /></p>
<p style="text-align: justify">Işık teması sıklıkla daha basit modeller ile hesaplanır: dağılım yansıması ve ayna benzeri yansıma. Modellerin ikisi de Çift Yönlü Yansıma Dağılım Fonksiyonu olabilir.</p>
<ol>
<li>
<div style="text-align: justify"><em>Görsellik<br />
</em></div>
</li>
<li>
<div style="text-align: justify"><em>Geometrik görüş<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Rendering, geometrik görüş olarak da bilinen ışık fiziğinin zerre yönüyle özel bir şekilde ilgilidir. En basit seviyede, ışığı etrafta yansıyan zerreler olarak ele almak uygun bir basitleştirmedir. Işığın dalga yönü pek çok sahnede yok sayılacak boyuttadır ve bunların simülasyonu çok zordur. Işığın dalgasal yönünün görülebildiği kayda değer fenomenler, CD ve DVD&#8217;lerin üzerindeki renkler ile LCD&#8217;lerdeki kutuplaşmadır. Her iki etki, eğer gerekirse, yansıma modelinin görünüm kökenli değişimiyle yapılabilir.</p>
<ol>
<li>
<div style="text-align: justify"><em>Görsel algılama<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Her ne kadar az ilgi çekse de, insanoğlunun görsel algılamasının anlaşılması rendering için önemlidir. Bunun asıl nedeni resim gösterimlerinin ve insan algısının sınırlarının olmasıdır. Bir rendering işlemi sınırsıza yakın çeşitlilikte parlaklık ve renk simülasyonu yapabilir ancak bunlar günümüz sinema ekranları ve bilgisayar monitörleriyle görüntülemez, bu sebeple kimi fazlalıklar atılır veya sıkıştırılır. İnsan algısının da belirli sınırları vardır ve gerçeklik yaratmak için geniş çeşitlilikte resimler verilmesine gerek yoktur. Bu durum resimlerin ekrana sabitlenmesi sorununu çözmekte yardımcı olur ve buna ek olarak, ne tür kısa yolların sıvalama simülasyonunda kullanılabileceğine dair yol gösterir. Bu konuya tonlama haritası adı verilir.</p>
<p style="text-align: justify">Rendering sırasında matematiksel anlamda lineer cebir, calculus, sayısal matematik, sinyal işleme ve Monte Carlo teknikleri kullanılır.</p>
<ol>
<li>
<div style="text-align: justify"><em>Donanımsal yön<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Gerçek zamanlı 3 boyutlu rendering sahip olduğu yüksek işleme ve bellek erişimi oranında ötürü fazla güç tüketir. İş yükündeki ve algısal toleranstaki değişkenlik yüzünden, &#8220;güç farkındalığı&#8221; bu güç tüketimini kayda değer bir şekilde optimize edebilir; bunun sonucu olarak geleceğin güç bakımından sınırlı cihazlarından PDA&#8217;lar, tabletler ve telefonlara geçişe kolaylık sağlayabilir.</p>
<p style="text-align: justify">Güç farkındalığı üstünde yapılan araştırmalardan birinde, bu konuyla ilgili önerilen düşük güç tüketimi &#8220;Yaklaşık Görsel Rendering (YGR)&#8221; e dayanmaktadır. YGR sistemi çeşitli algoritmaları ve önceden belirtilmiş kesin parametrelere dayalı işlemsel mekanizmalardaki değişimleri desteklemektedir. Görsel imgelerin sinyal ve gürültü modelleri ile insanın görsel algılaması hakkında önceden sahip olunan bilgi sayesinde en düşük güç tüketiminde elde edilecek kaliteyi sağlayan konfigürasyon seçilir.</p>
<p style="text-align: justify">YGR sistemi kullanılarak elde edilen güç tasarrufu, 3 boyutlu rendering sisteminin en çok güç tükettiği iki evre olan gölgeleme ve doku haritalamasında test edilmiştir. Bu maksatla CORDIC ( iterative COordinate Rotation DIgital Compter) algoritması ile algılanan imgenin uzaysal bağıntısını dinamik olarak zenginleştiren bir program tercih edilmiştir. Tercih edilen algoritmanın ve programın güç tasarrufu tahminini yapmak için, donanım sentezi ve tanınmış 3 boyutlu değerlendirme deneyi ve Quake 2 bilgisayar oyunu kullanılmıştır. Gölgelemede %75.1, doku haritalamasında %73.8 ve CORDIC algoritmasının kullanıldığı rendering&#8217;te %72 oranında güç tasarrufu sağlanmıştır.</p>
<ol>
<li>
<div style="text-align: justify"><em>Gölgeleme<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">3 boyutlu modellerde veya illüstrasyonlarda derinliği karanlık seviyesinde değişiklik yaparak elde etmeye &#8220;gölgeleme&#8221; adı verilir<span style="text-decoration: underline;">.<br />
</span></p>
<ol>
<li>
<div style="text-align: justify"><em>Çizimde gölgeleme<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Kağıt üzerinde çizim yaparken karanlık seviyesini resmedebilmek için koyu renkli bölgelerin daha yoğun, açık renkli bölgelerin az yoğun medya uygulanmasına gölgeleme denir. Aralarında, değişen yakınlıktaki dik çizgilerin ızgarasal model içerisinde çizildiği çapraz bölmelemenin (cross hatching) bulunduğu pek çok gölgeleme yöntemi vardır. Çizgiler birbirine yaklaştıkça daha koyu bir bölge oluşur. Benzer mantıkla, çizgiler birbirinden uzaklaştıkça daha açık renkli bölge oluşur.</p>
<ol>
<li>
<div style="text-align: justify"><em>Bilgisayar grafiğinde gölgeleme<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Bilgisayar grafiğinde gölgeleme, bir rengi ışığa olan açısı ve ışığa olan uzaklığına bağlı olarak gerçekçilik katmak için değiştirme sürecine &#8220;gölgeleme&#8221; denir.</p>
<ol>
<li>
<div style="text-align: justify"><em>Işık kaynağına olan açı<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Gölgeleme, 3 boyutlu bir modelde yüzeylerin renklerini yüzeyin ışık kaynağı ile olan açısına göre değiştirilir.</p>
<p style="text-align: justify; margin-left: 35pt"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr6.png" alt="" /><br />
<img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr7.png" alt="" /><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr8.png" alt="" /></p>
<p style="text-align: center; margin-left: 35pt">Şekil 4. Gölgeleme</p>
<p style="text-align: justify">Yukarıda görülen 3 resimden en soldakinin bütün yüzeyleri rendering&#8217;e maruz bırakılmıştır; ancak hepsi aynı renktedir. Resmin görülmesini daha kolay kılmak adına kenar çizgilerine de rendering uygulanmıştır. Ortadaki resimde kenar çizgileri hariç rendering işlemi uygulanmıştır ve bu durumda bir yüzeyin nerede bitip diğerinin nerede başladığını söylemek zordur. En sağdaki resimde rendering işlemi gölgeleme ile beraber yapılmıştır ve resim daha gerçekçi olup yüzeylerin her biri kolayca görülebilmektedir.</p>
<ol>
<li>
<div style="text-align: justify"><em>Işık kaynakları<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Çevre ışığı: Sahnedeki bütün nesneler eşit olarak ve gölgeleme eklenmeden aydınlatılır.</p>
<p style="text-align: justify">Yönsel ışık: Bu tarz ışık kaynakları, verilen yönden bütün nesneleri eşit olarak aydınlatır. Bu, sahneden sonsuz uzaklıkta ve büyüklükte bir ışık bölgesinin olması gibidir. Gölgeleme vardır; ancak mesafe azalması durumu yoktur.</p>
<p style="text-align: justify">Nokta ışık: Nokta ışığı tek bir noktadan başlar ve dışarı doğru tüm yönlerde yayılır.</p>
<p style="text-align: justify">Sahne ışığı (spotlight): Nokta ışık gibi tek bir noktadan kaynağını alır ve dışarı doğru konik bir yönde yayılır.</p>
<p style="text-align: justify">Alan ışığı: Tek bir düzlemden kaynağını alan &#8220;alan ışığı&#8221; verilen yöndeki tüm nesneleri, o düzlemden başlayarak aydınlatır.</p>
<p style="text-align: justify">Hacim ışığı: Çevrelenmiş bir uzay içindeki nesneleri aydınlatır.</p>
<p style="text-align: justify">Gölgelemenin ara değeri, yukarıda verilmiş ışık kaynaklarından gelen ışınların sahnedeki nesnelerle yaptığı açıya göre hesaplanır. Bu ışık kaynakları sıklıkla bir arada kullanılır. Bu noktada, rendering&#8217;i yapacak program bu ışınların nasıl bir arada kullanılacağının ara değerini hesaplar ve buna göre ekrana yansıtılmak üzere 2 boyutlu bir resim oluşturur.</p>
<ol>
<li>
<div style="text-align: justify"><em>Mesafe azalması<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Teorik olarak paralel konumlu iki yüzey uzak bir ışık kaynağı ile eşit miktarda aydınlanır. Bir yüzey daha uzakta olsa bile göz bunun çoğunu aynı uzayda görür, bu sebepten eşit aydınlanma oluşur.</p>
<p style="text-align: justify; margin-left: 36pt"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr9.jpg" alt="" /><br />
<img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr10.jpg" alt="" /></p>
<p style="text-align: center; margin-left: 36pt">Şekil 5. Gölgelemede mesafe</p>
<p style="text-align: justify">Soldaki resimdeki iki kutunun ön yüzeylerinin renkleri tamamıyla aynıdır. İki yüzün birleştiği yerde hafif farklılık gözlemleniyor olsa da; dikey kenarın iki yüzeyin birleşim yerinden alçakta olmasından ötürü bir göz yanılsamasıdır.</p>
<p style="text-align: justify">Sağdaki resimde öndeki kutunun yüzeyi daha açık, arkadaki kutunun yüzeyi daha koyudur. Aynı zamanda zemin uzağa doğru gittikçe açık renkten koyuya kaymaktadır. Bu mesafe azalması etkisi sayesinde ek ışık kaynağı eklemek zorunda kalmadan daha gerçekçi resimler oluşturulabilir.</p>
<p style="text-align: justify">Mesafe azalması değişik yöntemlerle hesaplanabilir:</p>
<p style="text-align: justify">Doğrusal- Işık kaynağından x birim uzaklıkta olan bir nokta için gelen ışık x birim daha az parlaktır.</p>
<p style="text-align: justify">İkinci dereceden denklem- Bu yöntem gerçek hayatta ışığın işleyişiyle aşağı yukarı aynıdır. Biri diğerinden ışık kaynağına iki kat daha uzakta olan bir nokta, dört kat daha az aydınlanmış olur.</p>
<p style="text-align: justify">N&#8217; inci kuvvet- Işık kaynağından x birim uzaklıkta olan bir nokta, ışığın 1/(x^n) kadarını alır.</p>
<p style="text-align: justify">Bunlar dışında herhangi bir matematiksel fonksiyon da kullanılabilir.</p>
<ol>
<li>
<div style="text-align: justify"><em>Düz yüzey ve pürüzsüz yüzey gölgelemesi<br />
</em></div>
</li>
</ol>
<p style="text-align: center"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr11.png" alt="" /></p>
<p style="text-align: center">Şekil 6. Gölgeleme çeşitleri</p>
<p style="text-align: center">
<ol>
<li>
<div style="text-align: justify"><em>Düz yüzey gölgelemesi<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Düz yüzey gölgeleme 3 boyutlu bilgisayar grafiğinde bir aydınlatma tekniğidir. Bu teknikte nesnenin her bir çokgeninin, çokgenin normali, konumu ve ışık kaynağının yoğunluğu dikkate alınarak gölgeler. Daha gelişmiş gölgeleme tekniklerinin çok pahalı olduğu durumlarda hızlı rendering için kullanılırdı. Ancak 20. yüzyılın sonlarına doğru piyasadaki çok pahalı olmayan grafik kartlarının zaten hızlı olan pürüzsüz gölgelemeyi sağlamaya başlamasıyla birlikte, görüntü kalitesi olarak başarılı olmayan düz yüzey gölgelemenin hız sebepleriyle tercih edilmesini gereksiz kıldı.</p>
<p style="text-align: justify">Düz yüzey gölgelemenin en büyük dezavantajı az köşegenli modellere fasetalı bir görüntü vermesidir. Bazen bu durum kutusal modellerde avantajlı olabilmektedir. Sanatçılar kimi zaman yarattıkları katı modelin köşegenlerine bakmak için düz yüzey gölgelemeyi kullanır. Daha gerçekçi ve gelişmiş aydınlatma ve gölgeleme teknikleri Gouraud gölgelemesi ve Phong gölgelemesidir.</p>
<ol>
<li>
<div style="text-align: justify"><em>Gouraud gölgelemesi<br />
</em></div>
</li>
</ol>
<p style="text-align: justify">Gouraud gölgelemesi: 3 boyutlu grafikte, 1970 yılında Henri Gouraud tarafından geliştirilen ve gölgeli bir yüzeyi her bir üçgenin köşelerindeki renk ve aydınlamayı dikkate alarak hesaplayan bir tekniktir. Bir sonraki başlıkta bahsedilecek olan Phong gölgelemesinden daha hızlı olan Gouraud gölgelemesi, en basit rendering tekniğidir. Üçgenlerin noktalarındaki yüzey normalleri, üçgenin yüzeyi boyunca ortalaması alınmış RGB değerlerini oluşturmak için kullanılır.</p>
<ol>
<li>
<div style="text-align: justify"><em>Phong gölgelemesi<br />
</em></div>
</li>
</ol>
<p style="text-align: justify"><a href="http://www.bilgisayarkavramlari.com/2008/12/23/phong-aydinlatmasi-phong-reflection/">Phong gölgelemesi:</a> 1970&#8242;lerin ortalarında Phong Bui- Thong tarafından geliştirilmiş, gölgeli bir yüzeyi her bir pikseldeki renk ve aydınlanmayı kullanarak hesaplayan bir tekniktir. Gouraud gölgelemesinden daha gerçekçi sonuçlar verir; ancak daha fazla işleme ihtiyaç duyar. Üçgenlerin noktalarının yüzey normalleri her bir pikselin yüzey normalini hesaplamak için kullanılır ve sonuç olarak her bir piksel için daha hassas RGB değerleri yaratılır.</p>
<p style="text-align: justify">
<p style="text-align: center"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081209-0902-renderinggr12.png" alt="" /><span style="text-decoration: underline;"><br />
</span></p>
<p style="text-align: center">Şekil 7. Nükleer reaktörün Phong gölgelendirmesi ile 86 adet ışık kaynağı kullanılarak görselleştirilmesi</p>
<p style="text-align: center">
<p><em>Sonuç<br />
</em></p>
<p style="text-align: justify"><em>Görüntünün ham halinin bilgisayar tarafından işlenmesi işlemi olan rendering; mimarlık, bilgisayar oyunları, simulatörler, sinema ve televizyon gibi digital ortamlara oldukça hakimdir. Tasarımın en çarpıcı noktalarından biri olan rendering yoğun ve uzmanlık gerektiren işlemleri ile çarpıcı sonuçlar elde edilmesini sağlamaktadır. Bu projede, rendering basamakları ayrıntılarıyla anlatılmış olup ek olarak gölgelendirme üzerinde durulmuştur. Günümüzün gelişen teknolojisi ve bu teknolojiye ulaşımın kolaylaşması ile birlikte geçmişteki ilkel grafik kullanımının yerini çok daha gelişmiş görseller almıştır.<br />
</em></p>
<p style="text-align: justify"><em>Kaynaklar<br />
</em></p>
<p style="text-align: justify"><span style="color:black"><em>http://www.absoluteastronomy.com/topics/Shading<br />
</em></span></p>
<p style="text-align: justify"><span style="color:black"><em>http://www.answers.com/topic/phong-shading-technology<br />
</em></span></p>
<p style="text-align: justify"><span style="color:black"><em>http://www.answers.com/topic/gouraud-shading-technology<br />
</em></span></p>
<p><span style="color:black"><em>http://en.wikipedia.org/wiki/Rendering_(computer_graphics)<br />
</em></span></p>
<p style="text-align: justify"><span style="color:black"><em>http://www.ingentaconnect.com/content/klu/vlsi/2005/00000039/F0020001/05273790<br />
</em></span></p>

<p class="sayac_bilgi">373 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/12/rendering-gorsellestirme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Splines (Şeritler)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/10/splines-seritler/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/10/splines-seritler/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 14:00:00 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/08/10/splines-seritler/</guid>
		<description><![CDATA[Yazan : Selim Aksu 1.Spline Çizim terminolojisinde Spline, noktalar kümesi tarafından belirlenen düzgün bir eğri oluşturmak için kullanılan esnek bir şerittir. Şerit boyunca dağıtılmış birçok küçük ağırlıklar, çizim masasında sabit konumda duran bir eğri oluşmasını sağlarlar. Spline&#8217;lar genelde endüstriyel tasarımda kullanılır. (otomobil, gemi, uçak, uzay aracı gövdeleri, ürün tasarımı gibi.) 1.1 Spline Eğrileri Spline eğrileri [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Selim Aksu</p>
<h1><span style="font-family:Times New Roman; font-size:18pt">1.Spline<br />
</span></h1>
<p>Çizim terminolojisinde Spline, noktalar <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">kümesi</a> tarafından belirlenen düzgün bir eğri oluşturmak için kullanılan esnek bir şerittir. Şerit boyunca dağıtılmış birçok küçük ağırlıklar, çizim masasında sabit konumda duran bir eğri oluşmasını sağlarlar.<span style="color:black"><br />
</span>Spline&#8217;lar genelde endüstriyel tasarımda kullanılır. (otomobil, gemi, uçak, uzay aracı gövdeleri, ürün tasarımı gibi.)</p>
<p><span style="font-size:14pt">1.1 Spline Eğrileri<br />
</span></p>
<p>Spline eğrileri de temelde bu yolla oluşturulur.Matematiksel olarak bu tür bir eğri, ilk ve ikinci türevleri, farklı eğri bölümlerinde sürekli olan kübik <a href="http://www.bilgisayarkavramlari.com/2009/08/10/polynomials-cokterimliler/">polinom fonksiyonu</a> ile tanımlanır.Bilgisayar grafiklerinde Spline eğrileri, parçaların sınırlarında süreklilik şartlarını sağlayan polinom kısımları tarafından biçimlendirilen bileşik eğrilerdir.</p>
<p><span style="font-size:14pt">1.2 Kontrol Noktaları<br />
</span></p>
<p>Spline eğrileri, kontrol noktası adı verilen koordinat konum kümeleri verilerek tanımlanırlar. Kontrol noktaları, eğrinin genel şeklini belirler ve sürekli parametrik <a href="http://www.bilgisayarkavramlari.com/2009/08/10/polynomials-cokterimliler/">polinom fonksiyon</a> parçalarında kullanılır. Bunun iki yolu vardır.</p>
<p><span style="font-size:14pt">1.3 Spline Gösterimlerinin Sınıflandırılması<br />
</span></p>
<ol>
<li><span style="font-size:13pt">Aradeğerleme (Interpolation) Spline&#8217;ları<br />
</span></li>
</ol>
<p>Eğri tüm kontrol noktalarından geçer.</p>
<ol>
<li>Yaklaşım (Approximation) Spline&#8217;ları</li>
</ol>
<p>Eğrinin tüm kontrol noktalarından geçme şartı yoktur</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit1.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<p><span style="font-size:14pt">1.4 Spline Eğri ve Yüzeylerinin Önemi<br />
</span></p>
<ul>
<li><span style="font-family:Times New Roman; font-size:12pt">Spline eğrileri, tanımlanıp değiştirilebilirler.<br />
</span></li>
<li><span style="font-family:Times New Roman; font-size:12pt">Yeni kontrol noktaları eklenebilir.<br />
</span></li>
<li><span style="font-family:Times New Roman; font-size:12pt">Kontrol noktaları silinebilir.<br />
</span></li>
<li><span style="font-family:Times New Roman; font-size:12pt">Etkileşimli grafik ve CAD paketlerinde kullanıcılar, tasarımları üzerinde fare ile değişiklikler yaparak istenen modelleri elde edebilirler.<br />
</span></li>
</ul>
<h2><span style="font-family:Times New Roman; font-size:18pt">2.Bezier Splines<br />
</span></h2>
<ul>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Fransız otomobil üreticisi Renaultbünyesinde P. Bezier1962 yılında geliştirmiştir.<br />
</span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Bezier eğrileri, eğriler üzerinde daha çok manipülasyon yapabilmek amacıyla geliştirilmiştir.<br />
</span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Karmaşık araba yüzey tasarımlarını gerçekleştirmek için kullanılan bir araçtır.<br />
</span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Bezier eğrisi bir kontrol poligonu tarafından kontrol edilmektedir<br />
</span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">İkinci derece (quadratic)ve kubik (cubic)Bézier eğrileri en çok kullanılanlardır.<br />
</span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Daha yüksek dereceli eğrileri kullanması daha masraflıdır<br />
</span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Karmaşık şekiller gerektiği zaman düşük dereceli Bézier eğrileri birbirine yamanır.<br />
</span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Ayrıca, Bézier eğrilerinin programlanması da oldukça kolaydır. Bu tür özelliklerinden dolayı, Bézier eğrileri bilgisayar grafiklerinde yaygın olarak kullanılır.<br />
</span></li>
</ul>
<p>n+1 adet Pikontrol noktası tarafından kontrol edilen B(t) eğrisi aşağıdaki genel Beziereğri formu ile verilmiştir;</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit2.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<p>Burada</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit3.png" alt="" /></p>
<p>n. derece Bernstein polinomlarıolarak adlandırılır.</p>
<p>Not: (t0= 1 and (1 ‐t)0= 1)</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit4.png" alt="" /><span style="font-size:18pt"><br />
</span>: binom katsayıdır (2 terimli)</p>
<p>Polinomunderecesi, kullanılan kontrol noktalarının sayısından bir azdır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit5.png" alt="" /></p>
<ul>
<li><span style="color:black">Pinoktaları Béziereğrisinin kontrol noktalarıdır.<br />
</span></li>
<li><span style="color:black">P0 ile başlayan ve Pnile son bulan noktaların çizgilerle birleşmesinden şekillenen poligon Bézierpoligonu ya da kontrol poligonu olarak adlandırılır. Bézier poligonunun </span>dış bükeyyapısı Béziereğrisini içerir.<span style="color:black"><br />
</span></li>
<li><span style="color:black">Eğri P0&#8242;da başlar ve Pn&#8217;de biter. Buna uç nokta interpolasyonözelliği (endpoint interpolation property) denir.<br />
</span></li>
<li><span style="color:black">Eğri sadece ve sadece kontrol noktaları aynı doğru çizgi üzerinde ise düz çizgi olabilir.<br />
</span></li>
<li><span style="color:black">Eğrinin başlangıcı (sonu) Bézierpoligonunun ilk (son) bölümüne teğettir.<br />
</span></li>
<li><span style="color:black">Eğri her hangi bir noktadan 2 eğri halinde parçalanabilir.Bu parçalanma ile herhangi birçok alt eğri elde edilebilir. Bunların her biri Bézier eğrisidir.</span><span style="font-size:13pt"><br />
</span></li>
</ul>
<p><span style="font-size:14pt">2.1 Linear Bezier Spline<br />
</span></p>
<p>Doğrusal bir Béziereğrisinin t=[0,1] arası formu doğrusal interpolasyon formuna dönüşür.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit6.png" alt="" /><span style="color:gray"><em><br />
</em></span></p>
<p>P(t) = (1-t)P<sub>0</sub> + tP<sub>1</sub> ,     0 ≤ t ≤ 1</p>
<h2><span style="font-family:Times New Roman; font-size:14pt">2.2 Quadratic Bezier Spline<br />
</span></h2>
<p>Eğri P0,P1&amp; P2 noktalarından geçer.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit7.png" alt="" /></p>
<ul>
<li><span style="color:black; font-size:12pt"><span style="font-family:Times New Roman">2. derece Bézier eğrileri için t=[0</span>‐<span style="font-family:Times New Roman">1] arasında Q0ve Q1adında ara noktalar oluşturulabilir.<br />
</span></span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Q0noktası P0ileP1 arasında değişir ve doğrusal birBézier eğrisi oluşturur.<br />
</span></li>
<li><span style="color:black; font-family:Times New Roman; font-size:12pt">Q1noktası P1ileP2arasında değişir ve doğrusal birBézier eğrisi oluşturur.<br />
</span></li>
<li>
<div><span style="color:black; font-family:Times New Roman; font-size:12pt">B(t)noktasıQ0&#8242;dan Q1&#8242;e değişir ve 2. derece bir Bézier eğrisi tanımlar.<br />
</span></div>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit8.png" alt="" /><span style="color:black; font-family:Times New Roman; font-size:12pt"><br />
</span></li>
</ul>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit9.png" alt="" /></p>
<p>2.3  <span style="font-size:14pt">Cubic Bezier Spline<br />
</span></p>
<p>Eğri P0,P1, P2&amp; P3 noktalarından geçer.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit10.png" alt="" /></p>
<p><span style="color:black">Kubikform için;<br />
</span></p>
<ul>
<li><span style="color:black">Doğrusal Béziereğrisi tanımlayan Q0, Q1&amp; Q2ara noktaları ve<br />
</span></li>
<li>
<div><span style="color:black">2. derece Béziereğrisi tanımlayan R0&amp; R1noktaları oluşturulur.<br />
</span></div>
</li>
</ul>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit11.png" alt="" /></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit12.png" alt="" /></p>
<p><span style="font-size:14pt">2.4 Yüksek Derece Eğriler<br />
</span></p>
<p><span style="color:black; font-size:14pt">Dördüncü Derece Bezier Eğrisi<br />
</span></p>
<p>Eğri P0,P1, P2, P3 &amp; P4 noktalarından geçer.</p>
<p>Dördüncü derece form için;<span style="font-size:13pt"><br />
</span></p>
<ul>
<li><span style="color:black">Doğrusal Béziereğrisi tanımlayan Q0, Q1, Q2&amp;Q3 ara noktaları ve<br />
</span></li>
<li><span style="color:black">2. derece Bézier eğrisi tanımlayan R0,R1&amp;R2 noktaları ve<br />
</span></li>
<li>
<div><span style="color:black">Kubik Bézier eğrisi oluşturan S0&amp;S1 noktaları oluşturulur.<br />
</span></div>
</li>
</ul>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit13.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit14.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<p><span style="font-size:14pt">2.5 Polinom Formu<br />
</span></p>
<ul>
<li><span style="color:black">Bazen Bézier eğrisini Bernstein polinomlarının toplamı olarak ifade etmek yerine </span>polinom olarak ifade etmek<span style="color:black"> daha kolaydır.<br />
</span></li>
<li><span style="color:black">Binom teoreminin eğrinin tanımına uygulanması ve tekrar düzenlenmesi aşağıdaki formu verir:</span></li>
</ul>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit15.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit16.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<ul>
<li><span style="color:black">Eğer CjB(t)&#8217;ninbir çok kez hesaplanmasından önce hesaplanırsa bu yöntem pratik ve verimli olur.<br />
</span></li>
<li><span style="color:black">Fakat yüksek dereceli eğriler sayısal kararsızlık konusunda sorunlu olabileceği için dikkatli olmak gerekir. (Bu durumda de Casteljau&#8217;nun algoritması kullanılmalıdır).</span></li>
</ul>
<p><span style="color:black; font-size:14pt">2.6 Bezier Eğrileri Dezavantajları<br />
</span></p>
<ul>
<li><span style="color:black">Eğrinin kontrol noktalarından geçmemesi kontrolü ve hassasiyeti zora sokar.<br />
</span></li>
<li>
<div><span style="color:black">Bezier eğrisinde lokal değişiklik yapılamaz.<br />
</span></div>
</li>
</ul>
<p><span style="font-size:14pt">2.7 Bezier Yüzeyleri<br />
</span></p>
<p>Üç boyutlu Beziér yüzeylerinin (diğer adıyla Beziér yamalarının) tanımlanması için Beziér eğrilerinin gösteriminin genelleştirilmesi mümkündür. Matematiksel olarak, <a href="http://www.bilgisayarkavramlari.com/2008/09/05/cokgen-poligon-polygon/">üç boyutlu yüzeyler</a> iki eğrinin <a href="http://www.bilgisayarkavramlari.com/2009/01/14/kartezyen-carpim-cartesian-product/">kartezyen çarpımından</a> elde edilebilir. Dolayısıyla, (<span style="font-family:Times New Roman"><em>m</em></span>+1)(<span style="font-family:Times New Roman"><em>n</em></span>+1) kontrol noktası tarafından belirtilen Beziér yüzeyinin gösterimi şöyle olacaktır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit17.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit18.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<p>16 kontrol noktası ile tanımlanmış bir Beziér yüzeyi<span style="font-size:13pt"><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit19.png" alt="" /><span style="font-size:13pt"><br />
</span></p>
<p>16 kontrol noktasıyla tanımlanmış üç boyutlu Beziér yüzeyi<span style="font-size:13pt"><br />
</span></p>
<p><span style="font-size:18pt">3. B-Spline Eğrileri<br />
</span></p>
<ul>
<li><span style="color:black">B‐Splineeğrileri Bezier eğrilerinin genelleştirilmiş halidir<br />
</span></li>
<li><span style="color:black">En önemli avantajı lokal kontrole izin vermesidir<br />
</span></li>
<li><span style="color:black">Bir temel teoriye göre verilen derece, düzgünlük ve alan bölümünde bütün eğri fonksiyonları B‐Spline eğrilerin aynı derece, düzgünlük ve alan bölümünde doğrusal kombinasyonu olarak ifade edilebilir.<br />
</span></li>
<li><span style="color:black">B‐Splineadı Isaac Jacob Schoenberg tarafından konulmuştur ve &#8220;basis spline&#8221;nın kısaltılmış formudur.<br />
</span></li>
<li><span style="color:black">B‐Splineeğriler de Boor algoritması ile sayısal denge içinde değerlendirilebilirler.<br />
</span></li>
<li><span style="color:black">B‐Spline eğrileri yüksek dereceliBézier,eğrilerinde karşılaşılan problemleri polinomun derecesini yükseltmeden önleyebilir.<br />
</span></li>
<li>
<div><span style="color:black">Elde edilen eğrinin derecesi kullanılan kontrol noktası sayısından bağımsızdır.<br />
</span></div>
</li>
</ul>
<pre><code><span style="font-size:12pt"><span style="font-family:Times New Roman">Verilen n+1 sayıda kontrol noktası;Pitarafından tanımlanan B</span><span style="font-family:Cambria Math">‐</span><span style="font-family:Times New Roman">Splineeğri tanımı:
</span></span></code></pre>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit20.png" alt="" /></p>
<p>Burada <em>N<span style="font-size:10pt">i,k</span>(u) </em>Cox ve de Boor tarafından 1972&#8242;de önerilen B<span style="font-family:Cambria Math">‐</span>Splinefonksiyonlarıdır.</p>
<p><em>k </em>parametresi B<span style="font-family:Cambria Math">‐</span>Splineeğrinin derecesini (k<span style="font-family:Cambria Math">‐</span>1) kontrol eder ve genellikle kontrol noktası sayısından bağımsızdır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit21.png" alt="" /></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit22.png" alt="" /></p>
<p>U<span style="font-size:10pt">i </span>parametrik düğüm (knots) ya da düğüm değerleri olarak adlandırılır. Açık bir eğri için şu formda verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit23.png" alt="" /><span style="color:black"><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit24.png" alt="" /><span style="color:black"><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit25.png" alt="" /><span style="color:black"><br />
</span></p>
<p>(k<span style="font-family:Cambria Math">‐</span>1) derecesinde eğriyi (n+1) sayıda kontrol noktası ile tanımlamak için (n+k+1) sayıda düğüm (knots) gereklidir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit26.png" alt="" /><span style="color:black"><br />
</span></p>
<p>Bu eşitlik gösterirki;</p>
<p>Doğrusal eğri için en az 2</p>
<p>2.derece eğri için en az3</p>
<p>Kubik eğri için ise en az 4 kontrol noktası gerekir.</p>
<p>Aşağıdaki şekiller B<span style="font-family:Cambria Math">‐</span>Splinefonksiyonlarının şekillerini göstermektedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit27.png" alt="" /></p>
<p>Doğrusal fonksiyon</p>
<p>k=2</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit28.png" alt="" /></p>
<p>2.derecefonksiyon</p>
<p>k=3</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit29.png" alt="" /></p>
<p>kubikfonksiyon</p>
<p>k=4</p>
<p><span style="font-size:14pt">3.1 B<span style="font-family:Cambria Math">‐</span>Spline Eğrileri Özellikleri<br />
</span></p>
<p>Kontrol noktası sayısı polinomunderecesinden bağımsızdır.<span style="font-size:13pt"><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit30.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black; font-family:Times New Roman; font-size:12pt"><em>Sarı noktalar: verteks</em><br />
</span></p>
<p><span style="color:black; font-family:Times New Roman; font-size:12pt"><em>Sol üst ok: Doğrusal k=2</em><br />
</span></p>
<p><span style="color:black; font-family:Times New Roman; font-size:12pt"><em>Sağ üst ok: 2.derece B-spline k=3</em><br />
</span></p>
<p><span style="color:black; font-family:Times New Roman; font-size:12pt"><em>Sağ orta ok: Kubik B-spline k=4</em><br />
</span></p>
<p><span style="color:black; font-family:Times New Roman; font-size:12pt"><em>Sağ alt ok: 4.derece B-spline k=5</em><br />
</span></p>
<ul>
<li>B<span style="font-family:Cambria Math">‐</span>Splinederecesi yükseldikçe yakın kontrol noktasına etkisi azalır.</li>
<li>B<span style="font-family:Cambria Math">‐</span>Splinedaha iyi lokal kontrole izin verir.</li>
<li>Eğrinin şekli kontrol noktalarını hareket ettirerek ayarlanabilir.</li>
<li>
<div>Local kontrol: Bir kontrol noktası sadece k bölümüne etki eder.<span style="color:black"><br />
</span></div>
</li>
</ul>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit31.png" alt="" /><span style="color:gray"><br />
</span></p>
<p><span style="font-size:14pt">3.2 Bezier/B<span style="font-family:Cambria Math">‐</span>Spline Eğrileri<br />
</span></p>
<p>BezierHarmanlama Fonksiyonları (BezierBlendingFunctions); B<span style="font-size:11pt">i,n<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit32.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p>B<span style="font-family:Cambria Math">‐</span>splineHarmanlama Fonksiyonları (B<span style="font-family:Cambria Math">‐</span>splineBlendingFunctions); N<span style="font-size:11pt">i,k<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit33.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit34.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p><span style="color:black"><em>Sağ alt okla gösterilen nokta hariç diğer 3 belirtilen nokta hareket ettiriliyor.</em><br />
</span></p>
<p><span style="font-size:14pt">3.3 Uniform B<span style="font-family:Cambria Math">‐</span>Spline Eğrileri<span style="color:black"><br />
</span></span></p>
<p>B<span style="font-family:Cambria Math">‐</span>splineuniformolduğu zaman n dereceli B<span style="font-family:Cambria Math">‐</span>splinefonksiyonlarıbirbirinin kaydırılmış kopyasıdırlar. Eğri boyunca, düğümler (knots) eşit mesafelerde yerleşmiştir.</p>
<p><span style="font-size:18pt">4. Rasyonel Eğriler ve NURBS(Rational Curves and NURBS)<span style="color:gray"><br />
</span></span></p>
<ul>
<li>Rasyonel polinomlar hem analitik hem de polinom eğrileri düzenli (uniform) tanımlayabilirler.</li>
<li>Eğriler kontrol noktalarının ağırlıkları (weighting) değiştirilerek düzenlenebilirler.</li>
<li>
<div>Genel kullanılan şekli NURBS (Non<span style="font-family:Cambria Math">‐</span>Uniform Rational B<span style="font-family:Cambria Math">‐</span>spline)&#8217;dür.</div>
</li>
</ul>
<p><span style="font-size:14pt">4.1 Rasyonel Bezier Eğrileri<br />
</span></p>
<p>Rasyonel Bézier formunda, rastgele şekiller elde edilebilmesi için kontrol noktalarına ayarlanabilir ağırlıklar eklenmiştir.</p>
<p>n + 1 kontrol noktası; P<span style="font-size:11pt">i </span>için rasyonel Bézier eğrisi:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit35.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p>Pay kısmında yeralanterim ağırlıklı BernsteinşeklindeBéziereğrisidir ve paydada ise Bernsteinpolinomlarınınağırlıklı toplamları yer almaktadır.<span style="font-size:18pt"><br />
</span>Daha basitçe;</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit36.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p>formunda ifade edilebilir.</p>
<p><span style="font-size:14pt">4.2 Rasyonel B<span style="font-family:Cambria Math">‐</span>Spline Eğrileri<span style="color:gray"><br />
</span></span></p>
<p>Bir rasyonel eğri 2 polinomun birbirine oranı olarak tanımlanmıştır.Rasyonel eğride kontrol noktaları homojen koordinatlarda tanımlanmıştır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit37.png" alt="" /><span style="color:gray"><br />
</span></p>
<p>dolayısıyla rasyonel B<span style="font-family:Cambria Math">‐</span>Spline eğrisi:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit38.png" alt="" /><span style="color:gray"><br />
</span></p>
<p>formunda ifade edilebilir.</p>
<p><em>R<span style="font-size:11pt">i,k</span>(u) </em>rasyonel B<span style="font-family:Cambria Math">‐</span>Spline taban fonksiyonlarıdır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit39.png" alt="" /><span style="color:gray"><br />
</span></p>
<p>Yukarıdaki eşitlik gösterir ki;<em>R<span style="font-size:11pt">i,k</span>(u) </em>rasyonel olmayan taban fonksiyonları;</p>
<p><em>N<span style="font-size:11pt">i,k</span>(u)&#8217;</em>nıngenelleştirilmiş halidir.</p>
<p><em>R<span style="font-size:11pt">i,k</span>(u) </em>eşitliğine <em>h<span style="font-size:11pt">i</span></em>=1 yerleştirilmesi durumunda rasyonel olmayan formla</p>
<p>yaklaşık aynı özellikleri gösterir.</p>
<p><span style="font-size:14pt">4.3 NURBS<br />
</span></p>
<ul>
<li>Düzgün olmayan, rasyonel B<span style="font-family:Cambria Math">‐</span>Spline formülü olup, matematik modelidir ve genellikle eğriler ve yüzeyler oluşturmak ve göstermek için bilgisayar grafiğinde kullanılır.</li>
<li>NURBS eğrisi , derecesi, bir set ağırlıklı kontrol noktaları ve düğüm vektörü (knot vector) ile tanımlanır.</li>
<li>NURBS eğrileri ve yüzeyleri hem B<span style="font-family:Cambria Math">‐</span>spline hem de Bézier eğrileri ve yüzeylerinin genelleştirilmiş halidir.</li>
<li>En önemli farkı kontrol noktaları ağırlıklarıdır ki bu NURBS&#8217;ü rasyonel eğri (rational curve) yapar.</li>
<li>NURBS eğrileri sadece bir parametrik yön içerir (genellikle s ya da u olarak adlandırılır). NURBS yüzeyleri iki parametrik yön içerir.</li>
<li>
<div>NURBS eğrileri konik eğrilerin tam modellenmesini sağlar.</div>
</li>
</ul>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit40.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p>NURBS eğrisinin genel formu;</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit41.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">k: kontrol noktası (Pi) sayısı<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">wi: ağırlıklar (weigths)<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Payda normalleme faktörüdür (normalizingfactor).<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">NURBS genel formu aşağıdaki gibi ifade edilebilir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit42.png" alt="" /><span style="color:gray; font-family:Times New Roman; font-size:12pt"><em><br />
</em><br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit43.png" alt="" /><span style="color:gray; font-family:Times New Roman; font-size:12pt"><br />
</span></p>
<p><span style="color:gray"><em><br />
</em></span>R<span style="font-size:11pt">in</span>fonksiyonları, rasyonel taban fonksiyonları (rational basis functions) olarak adlandırılır.<span style="color:gray"><em><br />
</em><br />
</span></p>
<p><span style="font-size:14pt">4.4 NURBS Örnekleri<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit44.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p>Uniform düğüm (knot) vektörü</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit45.png" alt="" /><span style="color:gray; font-size:13pt"><br />
</span></p>
<p>Uniformolmayan (nonuniform) düğüm (knot) vektörü</p>
<p><span style="font-size:14pt">4.5 NURBS&#8217;ün Gelişimi<br />
</span></p>
<ul>
<li><span style="color:black">Boeing: TigerSystem<span style="font-family:Cambria Math">‐</span>979<br />
</span></li>
<li><span style="color:black">SDRC: Geomod<span style="font-family:Cambria Math">‐</span>1993<br />
</span></li>
<li><span style="color:black">University of Utah: Alpha<span style="font-family:Cambria Math">‐</span>1<span style="font-family:Cambria Math">‐</span>1981<br />
</span></li>
<li>
<div><span style="color:black">Endüstri Standartları : IGES, PHIGS, PDES,Pro/E, vb.<span style="font-size:13pt"><br />
</span></span></div>
</li>
</ul>
<p><span style="font-size:14pt">4.6 NURBS Avantajları<br />
</span></p>
<ul>
<li>Rasyonel olmayan (non<span style="font-family:Cambria Math">‐</span>rational)B<span style="font-family:Cambria Math">‐</span>spline olduğu kadar rasyonel (rational) ve rasyonel olmayan (non<span style="font-family:Cambria Math">‐</span>rational)Bezier eğrileri ve yüzeyleri için gerçek genelleştirme sağlar.</li>
<li>Hem standart analitik şekillerin matematiksel formlarını (koniler, 2. derece eğriler, döndürme yüzeyler, vb.) hem de serbest şekilli eğriler ve serbest şekilli yüzeyleri hassasiyetle modeller.B<span style="font-family:Cambria Math">‐</span>splineeğriler sadece konik eğrileri modeller.</li>
<li>NURBS eğrisini parametrenin değişik değerlerinde hesaplayarak eğri 2 ya da 3 boyutlu kartezyen uzayda tanımlamak mümkündür.</li>
<li>Aynı durum NURB yüzeyleri için de geçerlidir.</li>
<li>Kontrol noktası ve ağırlık kullanımı ile birçok şeklin tasarımı esnekliğini sağlar.</li>
<li>Ağırlıkları artırmanın eğriyi kontrol noktasına çekme etkisi vardır.</li>
<li>Güçlü bir alet takımı vardır. (düğüm ekleme/detaylandırma/kaldırma/derece yükseltme/bölme/vb.)</li>
<li>Döndürme ve öteleme gibi perspektif transformasyonlarda değişmezdir (invariant). Bu işlemleri sadece kontrol noktalarına uygulamak yeterlidir.</li>
<li>Makul hızda ve dengeli hesaplanabilirlerdir.</li>
<li>Şekilleri saklarken az hafızaya gereksinim gösterirler.</li>
</ul>
<p><span style="font-size:18pt">5. Catmull-Rom Splines<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit46.png" alt="" /></p>
<p>Eğri bütün kontrol noktalarından geçmelidir.Bir noktaı hesaplamak için Şekilde görüldüğü gibi o noktanın iki yanınadki noktalar gereklidir.P1,P2,P3,P4 gibi kontrol noktaları ve t değeriyle noktanın yeri şu şekilde hesaplanabilir.</p>
<p><span style="font-family:Times New Roman">q(t) = 0.5 *( </span><span style="font-family:Trebuchet MS">(</span><span style="font-family:Times New Roman">2 * P</span><span style="font-family:Trebuchet MS"><em><sub>1</sub></em></span><span style="font-family:Times New Roman">) +</span><br />
<span style="font-family:Trebuchet MS"> </span><br />
<span style="font-family:Times New Roman">(-P</span><span style="font-family:Trebuchet MS"><em><sub>0 </sub></em></span><span style="font-family:Times New Roman">+ P</span><span style="font-family:Trebuchet MS"><em><sub>2</sub></em></span><span style="font-family:Times New Roman">) * t +<br />
(2*P</span><span style="font-family:Trebuchet MS"><em><sub>0 </sub></em></span><span style="font-family:Times New Roman">- 5*P</span><span style="font-family:Trebuchet MS"><em><sub>1</sub></em></span><span style="font-family:Times New Roman"> + 4*P</span><span style="font-family:Trebuchet MS"><em><sub>2 </sub></em></span><span style="font-family:Times New Roman">- P</span><span style="font-family:Trebuchet MS"><em><sub>3</sub></em></span><span style="font-family:Times New Roman">) * t<sup>2</sup> +<br />
(-P</span><span style="font-family:Trebuchet MS"><em><sub>0 </sub></em></span><span style="font-family:Times New Roman">+ 3*P</span><span style="font-family:Trebuchet MS"><em><sub>1</sub></em></span><span style="font-family:Times New Roman">- 3*P</span><span style="font-family:Trebuchet MS"><em><sub>2 </sub></em></span><span style="font-family:Times New Roman">+ P</span><span style="font-family:Trebuchet MS"><em><sub>3</sub></em></span><span style="font-family:Times New Roman">) * t<sup>3</sup>)<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit47.png" alt="" /></p>
<p><span style="font-size:18pt">6. Hermite Splines<br />
</span></p>
<p>Oluşturmak için her kontrol noktasının tanjant vektörlerini gerektirir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit48.png" alt="" /></p>
<p>P1:Eğrinin başlangıç noktası.</p>
<p>P2:Eğrinin bitiş noktası</p>
<p>T1:Eğrinin başlangıç noktasından nasıl çıktığının tanjantu</p>
<p>T2:Eğrinin bitiş noktasına nasıl vatdığının tanjantı</p>
<p>Bu 4 vektör ve Hermite Fonksiyonları bir araya getirildiğinde;</p>
<p>h1(s) =  2s^3 &#8211; 3s^2 + 1</p>
<p>h2(s) = -2s^3 + 3s^2</p>
<p>h3(s) =   s^3 &#8211; 2s^2 + s</p>
<p>h4(s) =   s^3 &#8211;  s^2</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit49.png" alt="" /></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit50.png" alt="" /></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit51.png" alt="" /></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit52.png" alt="" /></p>
<p><span style="font-size:18pt">7. Beta-splines:<br />
</span></p>
<p>Otomatik süreklilik ve tanjant ile kavis uzunluğu üzerinde tam manasıyla kontrol sağlar.</p>
<p><span style="font-size:18pt">8. Programlama Örnekleri</span></p>
<p><span style="font-size:14pt">C++( Bu C++ programı ekrana bezier eğrisi çizer.4 nokta var.2&#8242;si kontrol noktası)<br />
</span></p>
<p style="margin-left: 36pt"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit53.png" alt="" /></p>
<p style="margin-left: 36pt">
<p style="margin-left: 36pt">
<p>#include &lt;GL/glut.h&gt;</p>
<p>GLfloat ctrlpts[4][3] = {<br />
{-0.4, 0.4,  0.0},<br />
{-0.1, 2.0,  0.0},<br />
{ 0.1,-2.0,  0.0},<br />
{ 0.4, 0.4,  0.0}<br />
};<br />
void display()<br />
{<br />
GLint k;<br />
glClear(GL_COLOR_BUFFER_BIT);<br />
glColor3f(0.0, 0.0, 1.0);<br />
glBegin(GL_LINE_STRIP);<br />
for (k= 0; k&lt;= 50; k++)<br />
glEvalCoord1f((GLfloat) (k)/50.0);<br />
glEnd();<br />
glPointSize(5.0);<br />
glColor3f(1.0, 0.0, 0.0);<br />
glBegin(GL_POINTS);<br />
for (k= 0; k&lt; 4; k++)<br />
glVertex3fv(&amp;ctrlpts[k][0]);<br />
glEnd();</p>
<p>glutSwapBuffers();<br />
}<br />
void init()<br />
{<br />
glClearColor(1.0,1.0,1.0,0.0);<br />
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, *ctrlpts);<br />
glEnable(GL_MAP1_VERTEX_3);<br />
}<br />
int main(int argc, char ** argv)<br />
{<br />
glutInit(&amp;argc, argv);<br />
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);<br />
glutInitWindowSize(400,400);<br />
glutInitWindowPosition(50, 50);<br />
glutCreateWindow(&#8220;Bezier Eğrisi&#8221;);<br />
init();<br />
glutDisplayFunc(display);<br />
glutMainLoop();<br />
return 0;<br />
}</p>
<ol style="margin-left: 36pt">
<li><span style="font-size:14pt">C++(Mouse ile işaretlenen noktalardan geçen bezier eğrisi çizdirmek.)<br />
</span></li>
</ol>
<p>#include &#8220;gl/glut.h&#8221;</p>
<p>static int Genislik = 500;<br />
static int Yukseklik =500;</p>
<p>GLfloat cpts[4][3];<br />
int ncpts = 0;</p>
<p>void Baslat(void)<br />
{<br />
glClearColor(1.0,1.0,1.0,0.0);<br />
glEnable(GL_MAP1_VERTEX_3);<br />
}</p>
<p>void Goster(void)<br />
{<br />
glClear(GL_COLOR_BUFFER_BIT);<br />
glColor3f(1.0, 0.0, 0.0);<br />
glPointSize(5.0);<br />
}<br />
void EgriCiz(){<br />
glColor3f(0.0, 0.0, 0.0);<br />
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &amp;cpts[0][0]);<br />
glMapGrid1f(30, 0.0, 1.0);<br />
glEvalMesh1(GL_LINE, 0, 30);<br />
glFlush();</p>
<p>}</p>
<p>void FareDinle(GLint button,GLint action,GLint x,GLint y)<br />
{<br />
float wx, wy;<br />
if(button==GLUT_LEFT_BUTTON &amp;&amp; action==GLUT_DOWN){<br />
wx = (2.0 * x) / (float)(Genislik &#8211; 1) &#8211; 1.0;<br />
wy = (2.0 * (Yukseklik &#8211; 1 &#8211; y)) / (float)(Yukseklik &#8211; 1) &#8211; 1.0;<br />
if (ncpts ==4)<br />
return;<br />
cpts[ncpts][0] = wx;<br />
cpts[ncpts][1] = wy;<br />
cpts[ncpts][2] = 0.0;<br />
ncpts++;<br />
glBegin(GL_POINTS);<br />
glVertex3f(wx, wy, 0.0);<br />
glEnd();<br />
glFlush();<br />
}<br />
else<br />
if(button==GLUT_RIGHT_BUTTON)<br />
EgriCiz();<br />
}</p>
<p>void main(int argc, char** argv)<br />
{<br />
glutInit(&amp;argc, argv);<br />
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);<br />
glutInitWindowSize(Genislik,Yukseklik);<br />
glutInitWindowPosition(100, 150);<br />
glutCreateWindow(&#8220;İnteraktif Eğri Çiz&#8221;);<br />
glutDisplayFunc(Goster);<br />
glutMouseFunc(FareDinle);<br />
Baslat();<br />
glutMainLoop();<br />
<span style="font-family:Verdana">}<br />
</span></p>
<p><span style="font-size:14pt"><span style="color:black"><em>8.3 Java(</em></span>İnteraktif  2D Bezier splines)<span style="color:black"><br />
</span></span></p>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">import java.awt.*;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">import java.awt.event.*;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">import java.util.StringTokenizer;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public class Bezier extends java.applet.Applet
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  implements MouseMotionListener{
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">Image buffImage;          Graphics buffGraphics;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">int n = 4, n1,  w,h,h1,w2;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">double[] Px,Py;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public void drawFun(){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  double step = 1./w2, t = step;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  double[] B = new double[n1], Bo = new double[n1], Bold = new double[n1];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  B[1] = Bo[1] = h1;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  Color[] iColor = {Color.gray, Color.red, new Color(0f,.7f,0f),
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   Color.blue, Color.magenta, new Color(0f,.8f,.8f), new Color(.9f,.9f,0f) };
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  for (int k = 1; k &lt; w2; k++){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   System.arraycopy(B,1,Bold,1,n);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   System.arraycopy(Bo,1,B,1,n);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   for (int j = 1; j &lt; n; j++)        //  basis functions calculation
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    for (int i = j+1; i &gt; 0; i--)
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">     B[i] = (1-t)*B[i] + t*B[i-1];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   for (int m = 1; m &lt;= n; m++){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    buffGraphics.setColor(iColor[m % 7]);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    buffGraphics.drawLine(w2+k-1, h1-(int)Bold[m], w2+k, h1-(int)B[m] );}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   t += step;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  }
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public void drawSpline(){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  double step = 1./w2, t = step;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  double[] Pxi = new double[n], Pyi = new double[n];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  int X,Y, Xold = (int)Px[0], Yold = h1-(int)Py[0];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  buffGraphics.clearRect(0,0, w2, h);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  buffGraphics.setColor(Color.blue);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  for (int i = 0; i &lt; n; i++){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   X = (int)Px[i];  Y = h1-(int)Py[i];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   buffGraphics.drawRect(X-1,Y-1, 3,3);}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  if ( n &gt; 2 ){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   int Xo = Xold, Yo = Yold;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   for (int i = 1; i &lt; n; i++){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    X = (int)Px[i];  Y = h1-(int)Py[i];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    buffGraphics.drawLine(Xo,Yo, X,Y);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    Xo = X;  Yo = Y;}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  }
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  buffGraphics.setColor(Color.red);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  for (int k = 1; k &lt; w2; k++){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   System.arraycopy(Px,0,Pxi,0,n);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   System.arraycopy(Py,0,Pyi,0,n);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   for (int j = n-1; j &gt; 0; j--)        //  points calculation
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    for (int i = 0; i &lt; j; i++){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">     Pxi[i] = (1-t)*Pxi[i] + t*Pxi[i+1];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">     Pyi[i] = (1-t)*Pyi[i] + t*Pyi[i+1];}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   X = (int)Pxi[0];  Y = h1-(int)Pyi[0];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   buffGraphics.drawLine(Xold,Yold, X,Y );
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   Xold = X; Yold = Y;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   t += step;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  }
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public void init() {
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  w = Integer.parseInt(getParameter("width"));
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  h = Integer.parseInt(getParameter("height"));  h1 = h-1; w2 = w/2;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  String s = getParameter("N"); if (s != null) n = Integer.parseInt(s);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  n1 = n+1;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  Px = new double[n];  Py = new double[n];
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  s=getParameter("pts");
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  if (s != null){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   StringTokenizer st = new StringTokenizer(s);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   for (int i = 0; i &lt; n; i++){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    Px[i] = w2*Double.valueOf(st.nextToken()).doubleValue();
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">    Py[i] = h1*Double.valueOf(st.nextToken()).doubleValue();}}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  else{
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   Px[0] = .1*w2; Px[1] = .1*w2; Px[2] = .9*w2; Px[3] = .9*w2;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   Py[0] = .1*h1; Py[1] = .9*h1; Py[2] = .9*h1; Py[3] = .1*h1;}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  buffImage = createImage(w, h);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  buffGraphics = buffImage.getGraphics();
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  setBackground(Color.white);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  buffGraphics.clearRect(0,0, w, h);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  addMouseMotionListener(this);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  drawFun();
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  drawSpline();
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public void destroy(){ removeMouseMotionListener(this); }
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public void mouseMoved(MouseEvent e){}  //1.1 event handling
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public void mouseDragged(MouseEvent e) {
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  int x = e.getX();  if (x &lt; 0) x = 0;  if (x &gt; w2-3) x = w2-3;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  int y = h1 - e.getY();  if (y &lt; 0) y = 0;  if (y &gt; h1) y = h1;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  int iMin = 0;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  double Rmin = 1e10, r2,xi,yi;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  for (int i = 0; i &lt; n; i++){
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   xi = (x - Px[i]); yi = (y - Py[i]);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   r2 = xi*xi + yi*yi;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">   if ( r2 &lt; Rmin ){ iMin = i; Rmin = r2;}}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  Px[iMin] = x; Py[iMin] = y;
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  drawSpline();
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  repaint();
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public void paint(Graphics g) {
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">  g.drawImage(buffImage, 0, 0, this);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">//  showStatus( " " + x +"  " + y);
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">}
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">public void update(Graphics g){ paint(g); }
</span></code></pre>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">}
</span></code></pre>
<pre><code><span style="font-size:14pt"><span style="font-family:Times New Roman">8.4 C++</span>
						<span style="font-family:Times New Roman">
						</span></span></code></pre>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/081009-1358-splineserit54.png" alt="" /></p>
<pre><code><span style="font-family:Times New Roman; font-size:12pt">
				</span></code></pre>
<p><span style="font-family:Times New Roman; font-size:12pt">GLfloat ctrlpoints[4][4][3] = {<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{{-1.5, -1.5, 4.0}, {-0.5, -1.5, 2.0},<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{0.5, -1.5, -1.0}, {1.5, -1.5, 2.0}},<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{{-1.5, -0.5, 1.0}, {-0.5, -0.5, 3.0},<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{0.5, -0.5, 0.0}, {1.5, -0.5, -1.0}},<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{{-1.5, 0.5, 4.0}, {-0.5, 0.5, 0.0},<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{0.5, 0.5, 3.0}, {1.5, 0.5, 4.0}},<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{{-1.5, 1.5, -2.0}, {-0.5, 1.5, -2.0},<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{0.5, 1.5, 0.0}, {1.5, 1.5, -1.0}}<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">};<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">void display(void)<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">int i, j;<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glPushMatrix ();<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glRotatef(15.0, 1.0, 1.0, 1.0);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">for (j = 0; j &lt;= maxJ; j++) {<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glColor3f(1.0, 0.0, 0.0);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glBegin(GL_LINE_STRIP);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">for (i = 0; i &lt;= 30; i++)<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glEvalCoord2f((GLfloat)i/30.0, (GLfloat)j/8.0);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glEnd();<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glColor3f(0.0, 0.0, 1.0);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glBegin(GL_LINE_STRIP);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">for (i = 0; i &lt;= 30; i++)<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glEvalCoord2f((GLfloat)j/8.0, (GLfloat)i/30.0);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glEnd();<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">}<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glPopMatrix ();<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glFlush();<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">}<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">void init(void)<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">{<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glClearColor (0.0, 0.0, 0.0, 0.0);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4,<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">0, 1, 12, 4, &amp;ctrlpoints[0][0][0]);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glEnable(GL_MAP2_VERTEX_3);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glEnable(GL_DEPTH_TEST);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">glShadeModel(GL_FLAT);<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">}<br />
</span></p>
<p style="margin-left: 36pt">
<p style="margin-left: 36pt"><span style="color:black; font-size:13pt"><br />
</span></p>

<p class="sayac_bilgi">355 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/10/splines-seritler/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Texture Filtering (Doku Süzme)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/09/texture-filtering-doku-suzme/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/09/texture-filtering-doku-suzme/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 02:35:51 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/08/09/texture-filtering-doku-suzme/</guid>
		<description><![CDATA[Yazan : Mine Bilgiç Bilgisayar grafiklerinde, doku süzme civardaki doku imgeciklerinin rengini kullanarak (doku kaplanmış) texture mapped imgecikler için doku rengini belirlemek için kullanılan bir yöntemdir. Kısaca, doku imgeciklerini daha küçük imgecikler haline bölerek beraber harmanlar. Doku süzme için bir başka terim ise doku yumuşatmadır. Doku süzmenin birçok yöntemi vardır. Bu yöntemlerin miktarı, hesap karmaşıklığı [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Mine Bilgiç</p>
<p style="text-align: justify">Bilgisayar grafiklerinde, doku süzme civardaki doku imgeciklerinin rengini kullanarak (doku kaplanmış) texture mapped imgecikler için doku rengini belirlemek için kullanılan bir yöntemdir. Kısaca, doku imgeciklerini daha küçük imgecikler haline bölerek beraber harmanlar. Doku süzme için bir başka terim ise doku yumuşatmadır. Doku süzmenin birçok yöntemi vardır. Bu yöntemlerin miktarı, hesap karmaşıklığı ve görüntü kalitesi arasında farklı koordinasyonlar yaratır.</p>
<p style="text-align: justify">Doku filtrelemesi bir küme ayrık örneklemdeki en yakın noktaların değerini bulma girişimi olduğu için bir ara değeri bulma(iç değerlendirme) biçimidir.</p>
<h2>1 SÜZME İHTİYACI</h2>
<p style="text-align: justify">Doku kaplama(texture mapping) süreci sırasında, bir &#8220;texture lookup&#8221; doku üzerindeki her <a href="http://www.bilgisayarkavramlari.com/2007/11/24/piksel-benek-imgecik-pixel/">imgeciğin (pixel)</a> merkezinin nereye düştüğüne bakar.  Doku kaplanmış yüzey keyfi uzaklıkta olabileceği için ve izleyen kişisinin açı ve yönelimine bağlı olduğu için genellikle bir <a href="http://www.bilgisayarkavramlari.com/2007/11/24/piksel-benek-imgecik-pixel/">imgecik (pixel)</a> direkt olarak başka bir doku imgeciğine karşılık gelmeyebilir. En iyi imgecik (pixel) rengine karar verebilmek için bazı filtreleme şekilleri uygulanmalıdır. Yetersiz veya hatalı süzme, görüntüde hatalar oluşmasına yol açar. Bir imgecik ve o imgeciği ekranda temsil eden doku imgecik/imgecikleri birbirlerine farklı şekillerde karşılık gelebilirler. İzleyenin görüş açısından doku kaplanmış yüzeyin konumuna bağlı olarak her durum için farklı tür bir süzme gerekebilir. Dünyada kare bir düzlemin üzerinde bir doku kaplanmış kare, bazı görüş açılarına bir ekran imgeciğinin boyutu bir doku imgeciğinin boyutuyla tıpatıp aynıdır. Bir yandan, texture magnification(doku büyütme) olarak bilinen bir işlem ile ekran imgeciklerinden daha büyük olan doku imgecikleri uygun bir şekilde büyütülürler. Öte yandan, her doku imgeciği bir imgecikten küçüktür ve bu yüzden bir imgecik birçok doku imgeciğini kapsar. Bu durumda, texture minification vasıtasıyla kaplanmış doku imgecikleri baz alınarak uygun bir renk seçilmelidir. Grafik <a href="http://www.bilgisayarkavramlari.com/2007/04/14/api-application-programming-interface/">Application Programming Interface(API)-</a>Uygulama Programı Arabirimi(UPA) olan OpenGL, prgramcının minification ve magnification filtreleri için değişik seçenekler ayarlamasına imkan sağlar.</p>
<p style="text-align: justify">İmgeciklerin ve doku imgeciklerinin tıpatıp aynı boyutta olduğu halde bile, bir imgecik bir doku imgeciği ile ister istemez uymayabilir, hizalanamamış olabilir ve dört komşu doku imgeciğine kadar, bu imgeciklerin bazı kısımlarını kaplıyor olabilir. Bundan ötürü bazı filtreleme şekilleri hala gereklidir.</p>
<h2>2 MIPMAPPING</h2>
<p style="text-align: justify">Üç boyutlu bilgisayar grafikleri doku süzmesinde,  mipmap&#8217;ler önceden hesaplanmış, ana dokuya eşlik eden en iyi şekildeki görüntü derlemeleridir ve insan etkileşiminden dolayı bilgisayar ekranında gördüğümüz çizgiler, eğriler ve simgelerin kenarlarının tırtıklı gözükmesini azaltmak ve rendering hızını arttırmak içindir. Yaygın olarak üç boyutlu bilgisayar oyunları, uçuş simülatörleri ve diğer üç boyutlu görüntüleme sistemlerinde kullanılır. Teknik &#8220;mipmapping&#8221; olarak bilinir. MIP harfleri Latincede &#8220;multum in parvo&#8221; kelimelerinin kısatmasıdır ve &#8220;küçük alanda daha çok&#8221; manasına gelir. Hafızada daha fazla alana ihtiyaç duyarlar.</p>
<p style="text-align: justify">Minmapping, texture minification sırasında filtreleme işlerinden bazılarını kurtarmak için kullanılan standart bir tekniktir. Texture magnification sırasında, herhangi bir imgecik için düzeltilmesi gereken doku imgeciği sayısı dört veya daha azdır, oysa minification sırasında doku kaplanmış çokgen uzaklaştıkça potansiyel olarak dokunun tamamı tek bir imgeciğe düşebilir. Bu doku kaplanmış imgeciklerin hepsini okumayı ve imgecik rengine doğru bir şekilde karar verebilmek için değerlerini birleştirmeyi gerektirecektir. Yüksek maliyetli bir işlemdir. Bu durumu minmapping dokuyu ön filtreleyerek ve onu tek bir piksele varan küçük boyutlarda saklayarak önler. Doku kaplanmış yüzey uzaklaştıkça, uygulanmış doku ön filtrelenmiş daha küçük hale dönüşür. Minmap&#8217;in farklı boyutları &#8216;seviyeler&#8217; de tanımlanır. 0.seviye en büyük boyuttadır(izleyiciye daha yakın mesafede kullanılır) ve artarak giden diğer boyutlar mesafelerin daha büyümesiyle kullanılırlar.</p>
<h2>3 FİLTRELEME METOTLARI</h2>
<h3>3.1 NEAREST NEIGBOR INTERPOLATION (EN YAKIN KOMŞU ARADEĞERLEME)</h3>
<p><a href="http://www.bilgisayarkavramlari.com/2008/11/17/knn-k-nearest-neighborhood-en-yakin-k-komsu/">Nearest-neigbor interpolation</a> en hızlı ve ilkel filtreleme metotlarından biridir. İmgecik rengi için, imgeciğin merkezine en yakın doku imgeciğinin rengini kullanır. Hızlı olduğu kadar, yakınlaşmada kaplama bloklama olarak bilinen artifactsler çoğunlukla gözükür.</p>
<h3>3.2 NEAREST-NEIGHBOR WITH MIPMAPPING</h3>
<p>Bu metot <a href="http://www.bilgisayarkavramlari.com/2008/11/17/knn-k-nearest-neighborhood-en-yakin-k-komsu/">nearest neigbor inter polation</a> ile beraber mipmapping kullanır. Öncelikle mesafeye göre en yakın mipmap seviyesi seçilir, daha sonra imgecik rengini elde edebilmek için merkezi en yakın doku imgeciğinden örnek alınır.Aliasing ve shimmerring problemlerini biraz azaltır.</p>
<h3>3.3 BILINEAR FILTERING (İKİ DOĞRUSAL SÜZME)</h3>
<p>Bilinear filtering bir adım daha ilerisidir. Bu metotta imgecik merkezine en yakın dört doku imgeciğinden örnek alınır (en yakın minmap seviyesinde), ve bunların renkleri uzaklığa göre ağırlıklı ortalama ile birleştirilir. Bdoku imgecikleri arasındaki geçişleri yumuşatır. Bilinear filtering neredeyse her zaman minmapping ile birlikte kullanılır, ama onsuzda kullanılabileceği gibi aynı aliasing ve shimmering problemlerini yaşar.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/080909-0235-texturefilt1.jpg" alt="" /></p>
<h3><a name="Trilinear_filtering"></a>3.4 TRİLİNEAR FİLTERİNG (ÜÇ DOĞRUSAL SÜZME)</h3>
<p>Trilinear filtering, minmaplenmiş bilinear filtrelenmiş görüntülerde oluşan bozuklukların çoğunu giderir. Bir mipmap seviyesinden diğerine sunuş halindeki geçişlerde görüntülerin sınırlarındaki kalitede gözle görünür bir düzelme sağlar.</p>
<p>Trilinear filtering, iki en yakın mipmap seviyelerinde(bir yüksek ve bir düşük kalite) bilinear filtering ve &#8220;texture lookup&#8221; yaparak daha sonra sonuçları <a title="Linear interpolation" href="http://en.wikipedia.org/wiki/Linear_interpolation">doğrusal</a> aradeğerleyerek bu sorunu çözer. İzleyiciye olan uzaklık arttıkça doku kalitesinde bir dizi ani düşüş yerine, yumuşak bir bozulma ile sonuçlanır. Tabi ki, seviye 0&#8242; a en yakın sadece bir mipmap seviyesi mevcuttur ve algoritma bu nokta da bilinear filtering&#8217;e dönüşür.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/080909-0235-texturefilt2.jpg" alt="" /></p>
<h3><a name="Anisotropic_filtering"></a>3.5 ANISOTROPIC FILTERING (EŞYÖNSÜZ SÜZME)</h3>
<p><a href="http://www.bilgisayarkavramlari.com/2009/08/09/esyonsuz-suzme-anisotropic-filtering/">Eşyönsüz süzme</a> yürürlülükteki tüketilen üç boyutlu grafik kartlarında bulunan en yüksek kalitedeki süzme yöntemidir. Üç doğrusal ve iki doğrusal süzmelerde kare şeklinde örnek bir doku ancak tam karşıdan doğru bir açıyla izlendiğinde düzgün gözükür, bu sorundan dolayı eşyönsüz süzme yayılmıştır.</p>
<p>Bu sorun doku kaplanmış yüzeye farklı bir açıyla bakılmasında aşırı buğulanmayı doğurur. Örneğin; çok genel bir durum, bir mesafe boyunca zeminin uzaklaşma durumudur. <a href="http://www.bilgisayarkavramlari.com/2009/08/09/esyonsuz-suzme-anisotropic-filtering/">Eşyönsüz süzme</a> bu sorunu bakış açısına göre doğru bir yamuğa örnekleyerek çözer. Yeni oluşan örnek daha sonra son rengi üretebilmek için üç doğrusal süzülür.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/080909-0235-texturefilt3.jpg" alt="" /></p>
<h1>KAYNAKÇA</h1>
<p>http://en.wikipedia.org/wiki/Texture_filtering</p>
<p>http://en.wikipedia.org/wiki/Mipmap</p>
<p>http://en.wikipedia.org/wiki/Anisotropic_filtering</p>
<p>http://blogs.msdn.com/virtualearth3d/archive/2009/04/19/anisotropic-filtering.aspx</p>
<p>Birinci bölümdeki fotoğraflar tarafımca HalfLife2 oyunundan alınmıştır.</p>

<p class="sayac_bilgi">474 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/09/texture-filtering-doku-suzme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eşyönsüz Süzme (ANISOTROPIC FILTERING)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/09/esyonsuz-suzme-anisotropic-filtering/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/09/esyonsuz-suzme-anisotropic-filtering/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 02:34:23 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/08/09/esyonsuz-suzme-anisotropic-filtering/</guid>
		<description><![CDATA[Yazan : Mine Bilgiç Eşyönsüz süzme, üç boyutlu bilgisayar grafiklerinde kamera açısına bağlı olarak dokunun iz düşümünün dik olmadığı durumlarda ve farklı açılardan bakıldığında yüzeyler üzerindeki görüntü kalitesini yükseltmek için kullanılan bir metottur. İki doğrusal ve üç doğrusal süzme&#8217;de olduğu gibi aliasing etkilerini ortadan kaldırırken, bir yandan buğulanmayı azaltma ve uç görüntüleme açılarında detayların korunması [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Mine Bilgiç</p>
<p>Eşyönsüz süzme, üç boyutlu bilgisayar grafiklerinde <a href="http://www.bilgisayarkavramlari.com/2008/11/19/opengl-ve-kamera-goruntusu-camera-viewing/">kamera açısına</a> bağlı olarak dokunun <a href="http://www.bilgisayarkavramlari.com/2008/12/02/opengl-ile-perspektif/">iz düşümünün dik olmadığı durumlarda</a> ve farklı açılardan bakıldığında yüzeyler üzerindeki görüntü kalitesini yükseltmek için kullanılan bir metottur.</p>
<p>İki doğrusal ve üç doğrusal süzme&#8217;de olduğu gibi aliasing etkilerini ortadan kaldırırken, bir yandan buğulanmayı azaltma ve uç görüntüleme açılarında detayların korunması tekniklerinde iyileştirme sağlar.</p>
<p>1990&#8242;ların sonlarına doğru tüketici seviyesi grafik kartlarında standart özellik haline gelmiştir ve oldukça yaygındır. Günümüzde eş yönsüz süzme modern grafik donanımında yaygındır; hem sürücü ayarları veya grafik uygulamalarında kullanıcılar tarafından ve programlama arayüzlerinde video oyunları tarafından seçilir kılınmıştır.</p>
<h2><a name="Degree_of_anisotropy_supported"></a>2 EŞYÖNSÜZLÜĞÜN DESTEKLEDİĞİ ORANLAR</h2>
<p>Kaplama sırasında farklı derece veya oranda eşyönsüz süzme uygulanabilir ve geçerli donanım kaplama uygulamaları bu orana bir üst sınır daha ekler. Bu derece, süzme süreci tarafından desteklenen maksimum eşyönsüzlük oranını gösterir. Örneğin; 4:1 eşyönsüz süzme 2:1&#8242;in eğik dokuları keskinleştirmesinden çok daha fazla keskinleştirecektir. Dokular iki kat daha keskin olacaktır. Ancak, bütün sahnede 4:1 süzme kullanmaya gerek yoktur, sadece daha eğik ve genellikle uzak <a href="http://www.bilgisayarkavramlari.com/2007/11/24/piksel-benek-imgecik-pixel/">imgecikler (pixel)</a> bu keskinleştirmeye ihtiyaç duyar. Bunun anlamı, eşyönsüz süzmenin derecesi katlandıkça, görünür kalite açısından azalan getiri vardır, çok çok az sayıda kaplanmış imgecik bundan etkilenir ve çıkan görünümün farkı izleyiciye belli belirsiz gelir. 8:1 ve 16:1 eşyönsüz süzülmüş iki sahne karşılaştırılırsa, sadece çok azsayıda eğimi çok yüksek olan imgecikler, daha çok uzak mesafe geometrisinde olanlar yüksek dereceli eşyönsüz süzmedeki sahnede  görünür biçimde keskin gözükebileceklerdir ve bu az sayıda 16:1 süzülmüş imgecikler den alınan frekans bilgisi 8:1 oranının sadece iki katıdır. Daha az imgecik yüksek eşyönsüzlüğün veri getirimlerine ihtiyaç duyar bu yüzden, güç azalması da azalır. Sonuç olarak bu azalmanın neticesi fazladan donanım karmaşıklığı gibi şeyleri beraberinde getirir. Bu durum da donanım tasarımında eşyönsüzlük kalitesine bir üst sınır konulmasına neden olur. Uygulamalar ve kullanıcılar bu işlemlerden sonra sürücü ve yazılım ayarlarından bu eşiğe kadar ayarlayıp kullanmakta özgürdürler.</p>
<h2><a name="Implementation"></a>3 UYGULAMA</h2>
<p><span style="font-family:Times New Roman; font-size:12pt">Doğru eşyönsüz süzme, </span>eşyönsüzlüğün herhangi bir yönelme anı için her bir imgecik temel alınarak <span style="font-family:Times New Roman; font-size:12pt">dokuyu yön bağımlı olarak dokuyu eşyönsüz olarak inceler. Grafik donanımında, genellikle doku eşyönsüz olarak örneklendiğinde dokunun merkezine yakın birkaç doku imgeciği örneklemi alınır ama o imgecikteki izdüşümü alınmış şekle göre örnek desen eşlenir. Her doku imgeciği örneklemi kendi içinde, sürece daha fazla örnekleme ekleyen süzülmüş mipmap örneğidir. On altı adet üç doğrusal eşyönsüz örneklemi, saklanmış dokudan 128 adet örneğe ihtiyaç duyar.(Üç doğrusal mipmap süzme dört örneğe ihtiyaç duyar, ve iki mipmap seviyesi olduğu için iki katı alınacaktır daha sonra esyönsüz örnek 16 adet üç doğrusal süzülmüş doku imgeciği örneklemine ihtiyaç duyar.)<br />
</span></p>
<h2><a name="Performance_and_optimization"></a>4 PERFORMANS VE ENİYİLEME</h2>
<p>Gerekli örneklem sayısı, eşyönsüz süzmeyi fena halde yoğun bantgenişliği ihtiyacına sürükleyebilir. Çoklu dokular için genelde, her  doku örneklemi dört veya daha fazla byte&#8217;tır böylece her eşyönsüz imgecik , her ne kadar doku sıkıştırma ile bu düşürülmeye çalışılsa da, doku belleğinden 512 byte gerektirebilir. Bir ekran rahatlıkla bir milyondan fazla imgecik içerir,ve istenilen çerçeve hızı(frame rate) saniyede 30- 60 çerçeve veya daha fazla hızdadır, böylece doku belleğinin bantgenişliği çok hızlı ve çok yüksek olabilir (saniyede yüzlerce gigabyte&#8217;a varan). Daha iyi performans için bir takım etkenlerin durumu yumuşatması iyi bir şey. Doku imgeciği örneklemlerinin kendileri belleğe alınmış doku örneklerini paylaşırlar. 16 eşyönsüz süzmede bile, 16 sının hepsi her zaman gerekli değildir çünkü sadece mesafece uzak imgeciklerin doldurulmasında yüksek bir eşyönsüzlük gerekir.</p>
<h1>KAYNAKÇA</h1>
<p>http://en.wikipedia.org/wiki/Texture_filtering</p>
<p>http://en.wikipedia.org/wiki/Mipmap</p>
<p>http://en.wikipedia.org/wiki/Anisotropic_filtering</p>
<p>http://blogs.msdn.com/virtualearth3d/archive/2009/04/19/anisotropic-filtering.aspx</p>

<p class="sayac_bilgi">409 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/09/esyonsuz-suzme-anisotropic-filtering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3 Boyutlu Şekil Dönüşümleri</title>
		<link>http://www.bilgisayarkavramlari.com/2009/07/27/3-boyutlu-sekil-donusumleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/07/27/3-boyutlu-sekil-donusumleri/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 09:46:04 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>
		<category><![CDATA[Bilgisayar Matematiği]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2904</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar grafiklerinde bir şeklin dönüştürülmesi sırasında aşağıdaki 3 işlemden birisi yapılabilir: içerik 3 boyutlu uzayda şekil taşıma 3 boyutlu uzayda şekil döndürme Eksene paralel doğru etrafında şekil döndürme Eksene paralel olmayan doğru etrafında şekil döndürme 3 boyutlu şekil ölçekleme Taşıma (Translation) Döndürme (Rotation) Ölçekleme (Scaling) Yukarıdaki bu işlemlerin 2 boyutlu [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar grafiklerinde bir şeklin dönüştürülmesi sırasında aşağıdaki 3 işlemden birisi yapılabilir:</p>
<p class="shutter">içerik<br />
<a href="#1">3 boyutlu uzayda şekil taşıma</a><br />
<a href="#2">3 boyutlu uzayda şekil döndürme</a><br />
<a href="#3">Eksene paralel doğru etrafında şekil döndürme</a><br />
<a href="#4">Eksene paralel olmayan doğru etrafında şekil döndürme</a><br />
<a href="#5">3 boyutlu şekil ölçekleme</a></p>
<ul>
<li>Taşıma (Translation)</li>
<li>Döndürme (Rotation)</li>
<li>Ölçekleme (Scaling)</li>
</ul>
<p>Yukarıdaki bu işlemlerin <a href="http://www.bilgisayarkavramlari.com/2008/11/04/2-boyutlu-sekil-donusumleri-2d-transformations/">2 boyutlu şekil dönüşümlerinin (2D Transformations)</a> yanında 3 boyutlu olarak işlenmesi de mümkündür. Bu yazının amacı yukarıda listelenen işlemlerin sırasıyla anlatılmasıdır.</p>
<p><strong><a name="1"></a>3 Boyutlu uzayda şekil taşıma</strong></p>
<p>Şekil taşıma işlemi basitçe bir şekli oluşturan noktaların değerlerinin belirli bir x,y ve z boyutu değişimine tabi tutulması olarak düşünülebilir. Bu durumu basit bir nokta ile anlayabiliriz. Örneğin (x,y,z) değerlerine sahip bir noktanın taşınması demek aslında noktanın (x+tx,y+ty,z+tz) koordinatlarında kodlanması demektir. Buradaki tx,ty ve tz değerleri taşıma işlemi sırasındaki yer değiştirme miktarlarıdır ve taşıma işleminin yönüne göre eksi değer alabilirler.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/tasima3d.jpg"><img class="alignnone size-full wp-image-2905" title="tasima3d" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/tasima3d.jpg" alt="tasima3d" width="287" height="256" /></a></p>
<p>Yukarıdaki şekilde P noktası P&#8217; noktasına taşınmıştır. Bu işlem için <a href="http://www.bilgisayarkavramlari.com/2008/11/11/homojen-koordinatlar-homogenous-coordinates-form/">homojen koordinat sistemi (homogenous coordinate system)</a> kullanılacak olursa noktalarımızı aşağıdaki şekilde gösterebiliriz:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/tasima3b.jpg"><img class="alignnone size-full wp-image-2906" title="tasima3b" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/tasima3b.jpg" alt="tasima3b" width="292" height="129" /></a></p>
<p>Yukarıdaki vektör (yöney) gösterimlerindeki 1 değerleri homojen koordinat sisteminden gelen değerdir. Ayrıca yukarıdaki x,y,z değerlerini 3 boyutlu<a href="http://www.bilgisayarkavramlari.com/2007/11/24/kartezyen-uzay-cartesian-space/comment-page-1/"> kartezyen uzayda (cartesian space)</a> bir nokta belirlemek için kullanılan değerler olarak düşünmek mümkündür.</p>
<p>Yukarıdaki iki nokta arasındaki dönüşüm işlemi için aşağıdaki dönüşüm masfufunu (matrix) kullanmak mümkündür.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/tasimamasfuf.jpg"><img class="alignnone size-full wp-image-2907" title="tasimamasfuf" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/tasimamasfuf.jpg" alt="tasimamasfuf" width="210" height="135" /></a></p>
<p>Yukarıdaki dönüşüm masfufunu kullanarak P&#8217; = T P masfuf çarpımını yapmak mümkündür.</p>
<p><strong><a name="2"></a>3 boyutlu uzayda şekil döndürme</strong></p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/11/04/2-boyutlu-dondurme-2d-rotation/">Döndürme (rotation)</a> işlemi <a href="http://www.bilgisayarkavramlari.com/2008/11/04/2-boyutlu-tasima-2d-translation/">taşıma (translation)</a> işlemine benzer şekilde bir nesnenin bir doğru etrafında dönemsidir. Temel döndürme işlemleri eksen etrafında yapılan işlemlerdir. Örneğin aşağıdaki şekilde görüntülenen z ekseni etrafında döndürme işlemini inceleyelim:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurme3d.jpg"><img class="alignnone size-full wp-image-2908" title="dondurme3d" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurme3d.jpg" alt="dondurme3d" width="267" height="256" /></a></p>
<p>Yukarıdaki şekilde görüntülenen döndürme aslında <a href="http://www.bilgisayarkavramlari.com/2008/11/04/2-boyutlu-dondurme-2d-rotation/">2 boyutlu döndürme (2d rotation)</a> olarak düşünülebilir çünkü döndürme işlemi sırasında sadece şeklin x ve y değerlerinde değişikli olacak z değeri sabit kalacaktır. 3 boyutlu döndürmenin 2 boyuttan tek farkı ise şekli oluşturan noktaların 3 boyutlu olması dolayısıyla da x,y ve z değerlerine sahip olmasıdır.</p>
<p>Bu durumda bir noktanın döndürülmeden önceki ve döndürüldükten sonraki değerlerini aşağıdaki şekilde gösterecek olursak:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/tasima3b.jpg"><img class="alignnone size-full wp-image-2906" title="tasima3b" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/tasima3b.jpg" alt="tasima3b" width="292" height="129" /></a></p>
<p>Bu noktalar arasındaki geçişi formüllediğimizde:</p>
<p>x&#8217;= x cosθ &#8211; y sinθ</p>
<p>y&#8217;= x sinθ + y cosθ</p>
<p>z&#8217; = z</p>
<p>şeklinde gösterebiliriz. Yani bir noktanın orjin (ordinat) merkez alınarak z ekseni etrafında döndürülmesi işlemi sonucunda oluşan yeni nokta değerleri 2 boyutlu şekil dönüşümüne benzer şekilde yukarıda verilen formülden hespalanabilir.</p>
<p>Bu formülü bir dönüşüm masfufa indirgemek gerekirse aşağıdaki şekilde bir masfuf elde edilir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurmemasfuf.jpg"></a><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurmemasfuf1.jpg"><img class="alignnone size-full wp-image-2910" title="dondurmemasfuf1" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurmemasfuf1.jpg" alt="dondurmemasfuf1" width="240" height="119" /></a></p>
<p>Yukarıdaki masfuf kullanılarak P&#8217; = T P çarpımı sonucunda istenilen denklemler elde edilmiş olur. Döndürme işlemi z ekseni etrafında yapılabileceği gibi y ve x eksenleri etrafında da yapılabilir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurmeyx.jpg"><img class="alignnone size-full wp-image-2911" title="dondurmeyx" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurmeyx.jpg" alt="dondurmeyx" width="249" height="408" /></a></p>
<p>Yukarıdaki şekillerde gösterilen bu döndürme işlemleri için aşağıdaki masfuflar (matrices) kullanılabilir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurmexy.jpg"><img class="alignnone size-full wp-image-2912" title="dondurmexy" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/dondurmexy.jpg" alt="dondurmexy" width="243" height="365" /></a></p>
<p>Yukarıdaki denklemler ve masfuflar sırasıyla x ve y eksenleri etrafında yapılan döndürme işlemleridir.</p>
<p><strong><a name="3"></a>Eksene paralel doğru etrafında döndürme </strong></p>
<p>Yukarıdaki bölümde açıklanan bir eksen etrafında döndürme işlemine benzer olarak bir doğru etrafında da döndürme işlemi gerekebilir. Bu durumda şayet doğru bir eksene paralelse, döndürme işlemi basit bir taşıma işlemi ilave edilerek eksen etrafında döndürme işlemiyle çözülebilir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/paraleldondurme.jpg"><img class="alignnone size-full wp-image-2913" title="paraleldondurme" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/paraleldondurme.jpg" alt="paraleldondurme" width="275" height="256" /></a></p>
<p>Yukarıdaki şekilde x eksenine paralel bir doğru etrafında döndürme işlemi tasvir edilmiştir. Bu durumda doğruyu eksene taşımak ve benzer şekilde şekli de eksene taşıma ve döndürmek sonra da geri taşımak bir çözüm olur.</p>
<p>P’ = T<sup>-1</sup> . Rx(θ) . T. P</p>
<p>Yukarıda verilen bu dönüşüm işlemleri sırasıyla yapılırsa, yani P noktası önce taşınırsa (T) sonra x ekseni etrafında döndürülürse (Rx(θ)) ve sonra eski yerine taşınırsa (T<sup>-1</sup>) şekil aslında eksene paralel olan bu doğru etrafında döndürülmüş olur.</p>
<p><strong><a name="4"></a>Eksene paralel olmayan doğru etrafında şekil döndürme</strong></p>
<p>Yukarıdaki bölümde anlatıldığı gibi her zaman bir doğru eksene paralel olmayabilir. Bu durumda eksene paralel olmayan bir doğru için önce etrafında döndürme yapılacak doğrunun eksenlerden birisine paralel hale getirilmesi gerekir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/paralelolmayan.jpg"><img class="alignnone size-full wp-image-2918" title="paralelolmayan" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/paralelolmayan.jpg" alt="paralelolmayan" width="272" height="261" /></a></p>
<p>Örneğin yukarıdaki şekilde, herhangi bir eksene paralel olmayan bir doğru etrafında şeklimizi döndürmek isteyelim.</p>
<p>Bu işlem 5 adımda gerçekleştirilebilir:</p>
<ol>
<li>Doğrunun merkezden geçecek şekilde taşınması</li>
<li>Doğrunun eksenlerden birisine paralel halde döndürülmesi</li>
<li>Şeklin eksen etrafında döndürülmesi</li>
<li>Doğrunun eski eğimine döndürülmesi</li>
<li>Doğrunun merkezden eski yerine taşınması</li>
</ol>
<p>Yukarıda sıralandığı üzere nokta (veya şekli oluşturan noktalar) sırasıyla 5 dönüştürme işlemine tabi tutulur ve sonuçta şekil verilen doğru etrafında döndürülmüş olur.</p>
<p><strong><a name="5"></a>3 boyutlu şekil ölçekleme</strong></p>
<p>Bir şeklin ölçeklenmesi, şekli oluşturan noktaların x,y ve z değerlerinin belirli bir katsayı ile çarpılması ile mümkündür. Bu işlem sırasında şekil hem yer değiştirmekte hem de şekli oluşturan noktalar birbirinden uzaklaşıp yaklaştığı için şekil büyümekte veya küçülmektedir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/3bscale.jpg"><img class="alignnone size-full wp-image-2920" title="3bscale" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/3bscale.jpg" alt="3bscale" width="262" height="277" /></a></p>
<p>Yukarıdaki şekilde de görülen bu durum için aşağıdaki dönüşüm masfufu kullanılabilir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/scalemasfuf.jpg"><img class="alignnone size-full wp-image-2921" title="scalemasfuf" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/scalemasfuf.jpg" alt="scalemasfuf" width="254" height="130" /></a></p>
<p>Yukarıda verilen bu masfuf ile bir nokta aşağıdaki şekilde çarpıldığında elde edilen yeni P&#8217; noktası merkeze göre verilen değerlerde ölçeklenmiş bir noktadır:</p>
<p>P&#8217; = T P</p>

<p class="sayac_bilgi">416 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/07/27/3-boyutlu-sekil-donusumleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Izgara Tarama (Raster Scan)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/07/13/izgara-tarama-raster-scan/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/07/13/izgara-tarama-raster-scan/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 10:53:54 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>
		<category><![CDATA[Resim İşleme (Image Processing)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2799</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar grafiklerinde bir şeklin ekranda gösterilmesi sırasında kullanılan yöntemin ismidir. Basitçe ekranı imgecik (pixel) matrisinden oluşan bir ızgara gibi düşünebiliriz. Örneğin 1024 x 768 boyutlarındaki bir ekranın yine aynı boyutlardaki bir ızgara olarak düşünülmesi mümkündür. Izgara (raster) kullanılarak şekiller üzerindeki dönüşüm işlemleri yapılabilir. Örneğin şeklin taşınması işlemi için basit hafızada [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar grafiklerinde bir şeklin ekranda gösterilmesi sırasında kullanılan yöntemin ismidir. Basitçe ekranı <a href="http://www.bilgisayarkavramlari.com/2007/11/24/piksel-benek-imgecik-pixel/">imgecik (pixel)</a> matrisinden oluşan bir ızgara gibi düşünebiliriz. Örneğin 1024 x 768 boyutlarındaki bir ekranın yine aynı boyutlardaki bir ızgara olarak düşünülmesi mümkündür.</p>
<p>Izgara (raster) kullanılarak şekiller üzerindeki dönüşüm işlemleri yapılabilir. Örneğin şeklin taşınması işlemi için basit hafızada matris bilgilerinin kopyalanması yeterlidir.</p>
<p><img class="alignnone size-full wp-image-2800" title="raster" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/raster.jpg" alt="raster" width="255" height="292" /></p>
<p>Yukarıdaki şekilde ilk konumdaki üçgen kesilerek yeni konuma taşınmıştır. Aslında bir taşıma işlemi olan bu olay hafızadaki ilgili imgeciklerin (pixel) yerinin değiştirilmesi olarak düşünülebilir.</p>
<p>Benzer şekilde<a href="http://www.bilgisayarkavramlari.com/2008/11/04/2-boyutlu-dondurme-2d-rotation/"> döndürme (rotation)</a> , <a href="http://www.bilgisayarkavramlari.com/2008/11/04/1049/">ölçekleme (scaling)</a>,  <a href="http://www.bilgisayarkavramlari.com/2009/07/13/yansima-reflection/">yansıma (reflection)</a> ve <a href="http://www.bilgisayarkavramlari.com/2009/07/13/seklin-egilmesi-shearing/">eğme (shearing)</a> işlemleri de aslında hafızadaki bir alanın yeniden hesaplanarak gösterilmesi olarak düşünülebilir.</p>
<p>Örneğin döndürme (rotation) işlemi için aşağıdaki dönüşüm kullanılabilir:</p>
<p><img class="alignnone size-full wp-image-2803" title="rasterdondurme" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/rasterdondurme.jpg" alt="rasterdondurme" width="188" height="383" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere şekli oluşturan 3&#215;3 boyutlarındaki alan döndürülmütür. Bunun sonucunda bu alanda bulunan şekil döndürülmüş olur. Aslında şeklin döndürülmesi veya şeklin çizildiği alanın döndürülmesi aynı şeyler olmasına karşılık ortada iki farklı koordinat sistemi oluşmaktadır.</p>
<p><img class="alignnone size-full wp-image-2804" title="rasterkoord" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/07/rasterkoord.jpg" alt="rasterkoord" width="319" height="209" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere x,y kartezyen uzayındaki x&#8217;,y&#8217; alt uzayı (raster space) sadece şeklin ilgili alanının yeniden çizileceği bölge için geçerli olan koordinat sistemidir. Bu durumda şekil normal çizilirken çizim alanının ilgili dönüşüme tabi tutulması gerekir.</p>
<p>İki uzay arasında (Bütün şekilleri kapsayan ana uzay ile dönüşüm uygulanan alt uzay (Raster space)) bir <a href="http://www.bilgisayarkavramlari.com/2009/07/09/homojen-koordinatlarla-sekil-degistirm/">dönüşüm matrisi</a> elde edilebilir ve bu alan için dönüşüm matrisi uygulanarak çizim yapılabilir.</p>

<p class="sayac_bilgi">170 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/07/13/izgara-tarama-raster-scan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

