Neden ?
Çünkü, bir kamera projeksiyon görüntüsünü temsil eder.
Ancak 3D Kamera durumunda (Sanal Kamera), kamera dünya yerine hareket eder. Bu cevaptan sonra ayrıntılı bir açıklama yaptım.
Matematiksel Anlamak
Projeksiyon Görünümü uzayda hareket eder ve yönünü değiştirir. Dikkat edilmesi gereken ilk şey, ekranda istenen projeksiyonun görüş yönü ile değişmediğidir.
Bu nedenle, istenen projeksiyonu elde etmek için başka şeyleri dönüştürürüz.
Http://opengl.org adresinden anlamak
Kamerayı hareket ettirmek için OpenGL uygulamanızın sahneyi kamera dönüşümünün tersi yönde hareket ettirmesi gerekir. OpenGL söz konusu olduğunda kamera yoktur. Daha spesifik olarak, kamera her zaman göz boşluğu koordinatında bulunur (0, 0, 0)
Http://open.gl adresinden anlama
Ayrıca, aşağıdaki satırları http://open.gl/transformations sayfasının Görünüm matrisi kısmından paylaşmak istiyorum
Bir kamera dönüşümünü simüle etmek için, aslında dünyayı bu dönüşümün tersi ile dönüştürmek zorundasınız. Örnek: Kamerayı yukarı taşımak istiyorsanız, dünyayı aşağıya çekmek zorundasınız.
Perspektifle anlama
Gerçek dünyada, olayları "perspektif" denilen bir şekilde görüyoruz.
Perspektif, uzaktaki nesnelerin size daha yakın olanlardan daha küçük göründüğü kavramını ifade eder. Perspektif ayrıca düz bir yolun ortasında oturuyorsanız, yolun sınırlarını iki yakınsak çizgi olarak gördüğünüz anlamına gelir.
Bu bakış açısı. Perspektif, 3B projelerde kritik öneme sahiptir. Perspektif olmadan, 3D dünyası gerçek görünmüyor.
Bu doğal ve açık görünse de, bir bilgisayarda bir 3B oluşturma oluşturduğunuzda, bir 2B yüzey olan bilgisayar ekranında bir 3B dünyayı simüle etmeye çalıştığınızı düşünmeniz önemlidir.
Bilgisayar ekranının arkasında gerçek bir 3B sahne olduğunu ve bilgisayar ekranınızın "camı" ndan izlediğinizi hayal edin. Bakış açısını kullanarak hedefiniz, ekranınızın bu “camına” yansıtılan şeyleri ekranın arkasında gerçek bir 3B dünya varmış gibi yapan bir kod oluşturmaktır. Tek uyarı, bu 3B dünyanın gerçek olmadığı… Bu sadece 3B dünyanın matematiksel bir simülasyonudur.
Dolayısıyla, bir sahneyi 3D olarak simüle etmek için 3B oluşturmayı kullanırken ve 3D sahneyi ekranınızın 2B yüzeyine yansıtırken, işleme perspektif yansıtma denir.
Ne elde etmek istediğinizi sezgisel olarak düşünerek başlayın. Bir nesne görüntüleyiciye daha yakınsa, nesnenin daha büyük görünmesi gerekir. Nesne daha uzaktaysa, daha küçük görünmesi gerekir. Ayrıca, bir nesne izleyiciden uzaklaşıyorsa, düz bir çizgide, uzaklara doğru uzaklaştıkça ekranın ortasına doğru birleşmesini istersiniz.
Perspektifi matematiğe çevirme
Çizimi aşağıdaki şekilde görüntülerken, 3B sahnenize bir nesnenin yerleştirildiğini hayal edin. 3B dünyasında, nesnenin konumu, başlangıç noktasında göz noktasında bulunan 3B koordinat sistemine atıfta bulunarak, xW, yW, zW olarak tanımlanabilir. Nesnenin gerçekte, ekranın dışındaki 3B sahnesinde konumlandırıldığı yer burasıdır.
İzleyici bu nesneyi ekranda izlerken, 3D nesnesi, ekranın 2D koordinat sistemine (projeksiyon düzlemi) başvuran xP ve yP olarak tanımlanan bir 2D konumuna "yansıtılır".
Bu değerleri matematiksel bir formüle koymak için, dünya eksenleri için 3B koordinat sistemi kullanacağım, burada x ekseni sağa, y noktalara ve pozitif z noktalarına ekran içinde işaret ediyor. 3B başlangıç, izleyicinin gözünün konumunu belirtir. Bu yüzden, ekranın camı z eksenine dik olan (dik açıda) bir düzlem üzerinde, bazı z'de zProj diyeceğim.
Öngörülen xP ve yP pozisyonlarını, xW ve yW dünya pozisyonlarını zW ile bölerek hesaplayabilirsiniz:
xP = K1 * xW / zW
yP = K2 * yW / zW
K1 ve K2, projeksiyon düzleminizin en boy oranı (görüş alanınız) ve geniş açılı görüş derecesini hesaba katan gözünüzün "görüş alanı" gibi geometrik faktörlerden elde edilen sabitlerdir.
Bu dönüşümün perspektifi nasıl simüle ettiğini görebilirsiniz. Ekranın kenarlarına yakın olan noktalar, göze olan mesafe (zW) arttıkça merkeze doğru itilir. Aynı zamanda, merkeze (0,0) yakın olan noktalar göze olan uzaklıktan çok daha az etkilenir ve merkeze yakın kalır.
Z'nin bu bölümü, ünlü “perspektif bölünmesi” dir.
Şimdi, 3B sahnedeki bir nesnenin bir dizi tepe noktası olarak tanımlandığını düşünün. Böylece, bu tür bir dönüşümü tüm geometri köşelerine uygulayarak, nesnenin göz noktasından uzaktayken büzülmesini sağlarsınız.
Diğer Önemli Durumlar
- 3D Kamera durumunda (Sanal Kamera), kamera dünya yerine hareket eder.
3D kameraları daha iyi anlamak için bir film çektiğinizi hayal edin. Çekim yapmak istediğiniz bir sahne ayarlamak zorundasınız ve bir kameraya ihtiyacınız var. Çekim yapmak için, sahnedeki nesneleri farklı açılardan ve bakış açılarından çekerek, kameranızla sahnede dolaşacaksınız.
Aynı çekim işlemi bir 3D kamera ile gerçekleşir. Oluşturduğunuz "sanal" sahnenin etrafında dolanabilecek bir "sanal" kameraya ihtiyacınız var.
İki popüler çekim stili, dünyayı bir karakterin gözünden (aynı zamanda birinci şahıs kamerası olarak da bilinir) kullanarak izlemeyi veya kamerayı bir karakterde göstermeyi ve onları görmeyi (üçüncü şahıs kamerası olarak bilinir) içerir.
Bu, bir 3D kameranın temel öncülüdür: bir 3D sahnesinde dolaşmak ve görüntüleri belirli bir bakış açısıyla yapmak için kullanabileceğiniz sanal bir kamera.
Dünya mekanını anlamak ve mekanı incelemek
Bu tür davranışları kodlamak için, 3B dünyasının içeriğini, yalnızca dünya koordinat sistemi bakış açısıyla değil, başka bir sabit bakış açısından da kameranın bakış açısıyla oluşturacaksınız.
Genel olarak konuşursak, bir 3D sahnesinde bir dizi 3D model bulunur. Modeller, kendi koordinat sistemlerine atıfta bulunulan bir dizi köşe ve üçgen olarak tanımlanır. Modellerin tanımlandığı alana model (veya yerel) alan denir.
Model nesnelerini 3B sahneye yerleştirdikten sonra, bu modellerin köşelerini bir "dünya dönüşümü" matrisi kullanarak dönüştürürsünüz. Her nesnenin, nesnenin dünyanın neresinde olduğunu ve nasıl yönlendirildiğini tanımlayan kendi dünya matrisi vardır.
Bu yeni referans sistemine "dünya alanı" (veya global alan) denir ve onu yönetmenin basit bir yolu, bir dünya dönüşüm matrisini her nesneye ilişkilendirmektir.
Bir 3D kameranın davranışını uygulamak için ek adımlar atmanız gerekir. Dünyaya - dünya menşeine değil - ancak 3D kameranın kendisinin referans sistemine referans vereceksiniz.
İyi bir strateji, kamerayı 3B dünyasında gerçek bir 3B nesne olarak ele almayı içerir. Diğer tüm 3B nesnelerde olduğu gibi, fotoğraf makinesini 3B dünyasında istenen konuma ve yönde yerleştirmek için bir "dünya dönüşümü" matrisi kullanırsınız. Bu kamera dünyası dönüşümü matrisi, kamera nesnesini orijinalden ileriye dönük (z ekseni boyunca), gerçek dünyaya (xc, yc, zc) ve dünya dönüşüne dönüştürür.
Aşağıdaki şekil Dünya (x, y, z) koordinat sistemi ve Görünüm (kamera) (x ', y', z ') koordinat sistemi arasındaki ilişkileri göstermektedir.