{"id":39026,"date":"2026-02-12T19:30:36","date_gmt":"2026-02-12T16:30:36","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/"},"modified":"2026-02-12T19:30:36","modified_gmt":"2026-02-12T16:30:36","slug":"normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/","title":{"rendered":"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar?"},"content":{"rendered":"<h2>normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar?<\/h2>\n<p>3D grafik programlaman\u0131n temel ta\u015flar\u0131ndan biri olan vekt\u00f6rler, nesnelerin konumunu, y\u00f6n\u00fcn\u00fc ve hareketini tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r. Bu karma\u015f\u0131k d\u00fcnyada, <code>normalize()<\/code> gibi basit g\u00f6r\u00fcnen ancak kritik bir fonksiyon, \u00f6zellikle Three.js gibi k\u00fct\u00fcphanelerde \u0131\u015f\u0131n izleme (raycasting) gibi i\u015flemlerde tutarl\u0131l\u0131k ve do\u011fruluk sa\u011flamak i\u00e7in vazge\u00e7ilmezdir. Bu makale, <code>normalize()<\/code> fonksiyonunun matematiksel temellerini, 3D grafiklerdeki \u00f6nemini ve Three.js raycasting mekanizmas\u0131 i\u00e7indeki kritik rol\u00fcn\u00fc detayl\u0131 bir \u015fekilde inceleyecektir.<\/p>\n<h3>Vekt\u00f6rler ve 3D Grafiklerdeki Rol\u00fc<\/h3>\n<p>3D d\u00fcnyas\u0131nda her \u015fey vekt\u00f6rlerle ba\u015flar. Bir nesnenin konumu, bir \u0131\u015f\u0131\u011f\u0131n y\u00f6n\u00fc veya bir kuvvetin etkisi, hepsi vekt\u00f6rlerle ifade edilir. Bu b\u00f6l\u00fcmde, vekt\u00f6rlerin temel tan\u0131m\u0131n\u0131 ve 3D grafiklerdeki hayati \u00f6nemini ele alaca\u011f\u0131z.<\/p>\n<h4>Vekt\u00f6r Tan\u0131m\u0131 ve Bile\u015fenleri<\/h4>\n<p>Bir vekt\u00f6r, hem y\u00f6n\u00fc hem de b\u00fcy\u00fckl\u00fc\u011f\u00fc olan matematiksel bir niceliktir. 3D uzayda genellikle \u00fc\u00e7 bile\u015fenle (x, y, z) tan\u0131mlan\u0131r. \u00d6rne\u011fin, bir nesnenin konumu orijinden (0,0,0) o nesneye uzanan bir vekt\u00f6rle temsil edilebilir. Bir kuvvet vekt\u00f6r\u00fc ise kuvvetin uyguland\u0131\u011f\u0131 y\u00f6n\u00fc ve \u015fiddetini g\u00f6sterir.<\/p>\n<h4>Y\u00f6n ve B\u00fcy\u00fckl\u00fck Kavramlar\u0131<\/h4>\n<p>Vekt\u00f6r\u00fcn y\u00f6n\u00fc, bile\u015fenlerinin birbirine oran\u0131yla belirlenirken, b\u00fcy\u00fckl\u00fc\u011f\u00fc (veya uzunlu\u011fu), vekt\u00f6r\u00fcn ba\u015flang\u0131\u00e7 noktas\u0131ndan biti\u015f noktas\u0131na olan mesafesidir. \u00d6rne\u011fin, <code>(3, 4, 0)<\/code> vekt\u00f6r\u00fcn\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fc <code>sqrt(3^2 + 4^2 + 0^2) = sqrt(9 + 16) = sqrt(25) = 5<\/code> birimdir. 3D grafiklerde, y\u00f6n genellikle b\u00fcy\u00fckl\u00fckten daha \u00f6nemlidir, \u00f6zellikle bir \u0131\u015f\u0131n\u0131n veya normalin y\u00f6n\u00fcn\u00fc belirtirken.<\/p>\n<h4>3D Uzayda Vekt\u00f6rlerin \u00d6nemi<\/h4>\n<p>Vekt\u00f6rler, 3D nesnelerin transformasyonlar\u0131 (konumland\u0131rma, d\u00f6nd\u00fcrme, \u00f6l\u00e7ekleme), kamera hareketleri, \u0131\u015f\u0131k hesaplamalar\u0131, \u00e7arp\u0131\u015fma tespiti ve etkile\u015fim gibi bir\u00e7ok temel i\u015flemde kullan\u0131l\u0131r. Bir nesnenin hareket vekt\u00f6r\u00fc, bir y\u00fczeyin normal vekt\u00f6r\u00fc veya bir \u0131\u015f\u0131n\u0131n y\u00f6n vekt\u00f6r\u00fc gibi kavramlar, 3D sahnelerin do\u011fru bir \u015fekilde i\u015flenmesi i\u00e7in temeldir.<\/p>\n<h3>Vekt\u00f6r Normalizasyonu Nedir?<\/h3>\n<p>Normalizasyon, bir vekt\u00f6r\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fc (uzunlu\u011funu) 1&#8217;e e\u015fitleme i\u015flemidir. Bu i\u015flem sonucunda elde edilen vekt\u00f6re &#8220;birim vekt\u00f6r&#8221; denir. Peki, neden bir vekt\u00f6r\u00fcn uzunlu\u011funu 1&#8217;e e\u015fitlemeye ihtiya\u00e7 duyar\u0131z?<\/p>\n<h4>Birim Vekt\u00f6r Kavram\u0131<\/h4>\n<p>Birim vekt\u00f6r, sadece y\u00f6n bilgisi ta\u015f\u0131yan, b\u00fcy\u00fckl\u00fc\u011f\u00fc 1 olan bir vekt\u00f6rd\u00fcr. Matematiksel olarak, herhangi bir <code>v<\/code> vekt\u00f6r\u00fc i\u00e7in birim vekt\u00f6r\u00fc <code>u<\/code> \u015fu \u015fekilde bulunur: <code>u = v \/ |v|<\/code>, burada <code>|v|<\/code> vekt\u00f6r\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fc ifade eder. Birim vekt\u00f6rler, y\u00f6n bilgisi gerektiren ancak b\u00fcy\u00fckl\u00fc\u011f\u00fcn \u00f6nemli olmad\u0131\u011f\u0131 durumlarda (\u00f6rne\u011fin, bir \u0131\u015f\u0131n\u0131n y\u00f6n\u00fc veya bir y\u00fczeyin normali) son derece kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>Normalizasyonun Amac\u0131<\/h4>\n<p>Normalizasyonun temel amac\u0131, vekt\u00f6r\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fcnden ba\u011f\u0131ms\u0131z olarak sadece y\u00f6n\u00fcn\u00fc korumakt\u0131r. Bu, farkl\u0131 b\u00fcy\u00fckl\u00fckteki vekt\u00f6rlerin ayn\u0131 y\u00f6n\u00fc temsil etmesini sa\u011flar. \u00d6rne\u011fin, bir \u0131\u015f\u0131n\u0131n y\u00f6n\u00fcn\u00fc tan\u0131mlarken, \u0131\u015f\u0131n\u0131n ne kadar uza\u011fa gitti\u011fi de\u011fil, hangi y\u00f6ne gitti\u011fi \u00f6nemlidir. Normalizasyon, bu y\u00f6n bilgisini standart bir formda sunar.<\/p>\n<h4>Nas\u0131l Hesaplan\u0131r?<\/h4>\n<p>Bir vekt\u00f6r\u00fcn normalize edilmesi i\u00e7in \u00f6nce b\u00fcy\u00fckl\u00fc\u011f\u00fc hesaplan\u0131r. Ard\u0131ndan, vekt\u00f6r\u00fcn her bir bile\u015feni bu b\u00fcy\u00fckl\u00fc\u011fe b\u00f6l\u00fcn\u00fcr.<br \/>\n\u00d6rnek: <code>v = (3, 4, 0)<\/code> vekt\u00f6r\u00fcn\u00fc normalize edelim.<br \/>\n1. B\u00fcy\u00fckl\u00fc\u011f\u00fc hesapla: <code>|v| = sqrt(3^2 + 4^2 + 0^2) = 5<\/code><br \/>\n2. Her bile\u015feni b\u00fcy\u00fckl\u00fc\u011fe b\u00f6l: <code>v_normalized = (3\/5, 4\/5, 0\/5) = (0.6, 0.8, 0)<\/code><br \/>\nBu yeni vekt\u00f6r\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fc <code>sqrt(0.6^2 + 0.8^2 + 0^2) = sqrt(0.36 + 0.64) = sqrt(1) = 1<\/code> olacakt\u0131r.<\/p>\n<h3>normalize() Fonksiyonunun Matematiksel Temelleri<\/h3>\n<p><code>normalize()<\/code> fonksiyonu, vekt\u00f6r normalizasyonunun matematiksel prensiplerini kodda uygulayan bir metottur. Three.js gibi k\u00fct\u00fcphanelerde bu i\u015flem genellikle <code>Vector3<\/code> s\u0131n\u0131f\u0131n\u0131n bir metodu olarak bulunur.<\/p>\n<h4>Vekt\u00f6r B\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fcn Hesaplanmas\u0131 (Magnitude)<\/h4>\n<p>Bir <code>Vector3<\/code> nesnesinin b\u00fcy\u00fckl\u00fc\u011f\u00fc (uzunlu\u011fu) Pisagor teoremi kullan\u0131larak hesaplan\u0131r. <code>v = (x, y, z)<\/code> vekt\u00f6r\u00fc i\u00e7in b\u00fcy\u00fckl\u00fck <code>|v| = sqrt(x^2 + y^2 + z^2)<\/code> form\u00fcl\u00fcyle bulunur. Three.js&#8217;te bu i\u015flem <code>vector.length()<\/code> metodu ile ger\u00e7ekle\u015ftirilir.<\/p>\n<h4>Normalizasyon Form\u00fcl\u00fc<\/h4>\n<p>Normalizasyon form\u00fcl\u00fc yukar\u0131da belirtildi\u011fi gibidir: <code>v_normalized = v \/ |v|<\/code>. Bu, vekt\u00f6r\u00fcn her bir bile\u015fenini kendi b\u00fcy\u00fckl\u00fc\u011f\u00fcne b\u00f6lmek anlam\u0131na gelir. E\u011fer vekt\u00f6r\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fc s\u0131f\u0131rsa (yani vekt\u00f6r <code>(0,0,0)<\/code> ise), normalizasyon tan\u0131ms\u0131zd\u0131r ve genellikle <code>(0,0,0)<\/code> vekt\u00f6r\u00fc d\u00f6nd\u00fcr\u00fcl\u00fcr veya bir hata olu\u015fur. Three.js&#8217;te <code>vector.normalize()<\/code> metodu bu i\u015flemi otomatik olarak yapar.<\/p>\n<h4>Three.js&#8217;teki Uygulamas\u0131<\/h4>\n<p>Three.js&#8217;te bir <code>THREE.Vector3<\/code> nesnesi olu\u015fturuldu\u011funda, <code>normalize()<\/code> metodu do\u011frudan bu nesne \u00fczerinde \u00e7a\u011fr\u0131labilir. Bu metod, vekt\u00f6r\u00fcn kendisini de\u011fi\u015ftirir (in-place modification) ve normalize edilmi\u015f halini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ \u00d6rnek: Bir vekt\u00f6r olu\u015fturma ve normalize etme\nconst myVector = new THREE.Vector3(10, 20, 0);\n\nconsole.log(\"Orijinal vekt\u00f6r:\", myVector); \/\/ THREE.Vector3 {x: 10, y: 20, z: 0}\nconsole.log(\"Orijinal uzunluk:\", myVector.length()); \/\/ 22.3606797749979\n\nmyVector.normalize();\n\nconsole.log(\"Normalize edilmi\u015f vekt\u00f6r:\", myVector); \/\/ THREE.Vector3 {x: 0.4472..., y: 0.8944..., z: 0}\nconsole.log(\"Normalize edilmi\u015f uzunluk:\", myVector.length()); \/\/ 1<\/pre>\n<p><\/code><\/p>\n<h3>Three.js Raycasting'in Temelleri<\/h3>\n<p>Raycasting, 3D d\u00fcnyada bir noktadan belirli bir y\u00f6ne do\u011fru bir \u0131\u015f\u0131n (ray) g\u00f6ndererek, bu \u0131\u015f\u0131n\u0131n hangi nesnelerle kesi\u015fti\u011fini tespit etme i\u015flemidir. Bu, etkile\u015fimli 3D uygulamalar i\u00e7in hayati bir teknolojidir.<\/p>\n<h4>Ray (I\u015f\u0131n) Nedir?<\/h4>\n<p>Bir ray (\u0131\u015f\u0131n), bir ba\u015flang\u0131\u00e7 noktas\u0131 (origin) ve bir y\u00f6n (direction) ile tan\u0131mlanan, sonsuz uzunlukta bir \u00e7izgidir. Three.js'te <code>THREE.Raycaster<\/code> s\u0131n\u0131f\u0131, bu \u0131\u015f\u0131nlar\u0131 olu\u015fturmak ve kullanmak i\u00e7in bir aray\u00fcz sa\u011flar.<\/p>\n<h4>I\u015f\u0131n Atma Mekanizmas\u0131<\/h4>\n<p>Raycasting i\u015flemi, genellikle fare t\u0131klamas\u0131 veya dokunma gibi kullan\u0131c\u0131 etkile\u015fimlerinden kaynaklan\u0131r. Ekran koordinatlar\u0131, kamera ve sahne matrisleri kullan\u0131larak 3D uzayda bir \u0131\u015f\u0131n olu\u015fturulur. Bu \u0131\u015f\u0131n daha sonra sahnedeki t\u00fcm nesnelerle kesi\u015fim testi yapmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>Etkile\u015fim ve Se\u00e7im \u0130\u015flemleri<\/h4>\n<p>Raycasting'in en yayg\u0131n kullan\u0131m alanlar\u0131, bir nesneyi se\u00e7mek, s\u00fcr\u00fcklemek veya belirli bir noktaya t\u0131klamay\u0131 alg\u0131lamakt\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n fareyle bir 3D nesneye t\u0131klamas\u0131 durumunda, fare pozisyonundan bir \u0131\u015f\u0131n at\u0131l\u0131r ve bu \u0131\u015f\u0131n\u0131n hangi nesneyle kesi\u015fti\u011fi belirlenir.<\/p>\n<h3>Raycasting'de normalize() Neden Kritik?<\/h3>\n<p><code>normalize()<\/code> fonksiyonu, raycasting'in do\u011frulu\u011fu ve tutarl\u0131l\u0131\u011f\u0131 i\u00e7in merkezi bir role sahiptir. I\u015f\u0131n\u0131n y\u00f6n vekt\u00f6r\u00fcn\u00fcn normalize edilmesi, kesi\u015fim hesaplamalar\u0131n\u0131n do\u011fru ve \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>I\u015f\u0131n Y\u00f6n\u00fcn\u00fcn Standartla\u015ft\u0131r\u0131lmas\u0131<\/h4>\n<p>Raycasting algoritmalar\u0131, \u0131\u015f\u0131n\u0131n y\u00f6n vekt\u00f6r\u00fcn\u00fcn birim vekt\u00f6r olmas\u0131n\u0131 bekler. E\u011fer y\u00f6n vekt\u00f6r\u00fc normalize edilmemi\u015fse, yani b\u00fcy\u00fckl\u00fc\u011f\u00fc 1'den farkl\u0131ysa, kesi\u015fim hesaplamalar\u0131 yanl\u0131\u015f sonu\u00e7lar verebilir. \u00d6rne\u011fin, bir \u0131\u015f\u0131n\u0131n y\u00f6n vekt\u00f6r\u00fcn\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fc 2 ise, algoritmalar \u0131\u015f\u0131n\u0131n iki kat daha \"uzun\" oldu\u011funu varsayarak hatal\u0131 kesi\u015fim noktalar\u0131 hesaplayabilir. Normalizasyon, t\u00fcm \u0131\u015f\u0131n y\u00f6nlerinin standart bir b\u00fcy\u00fckl\u00fckte (1) olmas\u0131n\u0131 garanti eder.<\/p>\n<h4>Hesaplama Tutarl\u0131l\u0131\u011f\u0131 ve Performans<\/h4>\n<p>\u00c7o\u011fu 3D k\u00fct\u00fcphanesi ve donan\u0131m\u0131, birim vekt\u00f6rlerle \u00e7al\u0131\u015fmak \u00fczere optimize edilmi\u015ftir. Normalize edilmi\u015f y\u00f6n vekt\u00f6rleri, \u00e7arp\u0131\u015fma algoritmalar\u0131n\u0131n daha h\u0131zl\u0131 ve tutarl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Normalize edilmemi\u015f vekt\u00f6rler, gereksiz \u00e7arpma ve b\u00f6lme i\u015flemleri gerektirebilir veya kayan nokta hassasiyeti sorunlar\u0131na yol a\u00e7abilir.<\/p>\n<h4>Hatal\u0131 Sonu\u00e7lar\u0131n \u00d6nlenmesi<\/h4>\n<p>Normalize edilmemi\u015f bir y\u00f6n vekt\u00f6r\u00fcyle yap\u0131lan raycasting, a\u015fa\u011f\u0131daki gibi sorunlara yol a\u00e7abilir:<br \/>\n*   <strong>Yanl\u0131\u015f Kesi\u015fim Noktalar\u0131:<\/strong> I\u015f\u0131n\u0131n kesi\u015fti\u011fi nokta, ger\u00e7ekte olmas\u0131 gerekenden daha yak\u0131n veya daha uzak hesaplanabilir.<br \/>\n*   <strong>Yanl\u0131\u015f Kesi\u015fim Tespiti:<\/strong> Baz\u0131 durumlarda, \u0131\u015f\u0131n asl\u0131nda kesi\u015fti\u011fi bir nesneyi ka\u00e7\u0131rabilir veya kesi\u015fmedi\u011fi bir nesneyle kesi\u015fti\u011fini bildirebilir.<br \/>\n*   <strong>Performans D\u00fc\u015f\u00fc\u015f\u00fc:<\/strong> \u00d6zellikle karma\u015f\u0131k sahnelerde, normalize edilmemi\u015f vekt\u00f6rlerle yap\u0131lan tekrarlayan hesaplamalar performans\u0131 olumsuz etkileyebilir.<\/p>\n<h3>normalize() Kullan\u0131m\u0131na \u0130li\u015fkin Pratik \u00d6rnekler<\/h3>\n<p>Three.js'te <code>normalize()<\/code> fonksiyonunun raycasting ile nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6steren pratik bir \u00f6rnek \u00fczerinden konuyu peki\u015ftirelim.<\/p>\n<h4>Three.js'te Bir Ray Olu\u015fturma<\/h4>\n<p>Bir <code>THREE.Raycaster<\/code> nesnesi olu\u015ftururken, genellikle kamera ve fare\/dokunma koordinatlar\u0131 kullan\u0131l\u0131r. Bu koordinatlar, 3D uzayda bir \u0131\u015f\u0131n olu\u015fturmak i\u00e7in d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">const raycaster = new THREE.Raycaster();\nconst mouse = new THREE.Vector2();\n\nfunction onMouseMove(event) {\n    \/\/ Fare koordinatlar\u0131n\u0131 normalize edilmi\u015f cihaz koordinatlar\u0131na d\u00f6n\u00fc\u015ft\u00fcr\n    \/\/ (-1 ile +1 aral\u0131\u011f\u0131na)\n    mouse.x = (event.clientX \/ window.innerWidth) * 2 - 1;\n    mouse.y = -(event.clientY \/ window.innerHeight) * 2 + 1;\n}\n\nwindow.addEventListener('mousemove', onMouseMove, false);<\/pre>\n<p><\/code><\/p>\n<h4>Normalize Edilmi\u015f Y\u00f6n Vekt\u00f6r\u00fc ile Raycasting<\/h4>\n<p><code>raycaster.setFromCamera(coords, camera)<\/code> metodu, verilen 2D koordinatlar\u0131 ve kameray\u0131 kullanarak bir \u0131\u015f\u0131n olu\u015fturur. Bu metodun i\u00e7 mekanizmas\u0131, \u0131\u015f\u0131n\u0131n y\u00f6n vekt\u00f6r\u00fcn\u00fc otomatik olarak normalize eder. Ancak, e\u011fer \u0131\u015f\u0131n\u0131 manuel olarak bir ba\u015flang\u0131\u00e7 noktas\u0131 ve y\u00f6n vekt\u00f6r\u00fc ile olu\u015fturuyorsan\u0131z, y\u00f6n vekt\u00f6r\u00fcn\u00fc manuel olarak normalize etmeniz kritik \u00f6neme sahiptir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ \u00d6rnek: Manuel olarak bir \u0131\u015f\u0131n olu\u015fturma ve y\u00f6n vekt\u00f6r\u00fcn\u00fc normalize etme\nconst origin = new THREE.Vector3(0, 0, 0); \/\/ Ba\u015flang\u0131\u00e7 noktas\u0131\nconst direction = new THREE.Vector3(1, 1, 1); \/\/ Y\u00f6n vekt\u00f6r\u00fc (normalize edilmemi\u015f)\n\n\/\/ Y\u00f6n vekt\u00f6r\u00fcn\u00fc normalize et\ndirection.normalize();\n\nconst customRaycaster = new THREE.Raycaster(origin, direction);\n\/\/ \u015eimdi customRaycaster, do\u011fru normalize edilmi\u015f bir y\u00f6n vekt\u00f6r\u00fcne sahiptir.<\/pre>\n<p><\/code><\/p>\n<h4>Kod \u00d6rne\u011fi: Fare T\u0131klamas\u0131 ile Nesne Se\u00e7imi<\/h4>\n<p>Bu \u00f6rnek, fare t\u0131klamas\u0131yla sahnedeki bir nesneyi nas\u0131l se\u00e7ece\u011fimizi g\u00f6sterir ve <code>normalize()<\/code>'\u0131n dolayl\u0131 olarak nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 a\u00e7\u0131klar.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Three.js sahnesi, kamera ve renderer'\u0131n ayarland\u0131\u011f\u0131n\u0131 varsayal\u0131m.\n\/\/ ... (sahne, kamera, renderer olu\u015fturma kodlar\u0131) ...\n\nconst raycaster = new THREE.Raycaster();\nconst mouse = new THREE.Vector2();\nconst objects = []; \/\/ Sahnedeki etkile\u015fimli nesneler dizisi\n\n\/\/ K\u00fcp olu\u015fturup sahneye ekleyelim\nconst geometry = new THREE.BoxGeometry(1, 1, 1);\nconst material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });\nconst cube = new THREE.Mesh(geometry, material);\ncube.position.set(0, 0, -5);\nscene.add(cube);\nobjects.push(cube);\n\nfunction onMouseClick(event) {\n    \/\/ Fare koordinatlar\u0131n\u0131 normalize edilmi\u015f cihaz koordinatlar\u0131na d\u00f6n\u00fc\u015ft\u00fcr\n    mouse.x = (event.clientX \/ window.innerWidth) * 2 - 1;\n    mouse.y = -(event.clientY \/ window.innerHeight) * 2 + 1;\n\n    \/\/ Raycaster'\u0131 kamera ve fare pozisyonuna g\u00f6re ayarla\n    \/\/ Bu metod, dahili olarak \u0131\u015f\u0131n\u0131n y\u00f6n vekt\u00f6r\u00fcn\u00fc normalize eder.\n    raycaster.setFromCamera(mouse, camera);\n\n    \/\/ I\u015f\u0131n\u0131n kesi\u015fti\u011fi nesneleri bul\n    const intersects = raycaster.intersectObjects(objects, true);\n\n    if (intersects.length > 0) {\n        \/\/ \u0130lk kesi\u015fen nesneyi se\u00e7\n        const intersectedObject = intersects[0].object;\n        console.log(\"Se\u00e7ilen nesne:\", intersectedObject.uuid);\n        intersectedObject.material.color.set(0xff0000); \/\/ Rengini k\u0131rm\u0131z\u0131 yap\n    } else {\n        console.log(\"Hi\u00e7bir nesne se\u00e7ilmedi.\");\n        cube.material.color.set(0x00ff00); \/\/ Rengi tekrar ye\u015fil yap\n    }\n}\n\nwindow.addEventListener('click', onMouseClick, false);\n\n\/\/ ... (animasyon d\u00f6ng\u00fcs\u00fc) ...<\/pre>\n<p><\/code><br \/>\nBu \u00f6rnekte <code>raycaster.setFromCamera()<\/code> metodu, arka planda kameran\u0131n projeksiyon matrisini kullanarak fare koordinatlar\u0131ndan 3D bir \u0131\u015f\u0131n olu\u015fturur ve bu \u0131\u015f\u0131n\u0131n y\u00f6n vekt\u00f6r\u00fcn\u00fc otomatik olarak normalize eder. Bu sayede geli\u015ftiricinin manuel olarak <code>normalize()<\/code> \u00e7a\u011f\u0131rmas\u0131na gerek kalmaz. Ancak, e\u011fer \u0131\u015f\u0131n\u0131 kendi ba\u015flang\u0131\u00e7 noktan\u0131z ve y\u00f6n vekt\u00f6r\u00fcn\u00fczle olu\u015fturuyorsan\u0131z, y\u00f6n vekt\u00f6r\u00fcn\u00fc <code>normalize()<\/code> ile birim vekt\u00f6re \u00e7evirmeniz \u015fartt\u0131r.<\/p>\n<h3>Yayg\u0131n Hatalar ve En \u0130yi Uygulamalar<\/h3>\n<p><code>normalize()<\/code> fonksiyonunun \u00f6nemini anlamak, Three.js ile \u00e7al\u0131\u015f\u0131rken bir\u00e7ok hatadan ka\u00e7\u0131nman\u0131za yard\u0131mc\u0131 olur. \u0130\u015fte dikkat etmeniz gereken baz\u0131 noktalar.<\/p>\n<h4>Normalizasyonun Atlanmas\u0131 Durumunda Ortaya \u00c7\u0131kan Sorunlar<\/h4>\n<p>*   <strong>Yanl\u0131\u015f Y\u00f6nler:<\/strong> \u00d6zellikle kamera kontrolleri veya \u00f6zel \u0131\u015f\u0131n atma algoritmalar\u0131 yazarken, normalize edilmemi\u015f y\u00f6n vekt\u00f6rleri beklenmedik ve yanl\u0131\u015f y\u00f6nlere neden olabilir.<br \/>\n*   <strong>Hatal\u0131 \u00c7arp\u0131\u015fma Tespiti:<\/strong> \u00c7arp\u0131\u015fma algoritmalar\u0131, normalize edilmi\u015f y\u00f6n vekt\u00f6rlerine g\u00fcvenir. Atland\u0131\u011f\u0131nda, nesnelerin yanl\u0131\u015f yerlerde veya hi\u00e7 \u00e7arp\u0131\u015fmad\u0131\u011f\u0131 durumlar ortaya \u00e7\u0131kabilir.<br \/>\n*   <strong>G\u00f6rsel Hatalar:<\/strong> I\u015f\u0131kland\u0131rma veya g\u00f6lgelendirme hesaplamalar\u0131nda normal vekt\u00f6rlerin normalize edilmemesi, y\u00fczeylerin yanl\u0131\u015f g\u00f6r\u00fcnmesine neden olabilir.<\/p>\n<h4>Performans \u0130pu\u00e7lar\u0131<\/h4>\n<p>*   <strong>Gereksiz Normalizasyondan Ka\u00e7\u0131n\u0131n:<\/strong> Bir vekt\u00f6r zaten birim vekt\u00f6rse veya b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fcn \u00f6nemli oldu\u011fu bir ba\u011flamda kullan\u0131l\u0131yorsa, tekrar normalize etmek gereksizdir.<br \/>\n*   <strong>Three.js Metodlar\u0131na G\u00fcvenin:<\/strong> <code>raycaster.setFromCamera()<\/code> gibi Three.js'in kendi metodlar\u0131 genellikle dahili olarak gerekli normalizasyonu yapar. Bu metodlar\u0131 kullanmak, kodu daha temiz ve hatas\u0131z hale getirir.<br \/>\n*   <strong>Klonlama ve Normalizasyon:<\/strong> Bir vekt\u00f6r\u00fc normalize etmeniz gerekiyorsa ancak orijinal vekt\u00f6r\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fc korumak istiyorsan\u0131z, vekt\u00f6r\u00fc klonlay\u0131p klonu normalize edin: <code>const normalizedDirection = myDirection.clone().normalize();<\/code><\/p>\n<h4>Debugging Yakla\u015f\u0131mlar\u0131<\/h4>\n<p>*   <strong><code>vector.length()<\/code> Kontrol\u00fc:<\/strong> \u015e\u00fcpheye d\u00fc\u015ft\u00fc\u011f\u00fcn\u00fczde, bir vekt\u00f6r\u00fcn <code>length()<\/code> metodunu \u00e7a\u011f\u0131rarak b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fc kontrol edin. E\u011fer 1 de\u011filse ve birim vekt\u00f6r olmas\u0131 gerekiyorsa, normalizasyon eksik demektir.<br \/>\n*   <strong>G\u00f6rsel Debugging:<\/strong> Bazen vekt\u00f6rleri (\u00f6rne\u011fin <code>THREE.ArrowHelper<\/code> kullanarak) g\u00f6rselle\u015ftirmek, y\u00f6nlerinin do\u011fru olup olmad\u0131\u011f\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olabilir. Normalize edilmemi\u015f vekt\u00f6rler, oklar\u0131n beklenenden daha uzun veya k\u0131sa g\u00f6r\u00fcnmesine neden olabilir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p><code>normalize()<\/code> fonksiyonu, 3D grafik programlaman\u0131n g\u00f6r\u00fcnmez kahramanlar\u0131ndan biridir. Three.js gibi modern k\u00fct\u00fcphanelerde, \u00f6zellikle raycasting gibi kritik etkile\u015fim mekanizmalar\u0131nda do\u011fru ve tutarl\u0131 sonu\u00e7lar elde etmek i\u00e7in y\u00f6n vekt\u00f6rlerinin birim vekt\u00f6r olmas\u0131n\u0131 sa\u011flamak zorunludur. Vekt\u00f6r normalizasyonunun matematiksel temellerini ve Three.js i\u00e7indeki uygulamas\u0131n\u0131 anlamak, daha sa\u011flam, hatas\u0131z ve performansl\u0131 3D uygulamalar geli\u015ftirmenize olanak tan\u0131r. Unutmay\u0131n, bir \u0131\u015f\u0131n\u0131n y\u00f6n\u00fc \u00f6nemlidir, b\u00fcy\u00fckl\u00fc\u011f\u00fc de\u011fil.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4><code>normalize()<\/code> her zaman gerekli midir?<\/h4>\n<p>Hay\u0131r, her zaman gerekli de\u011fildir. Sadece bir vekt\u00f6r\u00fcn y\u00f6n bilgisinin \u00f6nemli oldu\u011fu ve b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fcn 1 olmas\u0131 gereken durumlarda (\u00f6rne\u011fin, \u0131\u015f\u0131n y\u00f6nleri, y\u00fczey normalleri, birim h\u0131z vekt\u00f6rleri) kullan\u0131l\u0131r. Bir nesnenin konumu veya bir kuvvetin b\u00fcy\u00fckl\u00fc\u011f\u00fc gibi durumlarda normalize edilmemi\u015f vekt\u00f6rler kullan\u0131l\u0131r.<\/p>\n<h4><code>normalize()<\/code> performans\u0131 etkiler mi?<\/h4>\n<p>Tek ba\u015f\u0131na <code>normalize()<\/code> i\u015flemi \u00e7ok k\u00fc\u00e7\u00fck bir hesaplama maliyetine sahiptir (bir karek\u00f6k ve birka\u00e7 b\u00f6lme). Ancak, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde veya her karede binlerce kez gereksiz yere \u00e7a\u011fr\u0131l\u0131rsa, toplamda bir performans etkisi yaratabilir. Genellikle, do\u011fru yerde kullan\u0131ld\u0131\u011f\u0131nda sa\u011flad\u0131\u011f\u0131 do\u011fruluk ve algoritmalar\u0131n daha verimli \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131mas\u0131 nedeniyle performansa olumlu katk\u0131 sa\u011flar.<\/p>\n<h4><code>normalize()<\/code> ve <code>setLength(1)<\/code> aras\u0131ndaki fark nedir?<\/h4>\n<p><code>normalize()<\/code> bir vekt\u00f6r\u00fcn mevcut y\u00f6n\u00fcn\u00fc koruyarak b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fc 1 yapar. <code>setLength(1)<\/code> de ayn\u0131 sonucu verir ancak daha genel bir metottur; vekt\u00f6r\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fc istedi\u011finiz herhangi bir de\u011fere ayarlayabilirsiniz. Yani, <code>vector.normalize()<\/code> asl\u0131nda <code>vector.setLength(1)<\/code> ile ayn\u0131 i\u015flevi g\u00f6r\u00fcr.<\/p>\n<h4>Sadece y\u00f6n vekt\u00f6rleri mi normalize edilir?<\/h4>\n<p>Temelde evet. Normalizasyonun ana amac\u0131, bir vekt\u00f6r\u00fcn b\u00fcy\u00fckl\u00fc\u011f\u00fcnden ba\u011f\u0131ms\u0131z olarak sadece y\u00f6n\u00fcn\u00fc elde etmektir. Bu nedenle, y\u00f6n\u00fc temsil eden vekt\u00f6rler (\u0131\u015f\u0131n y\u00f6nleri, normal vekt\u00f6rler, birim h\u0131z vekt\u00f6rleri vb.) normalize edilir.<\/p>\n<h4>Three.js'te <code>normalize()<\/code>'\u0131 nerede bulabilirim?<\/h4>\n<p><code>normalize()<\/code> metodu, <code>THREE.Vector2<\/code>, <code>THREE.Vector3<\/code> ve <code>THREE.Vector4<\/code> gibi t\u00fcm vekt\u00f6r s\u0131n\u0131flar\u0131nda bulunur. Bir <code>Vector3<\/code> nesnesi olu\u015fturduktan sonra do\u011frudan <code>myVector.normalize()<\/code> \u015feklinde \u00e7a\u011f\u0131rabilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"normalize() Fonksiyonu Ne Yapar ve Three.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-39026","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar? - Kodlar\u0131n Gizemli 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:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar?\" \/>\n<meta property=\"og:description\" content=\"normalize() Fonksiyonu Ne Yapar ve Three.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-12T16:30:36+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar?\",\"datePublished\":\"2026-02-12T16:30:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/\"},\"wordCount\":2186,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/\",\"name\":\"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-12T16:30:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar? - Kodlar\u0131n Gizemli 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:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/","og_locale":"tr_TR","og_type":"article","og_title":"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar?","og_description":"normalize() Fonksiyonu Ne Yapar ve Three.","og_url":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-12T16:30:36+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar?","datePublished":"2026-02-12T16:30:36+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/"},"wordCount":2186,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/","url":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/","name":"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-12T16:30:36+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/normalize-fonksiyonu-ne-yapar-ve-three-js-raycasting-neden-ona-ihtiyac-duyar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"normalize() Fonksiyonu Ne Yapar ve Three.js Raycasting Neden Ona \u0130htiya\u00e7 Duyar?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39026"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39026\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}