{"id":2857,"date":"2023-10-15T17:57:56","date_gmt":"2023-10-15T17:57:56","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2857"},"modified":"2023-10-15T17:57:56","modified_gmt":"2023-10-15T17:57:56","slug":"uengine4-seruveni-basicglpainter-ii","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/","title":{"rendered":"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; II"},"content":{"rendered":"<p>Evet dostlar, GLPainter s\u0131n\u0131f\u0131m\u0131z\u0131n kalan kabiliyetlerine bakma vakti geldi. Bu yaz\u0131m\u0131zda a\u015fa\u011f\u0131daki yaz\u0131larda eksik b\u0131rakt\u0131\u011f\u0131m\u0131z konulara de\u011finerek, GLPainter&#8217;\u0131 sizlerin kullan\u0131m\u0131na sunuyorum.<\/p>\n<p><a href=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/06\/07\/uengine4-seruveni-giris-painter-siniflari\/\"><span style=\"color: #008000;\"><strong>uEngine4 Ser\u00fcveni &#8211; Giri\u015f (Painter S\u0131n\u0131flar\u0131)<\/strong><\/span><\/a><\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\">uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I<\/a><\/strong><\/span><\/p>\n<p>Bir \u00f6nceki yaz\u0131mda GLPainter ile metin g\u00f6sterimi ve resim \u00e7izmeye y\u00f6nelik kabiliyetlere de\u011finmi\u015ftik. \u015eimdi, kalan hususlara de\u011finelim. Bunlardan ilki d\u00f6n\u00fc\u015f\u00fcmler, di\u011feri ise stencil operasyonlar\u0131.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">D\u00f6n\u00fc\u015f\u00fcmler (&#8220;Transformations&#8221;)<\/span><\/strong><\/h2>\n<p>D\u00f6n\u00fc\u015f\u00fcmler mevzusuna asl\u0131nda SDLPainter&#8217;da biraz de\u011finmi\u015ftim. SDL2 ile b\u00fct\u00fcn sahneyi veya ilgili nesneleri topyek\u00fcn ya da tek tek ta\u015f\u0131ma ya da d\u00f6nd\u00fcrme ya da boyutland\u0131rman\u0131n bir y\u00f6ntemi yok (detaylar i\u00e7in <a href=\"https:\/\/wiki.libsdl.org\/SDL2\/APIByCategory\"><span style=\"color: #008000;\"><strong>https:\/\/wiki.libsdl.org\/SDL2\/APIByCategory<\/strong><\/span><\/a> sayfas\u0131na g\u00f6z atabilirsiniz). Her ne kadar bu temel uygulamalar i\u00e7in \u00e7ok s\u0131k\u0131nt\u0131 olmasa da, harita ve benzeri uygulamalarda hayat\u0131n\u0131z olduk\u00e7a zorla\u015ft\u0131rabilmekte. GLPainter&#8217;\u0131n en b\u00fcy\u00fck avantajlar\u0131ndan birisi de bu transformasyonlar. Peki nedir bu d\u00f6n\u00fc\u015f\u00fcmler?<\/p>\n<p>D\u00f6n\u00fc\u015f\u00fcmler asl\u0131nda bilgisayar grafiklerinin temelini olu\u015fturulan kavramlardan birisidir ve genel olarak 2B\/3B nesnelerin konum, y\u00f6n ya da boyutlar\u0131n\u0131 modifiye etmek i\u00e7in kullan\u0131lan matematiksel operasyonlard\u0131r. 2B temel bilgisayar grafikleri d\u00f6n\u00fc\u015f\u00fcmleri \u015funlard\u0131r:<\/p>\n<ul>\n<li>D\u00f6nd\u00fcrme (rotation),<\/li>\n<li>Ta\u015f\u0131ma (translation),<\/li>\n<li>Boyutland\u0131rma (scaling)<\/li>\n<\/ul>\n<p>bunlar\u0131ndan yan\u0131nda a\u015fa\u011f\u0131daki t\u00fcretilmi\u015f d\u00f6n\u00fc\u015f\u00fcmler de kullan\u0131lmaktad\u0131r:<\/p>\n<ul>\n<li>Yans\u0131ma (reflection)<\/li>\n<li>Kayd\u0131rma (shearing)<\/li>\n<\/ul>\n<p>B\u00fct\u00fcn bu operasyonlar matris i\u015flemleri arac\u0131l\u0131\u011f\u0131 ile ger\u00e7ekle\u015ftirilir ve her birine kar\u015f\u0131l\u0131k gelen matris g\u00f6sterimleri bulunmaktad\u0131r. 2B\/3B noktalar ile ifade edilen nesnelerin her bir noktas\u0131na bunlar uygulanarak, yukar\u0131da verilen i\u015flevler ger\u00e7ekle\u015ftirilir.<\/p>\n<p>A\u015fa\u011f\u0131da, 2B bir nokta d\u00f6nd\u00fcrmenin grafiksel g\u00f6sterimini ve bundan matris formu nas\u0131l edece\u011fimiz g\u00f6sterece\u011fiz:<\/p>\n<p id=\"AUWJfXj\"><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/blogmedia.testbook.com\/blog\/wp-content\/uploads\/2022\/11\/2d_rotation-matrix_derivation_2-769a8554.png\" alt=\"2D Derivation Rotation Matrix\" width=\"278\" height=\"250\" \/><\/p>\n<p id=\"qrHMHGg\">Yukar\u0131daki grafikte g\u00f6r\u00fclece\u011fi \u00fczere x ve y noktalar\u0131 a\u015fa\u011f\u0131daki \u015fekilde bulunabilir:<\/p>\n<p><strong><span id=\"MathJax-Element-42-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;mi&gt;x&lt;\/mi&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-601\" class=\"math\"><span id=\"MathJax-Span-602\" class=\"mrow\"><span id=\"MathJax-Span-603\" class=\"mi\">x<\/span><span id=\"MathJax-Span-604\" class=\"mo\">=<\/span><span id=\"MathJax-Span-605\" class=\"mi\">r<\/span><span id=\"MathJax-Span-606\" class=\"mi\">cos<\/span><span id=\"MathJax-Span-608\" class=\"mo\">(<\/span><span id=\"MathJax-Span-609\" class=\"mi\">\u03b1<\/span><span id=\"MathJax-Span-610\" class=\"mo\">)<\/span><\/span><\/span><\/span><\/strong><\/p>\n<p><strong><span id=\"MathJax-Element-42-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;mi&gt;x&lt;\/mi&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-601\" class=\"math\"><span id=\"MathJax-Span-602\" class=\"mrow\"><span id=\"MathJax-Span-610\" class=\"mo\"> <\/span><\/span><\/span><\/span><span id=\"MathJax-Element-43-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;mi&gt;y&lt;\/mi&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mi&gt;sin&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-611\" class=\"math\"><span id=\"MathJax-Span-612\" class=\"mrow\"><span id=\"MathJax-Span-613\" class=\"mi\">y<\/span><span id=\"MathJax-Span-614\" class=\"mo\">=<\/span><span id=\"MathJax-Span-615\" class=\"mi\">r<\/span><span id=\"MathJax-Span-616\" class=\"mi\">sin<\/span><span id=\"MathJax-Span-618\" class=\"mo\">(<\/span><span id=\"MathJax-Span-619\" class=\"mi\">\u03b1<\/span><span id=\"MathJax-Span-620\" class=\"mo\">)<\/span><\/span><\/span><\/span><\/strong><\/p>\n<p>d\u00f6nd\u00fcrme sonucu elde edilen x&#8217; ve y&#8217; noktalar\u0131 ise a\u015fa\u011f\u0131daki \u015fekilde bulunabilir:<\/p>\n<p><strong><span id=\"MathJax-Element-55-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;msup&gt;&lt;mi&gt;x&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;msup&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo&gt;+&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-668\" class=\"math\"><span id=\"MathJax-Span-669\" class=\"mrow\"><span id=\"MathJax-Span-670\" class=\"msup\"><span id=\"MathJax-Span-671\" class=\"mi\">x<\/span><span id=\"MathJax-Span-672\" class=\"mo\">\u2032<\/span><\/span><span id=\"MathJax-Span-673\" class=\"mo\">=<\/span><span id=\"MathJax-Span-674\" class=\"msup\"><span id=\"MathJax-Span-675\" class=\"mi\">r<\/span><span id=\"MathJax-Span-676\" class=\"mo\">\u2032<\/span><\/span><span id=\"MathJax-Span-677\" class=\"mi\">cos<\/span><span id=\"MathJax-Span-679\" class=\"mo\">(<\/span><span id=\"MathJax-Span-680\" class=\"mi\">\u03b1<\/span><span id=\"MathJax-Span-681\" class=\"mo\">+<\/span><span id=\"MathJax-Span-682\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-683\" class=\"mo\">)<\/span><\/span><\/span><\/span><\/strong><\/p>\n<p><strong><span id=\"MathJax-Element-55-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;msup&gt;&lt;mi&gt;x&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;msup&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo&gt;+&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-668\" class=\"math\"><span id=\"MathJax-Span-669\" class=\"mrow\"><span id=\"MathJax-Span-683\" class=\"mo\"> <\/span><\/span><\/span><\/span><span id=\"MathJax-Element-56-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;msup&gt;&lt;mi&gt;y&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;msup&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mi&gt;sin&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo&gt;+&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-684\" class=\"math\"><span id=\"MathJax-Span-685\" class=\"mrow\"><span id=\"MathJax-Span-686\" class=\"msup\"><span id=\"MathJax-Span-687\" class=\"mi\">y<\/span><span id=\"MathJax-Span-688\" class=\"mo\">\u2032<\/span><\/span><span id=\"MathJax-Span-689\" class=\"mo\">=<\/span><span id=\"MathJax-Span-690\" class=\"msup\"><span id=\"MathJax-Span-691\" class=\"mi\">r<\/span><span id=\"MathJax-Span-692\" class=\"mo\">\u2032<\/span><\/span><span id=\"MathJax-Span-693\" class=\"mi\">sin<\/span><span id=\"MathJax-Span-695\" class=\"mo\">(<\/span><span id=\"MathJax-Span-696\" class=\"mi\">\u03b1<\/span><span id=\"MathJax-Span-697\" class=\"mo\">+<\/span><span id=\"MathJax-Span-698\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-699\" class=\"mo\">)<\/span><\/span><\/span><\/span><\/strong><\/p>\n<p>\u015eimdi x ve y form\u00fcllerini, cos\/sin&#8217;leri, r\/r&#8217; &#8216;leri de yerine koydu\u011fumuzda a\u015fa\u011f\u0131daki form\u00fclleri elde ediyoruz:<\/p>\n<p><strong><span id=\"MathJax-Element-64-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;msup&gt;&lt;mi&gt;x&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;mo&gt;&amp;#x2013;&lt;\/mo&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mi&gt;sin&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;mi&gt;sin&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-785\" class=\"math\"><span id=\"MathJax-Span-786\" class=\"mrow\"><span id=\"MathJax-Span-787\" class=\"msup\"><span id=\"MathJax-Span-788\" class=\"mi\">x<\/span><span id=\"MathJax-Span-789\" class=\"mo\">\u2032<\/span><\/span><span id=\"MathJax-Span-790\" class=\"mo\">=<\/span><span id=\"MathJax-Span-791\" class=\"mi\">r<\/span><span id=\"MathJax-Span-792\" class=\"mi\">cos<\/span><span id=\"MathJax-Span-794\" class=\"mo\">(<\/span><span id=\"MathJax-Span-795\" class=\"mi\">\u03b1<\/span><span id=\"MathJax-Span-796\" class=\"mo\">)<\/span><span id=\"MathJax-Span-797\" class=\"mi\">cos<\/span><span id=\"MathJax-Span-799\" class=\"mo\">(<\/span><span id=\"MathJax-Span-800\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-801\" class=\"mo\">)<\/span><span id=\"MathJax-Span-802\" class=\"mo\">\u2013<\/span><span id=\"MathJax-Span-803\" class=\"mi\">r<\/span><span id=\"MathJax-Span-804\" class=\"mi\">sin<\/span><span id=\"MathJax-Span-806\" class=\"mo\">(<\/span><span id=\"MathJax-Span-807\" class=\"mi\">\u03b1<\/span><span id=\"MathJax-Span-808\" class=\"mo\">)<\/span><span id=\"MathJax-Span-809\" class=\"mi\">sin<\/span><span id=\"MathJax-Span-811\" class=\"mo\">(<\/span><span id=\"MathJax-Span-812\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-813\" class=\"mo\">)<\/span><\/span><\/span><\/span><\/strong><\/p>\n<p><strong><span id=\"MathJax-Element-65-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;msup&gt;&lt;mi&gt;y&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;mi&gt;sin&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;mo&gt;+&lt;\/mo&gt;&lt;mi&gt;r&lt;\/mi&gt;&lt;mi&gt;sin&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B1;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-814\" class=\"math\"><span id=\"MathJax-Span-815\" class=\"mrow\"><span id=\"MathJax-Span-816\" class=\"msup\"><span id=\"MathJax-Span-817\" class=\"mi\">y<\/span><span id=\"MathJax-Span-818\" class=\"mo\">\u2032<\/span><\/span><span id=\"MathJax-Span-819\" class=\"mo\">=<\/span><span id=\"MathJax-Span-820\" class=\"mi\">r<\/span><span id=\"MathJax-Span-821\" class=\"mi\">cos<\/span><span id=\"MathJax-Span-823\" class=\"mo\">(<\/span><span id=\"MathJax-Span-824\" class=\"mi\">\u03b1<\/span><span id=\"MathJax-Span-825\" class=\"mo\">)<\/span><span id=\"MathJax-Span-826\" class=\"mi\">sin<\/span><span id=\"MathJax-Span-828\" class=\"mo\">(<\/span><span id=\"MathJax-Span-829\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-830\" class=\"mo\">)<\/span><span id=\"MathJax-Span-831\" class=\"mo\">+<\/span><span id=\"MathJax-Span-832\" class=\"mi\">r<\/span><span id=\"MathJax-Span-833\" class=\"mi\">sin<\/span><span id=\"MathJax-Span-835\" class=\"mo\">(<\/span><span id=\"MathJax-Span-836\" class=\"mi\">\u03b1<\/span><span id=\"MathJax-Span-837\" class=\"mo\">)<\/span><span id=\"MathJax-Span-838\" class=\"mi\">cos<\/span><span id=\"MathJax-Span-840\" class=\"mo\">(<\/span><span id=\"MathJax-Span-841\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-842\" class=\"mo\">)<\/span><\/span><\/span><\/span><\/strong><\/p>\n<p>Bunlara da x=rcos(\u03b1), y=rsin(\u03b1)&#8217;lar\u0131 koyarsak<\/p>\n<p><strong><span id=\"MathJax-Element-68-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;msup&gt;&lt;mi&gt;x&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;mi&gt;x&lt;\/mi&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;mo&gt;&amp;#x2013;&lt;\/mo&gt;&lt;mi&gt;y&lt;\/mi&gt;&lt;mi&gt;sin&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-863\" class=\"math\"><span id=\"MathJax-Span-864\" class=\"mrow\"><span id=\"MathJax-Span-865\" class=\"msup\"><span id=\"MathJax-Span-866\" class=\"mi\">x<\/span><span id=\"MathJax-Span-867\" class=\"mo\">\u2032<\/span><\/span><span id=\"MathJax-Span-868\" class=\"mo\">=<\/span><span id=\"MathJax-Span-869\" class=\"mi\">x<\/span><span id=\"MathJax-Span-870\" class=\"mi\">cos<\/span><span id=\"MathJax-Span-872\" class=\"mo\">(<\/span><span id=\"MathJax-Span-873\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-874\" class=\"mo\">)<\/span><span id=\"MathJax-Span-875\" class=\"mo\">\u2013<\/span><span id=\"MathJax-Span-876\" class=\"mi\">y<\/span><span id=\"MathJax-Span-877\" class=\"mi\">sin<\/span><span id=\"MathJax-Span-879\" class=\"mo\">(<\/span><span id=\"MathJax-Span-880\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-881\" class=\"mo\">)<\/span><\/span><\/span><\/span><\/strong><\/p>\n<p><strong><span id=\"MathJax-Element-69-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot;&gt;&lt;msup&gt;&lt;mi&gt;y&lt;\/mi&gt;&lt;mo&gt;&amp;#x2032;&lt;\/mo&gt;&lt;\/msup&gt;&lt;mo&gt;=&lt;\/mo&gt;&lt;mi&gt;x&lt;\/mi&gt;&lt;mi&gt;sin&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;mo&gt;+&lt;\/mo&gt;&lt;mi&gt;y&lt;\/mi&gt;&lt;mi&gt;cos&lt;\/mi&gt;&lt;mo&gt;&amp;#x2061;&lt;\/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;\/mo&gt;&lt;mi&gt;&amp;#x03B2;&lt;\/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;\/mo&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-882\" class=\"math\"><span id=\"MathJax-Span-883\" class=\"mrow\"><span id=\"MathJax-Span-884\" class=\"msup\"><span id=\"MathJax-Span-885\" class=\"mi\">y<\/span><span id=\"MathJax-Span-886\" class=\"mo\">\u2032<\/span><\/span><span id=\"MathJax-Span-887\" class=\"mo\">=<\/span><span id=\"MathJax-Span-888\" class=\"mi\">x<\/span><span id=\"MathJax-Span-889\" class=\"mi\">sin<\/span><span id=\"MathJax-Span-891\" class=\"mo\">(<\/span><span id=\"MathJax-Span-892\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-893\" class=\"mo\">)<\/span><span id=\"MathJax-Span-894\" class=\"mo\">+<\/span><span id=\"MathJax-Span-895\" class=\"mi\">y<\/span><span id=\"MathJax-Span-896\" class=\"mi\">cos<\/span><span id=\"MathJax-Span-898\" class=\"mo\">(<\/span><span id=\"MathJax-Span-899\" class=\"mi\">\u03b2<\/span><span id=\"MathJax-Span-900\" class=\"mo\">)<\/span><\/span><\/span><\/span><\/strong><\/p>\n<p>elde ediyoruz. Bunun matris formu ise a\u015fa\u011f\u0131daki gibi olmakta:<\/p>\n<p id=\"mOrEKDS\"><img loading=\"lazy\" decoding=\"async\" width=\"326\" height=\"67\" class=\"alignnone size-full wp-image-2864 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_6525a91c05762.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_6525a91c05762.png 326w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_6525a91c05762-300x62.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_6525a91c05762-150x31.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_6525a91c05762-200x41.png 200w\" sizes=\"auto, (max-width: 326px) 100vw, 326px\" \/><\/p>\n<p>burada 2&#215;2&#8217;lik matrise \u03b2 a\u00e7\u0131s\u0131 ile 2B d\u00f6n\u00fc\u015f\u00fcm matrisi denilmektedir.<\/p>\n<p>Tabi yukar\u0131da verdi\u011fimiz sadece d\u00f6nd\u00fcrme matrisi. Bunun benzeri ta\u015f\u0131ma ve boyutland\u0131rma i\u00e7in de olu\u015fturulabilir. A\u015fa\u011f\u0131da verilen resimde, 2B i\u00e7in kullan\u0131labilecek b\u00fct\u00fcn d\u00f6n\u00fc\u015f\u00fcm matrisleri tek resimde \u00f6zetlenmi\u015ftir:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/i.pinimg.com\/originals\/b6\/4d\/88\/b64d88b5898ffff0885db0ff9f1ccb27.png\" alt=\"2D affine transformation matrix. | Matrices math, Math formulas, Math\" width=\"630\" height=\"840\" \/><\/p>\n<p>sonu\u00e7 olarak oyunlarda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz milyonlarca noktan\u0131n konumland\u0131r\u0131lmas\u0131\/boyutland\u0131r\u0131lmas\u0131 ya da d\u00f6nd\u00fcr\u00fclmesi asl\u0131nda bu matrislerin birbirleri ile \u00e7arp\u0131lmas\u0131 ile elde edilmekte. 3B uzaya ge\u00e7ince ve i\u015fin i\u00e7ine perpektif hesaplamalar\u0131 da girince, bu matrisler bir nebze kar\u0131\u015fabilir ama \u015fu an mevzumuz 2B ile s\u0131n\u0131rl\u0131.<\/p>\n<p>Tabi ki, GLPainter&#8217;\u0131n temel motivasyonu sizleri b\u00fct\u00fcn bu detaylardan korumak ama neden bunlara girdin o zaman sevgili yaz\u0131l\u0131mperver diyebilirsiniz \ud83d\ude00<\/p>\n<p>\u0130\u015fin \u015fakas\u0131 bir yana, 2B\/3B g\u00f6rselle\u015ftirme ya da oyun i\u015fine girecekseniz bunlar\u0131 sular, seller gibi bilmenizde fayda var, onu da buraya not d\u00fc\u015felim. \u015eimdi gelelim GLPainter ile bunlar\u0131 nas\u0131l yapabilece\u011finize. \u00d6nce API&#8217;lerimizi bir s\u0131ralayal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">\/** @brief   OpenGL Painter transformasyon API'si *\/\r\n\/\/ Boyutlandirma \r\nvoid Scale(float sx, float sy); \r\n\r\n\/\/ Dondurme\r\nvoid Rotate(float rotation); \r\n\r\n\/\/ Tasima\/oteleme\r\nvoid Translate(float tx, float ty); \r\nvoid Translate(const glm::vec2&amp; translation);\r\n\r\n\/\/ Son donusum durumu\/matrisini sifirlama (sol ust 0, 0 olacak sekilde)\r\nvoid ResetTransform();\r\n\r\n\/\/ Mevcut donusum durumunu\/matrisini sakla\r\nvoid SaveState();\r\n\r\n\/\/ Son saklanan donusum durumu\/matrisini geri yukle\r\nvoid RestoreState();<\/pre>\n<p>Yukar\u0131da da bahsetti\u011fim \u00fczere bu d\u00f6n\u00fc\u015f\u00fcmlerin matrise \u00e7evrilmesinin arkas\u0131nda yatan en \u00f6nemli motivasyon asl\u0131nda bunlar\u0131n \u00e7arp\u0131m\u0131 sayesinde tek bir matris elde edip bunu uygulamaktan ge\u00e7er. Arkadaki matemati\u011fe bakt\u0131\u011f\u0131n\u0131zda da bunu rahat bir \u015fekilde g\u00f6rebilirsiniz. Elbette burada dikkat etmeniz gereken en \u00f6nemli konu, bunlar\u0131n s\u0131ralamas\u0131n\u0131n \u00f6nemli oldu\u011fu ve \u00e7arp\u0131m yaparken de birle\u015ftirmede kulland\u0131\u011f\u0131n\u0131z bile\u015fenlerin sa\u011fdan sola do\u011fru uyguland\u0131\u011f\u0131d\u0131r. \u00d6rne\u011fin bir nesnemizi, (x, y, z) ekseninde (1, 2, 3) ta\u015f\u0131y\u0131p, 2 birim \u00f6l\u00e7eklendirme istiyorsak, \u00f6nce ta\u015f\u0131ma\/\u00f6teleme, sonra \u00f6l\u00e7eklendirme matrisini yerle\u015ftirip \u00e7arp\u0131yoruz:<\/p>\n<p id=\"cOVnlnK\"><img loading=\"lazy\" decoding=\"async\" width=\"695\" height=\"174\" class=\"alignnone size-full wp-image-2870 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19a676206.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19a676206.png 695w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19a676206-300x75.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19a676206-500x125.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19a676206-150x38.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19a676206-400x100.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19a676206-200x50.png 200w\" sizes=\"auto, (max-width: 695px) 100vw, 695px\" \/><\/p>\n<p>Bu matrisleri \u00e7arpt\u0131\u011f\u0131m\u0131zda a\u015fa\u011f\u0131daki matrisi elde ederiz:<\/p>\n<p id=\"vTqDuzp\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2871 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19f7ba1f6.png\" alt=\"\" width=\"255\" height=\"94\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19f7ba1f6.png 369w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19f7ba1f6-300x111.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19f7ba1f6-150x55.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/10\/img_652c19f7ba1f6-200x74.png 200w\" sizes=\"auto, (max-width: 255px) 100vw, 255px\" \/><\/p>\n<p>Bunu uygularken de \u00f6nce \u00f6l\u00e7eklendirme sonra boyutland\u0131rma yap\u0131l\u0131r. Ger\u00e7ekten de a\u015fa\u011f\u0131daki \u00f6rnekte g\u00f6rece\u011finiz \u00fczere kullanaca\u011f\u0131n\u0131z d\u00f6n\u00fc\u015f\u00fcm API&#8217;lerinin s\u0131ralamas\u0131 da bununla uyumlu olmal\u0131d\u0131r. D\u00f6nd\u00fcrmeyi de ekleyecek olursak, \u00f6zel bir durum yok ise \u00f6nce \u00f6l\u00e7eklendirme, sonra d\u00f6nd\u00fcrme ve en son da ta\u015f\u0131ma i\u015flemleri yap\u0131l\u0131r. Bu \u00fc\u00e7 d\u00f6n\u00fc\u015f\u00fcm\u00fc 2B i\u00e7in g\u00f6steren \u00f6rne\u011fi a\u015fa\u011f\u0131da g\u00f6rebilirsiniz (uEngine4 reposu i\u00e7erisinde gl_example projesinde ilgili kullan\u0131m\u0131 birebir g\u00f6rebilirsiniz):<\/p>\n<pre class=\"lang:c++ decode:true \">    \/\/ Ekranin ortasi\r\n    glm::vec2 screenCenter{ mParameters.Width\/2, mParameters.Height\/2 };\r\n\r\n    \/\/ Donusumleri sifirliyoruz (sol ust 0, 0 olacak sekilde)\r\n    mPainter.ResetTransform();\r\n\r\n    \/\/ Mevcut donusum durumunu\/matrisini sakla\r\n    mPainter.SaveState();\r\n        mPainter.AssignPen(Pen{ PenStyle::SolidLine, Color::Black, 2 });\r\n        mPainter.AssignBrush(Brush{ Color::Green });\r\n\r\n        \/\/ Donme animasyonu bilesenleri\r\n        static float rotationInDegree = 0;\r\n        rotationInDegree += 0.01f;\r\n        rotationInDegree = fmod(rotationInDegree, 360.0f);\r\n\r\n        \/\/ Boyutlandirma animasyonu bilesenleri\r\n        static float scale = 1.0;\r\n        static float increment = 0.0001F;\r\n        scale += increment;\r\n        if (scale &gt; 2.0F || scale &lt; -2.0F)\r\n            increment *= (-1);\r\n\r\n        \/\/ Asagidakilerin siralamasinia degistirerek nasil bir etkisi oldugunu gorebilirsin\r\n        mPainter.Translate(glm::vec2{screenCenter.x, screenCenter.y});\r\n        mPainter.Rotate(rotationInDegree);\r\n        mPainter.Scale(scale, scale);\r\n\r\n        \/\/ Asagida da cizdirdigimiz dikdortgen mevcut\r\n        mPainter.DrawRectangle({ -50, -50, 100, 100 });\r\n\r\n    \/\/  Son saklanan donusum durumu\/matrisini geri yukle\r\n    mPainter.RestoreState();<\/pre>\n<p>Yukar\u0131daki \u00f6rnekte d\u00f6n\u00fc\u015f\u00fcm \u00e7a\u011fr\u0131lar\u0131n\u0131n s\u0131ras\u0131n\u0131 de\u011fi\u015ftirerek, bunun \u00e7izimleri ve animasyonu nas\u0131l etkiledi\u011fini birinci elden g\u00f6rebilirsiniz. Elbette, OpenGL d\u00f6n\u00fc\u015f\u00fcm olay\u0131 olduk\u00e7a derin, gerekirse o konuya da ayr\u0131ca girebiliriz ama yukar\u0131daki \u00f6rnek BasicGLPainter&#8217;\u0131n temel kabiliyetlerini g\u00fczel bir \u015fekilde ortaya koymakta. \u015eimdi gelelim stencil operasyonlar\u0131na.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Stencil Testi<\/span><\/strong><\/h2>\n<p>Stencil testi asl\u0131na bakarsan\u0131z bu ve \u00f6nceki yaz\u0131mda bahsetti\u011fim \u00f6zelliklere nazaran daha ileri seviye bir \u00f6zellik. Normal kullan\u0131mlarda \u00e7ok ihtiyac\u0131n\u0131z olaca\u011f\u0131n\u0131z d\u00fc\u015f\u00fcnm\u00fcyorum ama velev ki oldu, BasicGLPainter size bunu da sunuyor olacak \ud83d\ude00<\/p>\n<p>Peki stencil test ne anlama geliyor? Stencil test, fragment shader sonras\u0131nda her bir pixel i\u00e7in yap\u0131lan teste deniliyor. Bu testin sonucuna g\u00f6re ilgili piksel g\u00f6steriliyor ya da g\u00f6sterilmiyor (test kal\u0131rsa). Stencil testi i\u00e7in, ayn\u0131 derinlik testinde oldu\u011fu gibi ayr\u0131 &#8220;buffer&#8221; &#8216;lar kullan\u0131lmakta. Bu sebeple de SDL2 kullan\u0131yorsan\u0131z, buna ili\u015fkin ayarlamalar\u0131 yapman\u0131z gerekiyor. Elbette, BasicGLPainter sizler i\u00e7in bunu arka planda hallediyor \ud83d\udc4d<\/p>\n<p>Kaynaklar k\u0131sm\u0131nda verdi\u011fim sitelerde bu konuya ili\u015fkin olduk\u00e7a detayl\u0131 bilgiler bulabilirsiniz fakat benim ho\u015fuma giden bir \u00f6rne\u011fi de burada g\u00f6stermeden ge\u00e7emeyece\u011fim:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/open.gl\/media\/img\/c5_stencil.png\" \/><\/p>\n<p id=\"hEAAHiL\">Soldaki resim, stencil testi uygulamadan \u00f6nceki sahne ve ilgili stencil test a\u00e7\u0131ld\u0131\u011f\u0131nda ve ilgili testlerin ge\u00e7ti\u011fi k\u0131s\u0131mlar nihayetinde kullan\u0131c\u0131ya sunuluyor.<\/p>\n<p>\u015eimdi gelelim bu test k\u0131sm\u0131na. OpenGL bu testi neye g\u00f6re yap\u0131yor. \u00d6ncelikle stencil testinin aktifle\u015ftirilmesi gerekiyor. Sonras\u0131nda ise <em>glStencilFunc<\/em>, <em>glStencilMask<\/em> ve <em>glStencilOp<\/em> ile bu testi \u015fekillendirebiliyorsunuz. Sizlerin de tahmin edebilece\u011finiz \u00fczere, bu ayarlar ile olduk\u00e7a ilgin\u00e7 i\u015flevleri ger\u00e7ekle\u015ftirmeniz m\u00fcmk\u00fcn ama ben BasicGLPainter kapsam\u0131nda temel k\u0131rpma kabiliyeti i\u00e7in (&#8220;clip&#8221;) bu testi kulland\u0131m. Peki bunu nas\u0131l kullanacaks\u0131n\u0131z? \u00d6ncelikle API&#8217;lerimize bir bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">\/** @brief   Stencil API'leri *\/\r\nvoid BeginClippingArea();\r\nvoid EndClippingArea();\r\nvoid ResetClippingArea();<\/pre>\n<p>Tabi bunlar\u0131 nas\u0131l kullanaca\u011f\u0131m\u0131z da \u00f6nemli \u00f6yle de\u011fil mi, hemen bir \u00f6rne\u011fe bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">    \/\/ Donusumleri sifirliyoruz (sol ust 0, 0 olacak sekilde)\r\n    mPainter.ResetTransform();\r\n\r\n    \/\/ Ekranin ortasi\r\n    glm::vec2 screenCenter{ mParameters.Width \/ 2, mParameters.Height \/ 2 };\r\n\r\n    mPainter.AssignPen(Pen{ PenStyle::SolidLine, Color::Black, 3 });\r\n    mPainter.AssignBrush(Brush{ Color::Yellow });\r\n\r\n    \/\/ Ortasinda cember deligi olan bir dikdortgen cizebilir miyiz? Elbette\r\n    \/\/ Once maskeleyecimiz kismi cizdiriyoruz\r\n    mPainter.BeginClippingArea();\r\n    mPainter.DrawEllipse(glm::vec2{ screenCenter.x, screenCenter.y}, 50, 50);\r\n    mPainter.EndClippingArea();\r\n\r\n    \/\/ Sonra maskelemek icin olan cizimi yapiyoruz\r\n    mPainter.AssignBrush(Brush{ Color::Green });\r\n    mPainter.Translate(glm::vec2{screenCenter.x, screenCenter.y});\r\n    mPainter.DrawRectangle({ -100, -100, 200, 200 });\r\n    mPainter.ResetClippingArea();\r\n\r\n    \/\/  Son saklanan donusum durumu\/matrisini geri yukle\r\n    mPainter.RestoreState();<\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, ortas\u0131nda bir delik olan kareyi BasicGLPainter ile nas\u0131l kolay bir \u015fekilde \u00e7izebilece\u011fimiz g\u00f6rd\u00fck.<\/p>\n<p>Evet bu yaz\u0131m ile birlikte BasicGLPainter tan\u0131t\u0131m serimizin sonuna geldik. BasicGLPainter ile bir \u00e7ok temel oyun i\u00e7in ihtiya\u00e7 duyaca\u011f\u0131n\u0131z 2B grafikleri \u00e7izdirebilirsiniz. Elbette, uEngine4 serimiz burada bitmiyor, bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle, bol kodlu g\u00fcnler diliyorum.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Kaynaklar<\/span><\/strong><\/h2>\n<ul>\n<li><a href=\"https:\/\/medium.com\/@junfeng142857\/affine-transformation-why-3d-matrix-for-a-2d-transformation-8922b08bce75\"><span style=\"color: #008000;\"><strong>https:\/\/medium.com\/@junfeng142857\/affine-transformation-why-3d-matrix-for-a-2d-transformation-8922b08bce75<\/strong><\/span><\/a><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"http:\/\/omercetin.com.tr\/DERS\/CG\/Omer6E09.pdf?i=1\">http:\/\/omercetin.com.tr\/DERS\/CG\/Omer6E09.pdf?i=1<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.muhendisbeyinler.net\/bilgisayar-grafigi-nedir-ve-matris-kavrami\/\">https:\/\/www.muhendisbeyinler.net\/bilgisayar-grafigi-nedir-ve-matris-kavrami\/<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/lazyfoo.net\/tutorials\/OpenGL\/13_matrix_transformations\/index.php\">https:\/\/lazyfoo.net\/tutorials\/OpenGL\/13_matrix_transformations\/index.php<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/wiki.libsdl.org\/SDL2\/APIByCategory\">https:\/\/wiki.libsdl.org\/SDL2\/APIByCategory<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/learnopengl.com\/Advanced-OpenGL\/Stencil-testing\">https:\/\/learnopengl.com\/Advanced-OpenGL\/Stencil-testing<\/a><\/strong><\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Evet dostlar, GLPainter s\u0131n\u0131f\u0131m\u0131z\u0131n kalan kabiliyetlerine bakma vakti geldi. Bu yaz\u0131m\u0131zda a\u015fa\u011f\u0131daki yaz\u0131larda eksik b\u0131rakt\u0131\u011f\u0131m\u0131z konulara de\u011finerek, GLPainter&#8217;\u0131 sizlerin kullan\u0131m\u0131na sunuyorum. uEngine4 Ser\u00fcveni &#8211; Giri\u015f (Painter S\u0131n\u0131flar\u0131) uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I Bir \u00f6nceki yaz\u0131mda GLPainter ile metin g\u00f6sterimi ve resim \u00e7izmeye y\u00f6nelik kabiliyetlere de\u011finmi\u015ftik. \u015eimdi, kalan hususlara de\u011finelim. Bunlardan ilki d\u00f6n\u00fc\u015f\u00fcmler, di\u011feri ise&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41,25],"tags":[1109,1114,1108,13,52,334,1096,1111,1112,1115,1110,1113,1041],"class_list":["post-2857","post","type-post","status-publish","format-standard","hentry","category-c","category-modern-c","category-oyun-gelistirme","tag-2d-graphics","tag-affine-transformations","tag-basicglpainter","tag-c","tag-game-development","tag-opengl","tag-painter","tag-rotation","tag-scale","tag-stencil-testing","tag-transformations","tag-translate","tag-uengine4"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>uEngine4 Ser\u00fcveni - BasicGLPainter - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"uEngine4 Ser\u00fcveni - BasicGLPainter - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet dostlar, GLPainter s\u0131n\u0131f\u0131m\u0131z\u0131n kalan kabiliyetlerine bakma vakti geldi. Bu yaz\u0131m\u0131zda a\u015fa\u011f\u0131daki yaz\u0131larda eksik b\u0131rakt\u0131\u011f\u0131m\u0131z konulara de\u011finerek, GLPainter&#8217;\u0131 sizlerin kullan\u0131m\u0131na sunuyorum. uEngine4 Ser\u00fcveni &#8211; Giri\u015f (Painter S\u0131n\u0131flar\u0131) uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I Bir \u00f6nceki yaz\u0131mda GLPainter ile metin g\u00f6sterimi ve resim \u00e7izmeye y\u00f6nelik kabiliyetlere de\u011finmi\u015ftik. \u015eimdi, kalan hususlara de\u011finelim. Bunlardan ilki d\u00f6n\u00fc\u015f\u00fcmler, di\u011feri ise... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-15T17:57:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogmedia.testbook.com\/blog\/wp-content\/uploads\/2022\/11\/2d_rotation-matrix_derivation_2-769a8554.png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; II\",\"datePublished\":\"2023-10-15T17:57:56+00:00\",\"dateModified\":\"2023-10-15T17:57:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/\"},\"wordCount\":1311,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"2d graphics\",\"affine transformations\",\"BasicGLPainter\",\"c++\",\"Game Development\",\"OpenGL\",\"painter\",\"rotation\",\"scale\",\"stencil testing\",\"transformations\",\"translate\",\"uengine4\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Oyun Geli\u015ftirme\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/\",\"name\":\"uEngine4 Ser\u00fcveni - BasicGLPainter - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2023-10-15T17:57:56+00:00\",\"dateModified\":\"2023-10-15T17:57:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; II\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"uEngine4 Ser\u00fcveni - BasicGLPainter - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/","og_locale":"tr_TR","og_type":"article","og_title":"uEngine4 Ser\u00fcveni - BasicGLPainter - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet dostlar, GLPainter s\u0131n\u0131f\u0131m\u0131z\u0131n kalan kabiliyetlerine bakma vakti geldi. Bu yaz\u0131m\u0131zda a\u015fa\u011f\u0131daki yaz\u0131larda eksik b\u0131rakt\u0131\u011f\u0131m\u0131z konulara de\u011finerek, GLPainter&#8217;\u0131 sizlerin kullan\u0131m\u0131na sunuyorum. uEngine4 Ser\u00fcveni &#8211; Giri\u015f (Painter S\u0131n\u0131flar\u0131) uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I Bir \u00f6nceki yaz\u0131mda GLPainter ile metin g\u00f6sterimi ve resim \u00e7izmeye y\u00f6nelik kabiliyetlere de\u011finmi\u015ftik. \u015eimdi, kalan hususlara de\u011finelim. Bunlardan ilki d\u00f6n\u00fc\u015f\u00fcmler, di\u011feri ise... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2023-10-15T17:57:56+00:00","og_image":[{"url":"https:\/\/blogmedia.testbook.com\/blog\/wp-content\/uploads\/2022\/11\/2d_rotation-matrix_derivation_2-769a8554.png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"8 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; II","datePublished":"2023-10-15T17:57:56+00:00","dateModified":"2023-10-15T17:57:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/"},"wordCount":1311,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["2d graphics","affine transformations","BasicGLPainter","c++","Game Development","OpenGL","painter","rotation","scale","stencil testing","transformations","translate","uengine4"],"articleSection":["C++","Modern C++","Oyun Geli\u015ftirme"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/","name":"uEngine4 Ser\u00fcveni - BasicGLPainter - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2023-10-15T17:57:56+00:00","dateModified":"2023-10-15T17:57:56+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/10\/15\/uengine4-seruveni-basicglpainter-ii\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; II"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2857","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2857"}],"version-history":[{"count":5,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2857\/revisions"}],"predecessor-version":[{"id":2873,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2857\/revisions\/2873"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2857"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2857"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}