Ana Menü
· Ana Sayfa
· Dosyalar
· Dökümanlar
· Forum
· Günün Resmi
· Haber Arşivi
· WWW Linkleri
· Üye Listesi

     Forumlar

 strncpy ve strncpy_s
 Konu adi : Borland c++ Builder ile Amiral Batti
 Rady10 - YerliOyun
 Kabusta Kaybolmak
 Konsol da programı bekletmek
 Oyun programlama icin hangi programlama dilli ?
 flash! şanlıurfa bilgisayar oyununda(no rapid)
 Sevgilim Olur musun?
 Directx'e başlamak isteyenler bi bakın
 PSP programlama
 Flash tan php
 Bilgisyr oyunu yapmam için üniverstde hangi bölüme girmeliym
 www.arshiv.gen.ms
 Cimg.h ilgilenenler icin
 müttefik oyunu

Konu Disi
 Emraah
 Yeni sitemiz açıldı
 Kalp krizi durumunda ne yapılmalı?
 Oyun sektöründe hangi görevde çalışmak isterdiniz?
 Takım arkadaşı sorunu
 msn de renklı nıck
 pc hata veriyor ! YARDIM!!
 Gülmek isteyenler Buraya
 İnanılmaz hl 2 modu görüntüsü
 Computer Languages History

[ Forumlara Git ]


oyunyapimi.org: Forums

www.oyunyapimi.org :: Başlığı Görüntüle - Neden WorldInverseTraverse?
 SSSSSS   AramaArama   Kullanıcı GruplarıKullanıcı Grupları   ProfilProfil   LoginLogin 

Neden WorldInverseTraverse?

 
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> OpenGL, DirectX
Önceki başlık :: Sonraki başlık  
Yazar Mesaj
haydar



Kayıt: Jun 01, 2005
Mesajlar: 22
Nereden: Adana

MesajTarih: Fri Jul 22, 2005 3:38 pm    Mesaj konusu: Neden WorldInverseTraverse? Alıntıyla Cevap Ver

Merhabalar Site Sakinleri,

Shader kodları incelerken bir şey dikkatimi çekti. Pozisyonları dünya koordinatlarına taşımak için World matrisi ile tranform ediyorlar, buraya kadar tamam. Ama normalleri dünya koordinatlarına taşımak için neden World matrisi dururken WorldInverseTraverse diye bir matrisle transform ediyorlar onu anlayamadım. Yardımcı olur musunuz?

WorldInverseTraverse matrisine baktım, World matrisinin tersinin transpoz unu alarak yapıyorlar.

Başka bir örnekte de normalleri yine World matrisi ile transform etmişler, onu anladım. Ama neden World matrisinin tersinin transpozu ile tranform etmişler anlamadım işte Rolling Eyes

Haydar
Başa dön
Kullanıcı profilini gör
haydar



Kayıt: Jun 01, 2005
Mesajlar: 22
Nereden: Adana

MesajTarih: Fri Jul 22, 2005 3:40 pm    Mesaj konusu: Alıntıyla Cevap Ver

Çok pardon yau, o kadar çalışınca beynim sulanmış
WorldInverseTraverse değil WorldInverseTranspose matrisin adı.
Yanlış yazmışım Embarassed
Başa dön
Kullanıcı profilini gör
stroma



Kayıt: Mar 31, 2003
Mesajlar: 169

MesajTarih: Fri Jul 22, 2005 5:32 pm    Mesaj konusu: Alıntıyla Cevap Ver

ne işe yarayan bir shader kodu acaba bahsettiğin?
shader içerisinden vertex position dönüşümü için:
ModelViewProjectionMatrix * IncomingVertex yapılır. tabii, shader bu, istediğini yaparsın, planar bir shadow için farklı şekle çevrilir mesela.
not: bazı kart farklılıkları yüzünden yukardaki kod her zaman yerine oturmaz(özellikle multipass kullanırken), bu nedenle glsl için ftransform kullanmak daha iyi*

*orange book: In general, the vertex shader code
gl_Position = gl_ModelViewProjectMatrix * gl_Vertex
will not result in positional invariance because of possible compiler optimizations and potential underlying hardware differences.
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder MSN Messenger
OsmanTuran



Kayıt: Apr 09, 2004
Mesajlar: 210
Nereden: Mersin - K.Maraş gel-git halinde

MesajTarih: Fri Jul 22, 2005 6:37 pm    Mesaj konusu: Alıntıyla Cevap Ver

Normal vektorlerini siradan vertex bilgileri gibi world matrisiyle transform edemezsin. Dogru vektorlere ancak WorldInverseTranspose matrisiyle transform ederek ulasabilirsin. Nedeni nedir diyorsan nvidia'nın per-pixel lighting ile ilgili whitepaper larini karistir (Eski tarihli olanlar). Orada cok guzel bir sekilde sekillerle anlatiliyor.
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et MSN Messenger
stroma



Kayıt: Mar 31, 2003
Mesajlar: 169

MesajTarih: Fri Jul 22, 2005 8:11 pm    Mesaj konusu: Alıntıyla Cevap Ver

ben eksik anlamışım olayı. kusura bakma.
cevabı Osman Turan ın dediği yerde veya benim daha açıklayıcı bulduğum http://www.lighthouse3d.com/opengl/glsl/index.php?normalmatrix adresinde bulabilirsin. nvidia da slide lar var, pek anlaşılmıyor olay.

verdiğim adreste olay glsl ile anlatılıyor. gl_NormalMatrix dedikleri 3x3 inverse transpose model-view matrix in ta kendisidir aslında.

kolay gelsin.
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder MSN Messenger
khognar



Kayıt: Jul 19, 2005
Mesajlar: 11
Nereden: Ankara

MesajTarih: Sun Jul 24, 2005 2:22 am    Mesaj konusu: Alıntıyla Cevap Ver

vertex ve normal vektörlerin transformasyonunda hiç bir fark yoktur.ancak oPos registerı setlenirken özel olarak projeksiyon(matWorldViewProjection) matrisi kullanılır.bunun nedeni ise output registerının gözlem merkezine olan bağımlılığıdır.normal vektörlerinde projeksiyon matrisinin kullanılmamasının temel nedeni shader sabitlerine yüklenen ışık konumlarının gözlem merkezinden bağımsızlığıdır.

transformasyon(matWorldView) ve projeksiyon(matWorldViewProjection) matrisleri arasındaki tek fark projeksiyon matrisindeki gözlemci bilgisidir.
transpose işleminin bahsettiğin olayla bi ilgisi yoktur.her 2 matrisde işleme sokulmadan transpose edilir.en azından directx'de böyle.opengl'de bunu otomatik gerçekleştiren bi yapı varmı bilemiyorum.

vertex dönüşümü için transformasyon matrisinin kullanıldığı alanlara bi örnek vermek gerekirse sis , dalgalanma gibi vertex koordinatlarının kullanıldığı efeklerdeki efek katsayıları üretilimi.

daha ayrıntılı bilgi için directx sdk'sındaki dönüşümler başlığını incelemeni tavsiye ederim.çalışmalarında başarılar.
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder MSN Messenger
haydar



Kayıt: Jun 01, 2005
Mesajlar: 22
Nereden: Adana

MesajTarih: Mon Jul 25, 2005 4:20 pm    Mesaj konusu: Alıntıyla Cevap Ver

Sağolasın stroma kardeş, şimdi anladım sebebini. Böyle doğrudan link verildiğinde çok etkili oluyor. Çok yaşa e mi Cool
Başa dön
Kullanıcı profilini gör
KePhReNZ



Kayıt: Jan 02, 2003
Mesajlar: 55
Nereden: İzmir

MesajTarih: Mon Jul 25, 2005 9:40 pm    Mesaj konusu: Alıntıyla Cevap Ver

Merhaba,

Normal koşullar altında obje koordinatlarından dünya koordinatlarına taşımanın hiçbir sakıncası yoktur. Bu durum sadece ve sadece transformasyon orthogonal bir matrisle yani transpozu tersine eşit ( sağolassın asyncore bu eşşeğe orthogonal matrisi hatırlattığın için ) bir matrisle gerçekleştirilebilir.

Bu translation, rotation ı kapsar, eğer uniform scaling yoksa yani bir boyutta diğerlerinden farklı boyut değiştirme işlemi yapılıyorsa matrisin orthoganlliği bozulur. Bu durumda Normal , normali bulunduğu yüzeye göre çevirmek gerekir. Bu yüzden bazi işlemler ugulanır. Bunlar sonucu oluşan transformasyon world transformasyonunun tersinin transpozu şeklindedir.

Saygılarımla,
Ahmet Bilgili
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder
asyncore



Kayıt: Jan 13, 2004
Mesajlar: 110
Nereden: Gevrek, darı ve çiğdem yenen yerden

MesajTarih: Mon Jul 25, 2005 11:04 pm    Mesaj konusu: Re: Neden WorldInverseTraverse? Alıntıyla Cevap Ver

Estafurullah KePhReNZ'cim teknikıl dayrektırım. Ben, Sokrates misali dialekt ile bildiğin bilgiyi ortaya çıkardım o kadar.

haydar demiş ki:
Başka bir örnekte de normalleri yine World matrisi ile transform etmişler, onu anladım.


KePhReNZ'e ek olarak, birşey de bena söyliyim. Tranform matrisin ortogonalsa (yani döndürme, öteleme ve düzgün ölçeklendirme (rotation, translation, uniform scaling) işlemlerinden oluşuyorsa) Inverse Transpose yapmaya gerek yoktur. Zira, ortogonal matrisin tersi evriğine (transpozuna) eşittir. İki işlem birbirinin tersleyeni olduğundan, sonuç tranform matrisine eşittir.

Bu yüzden haydar kardeş, bazı örneklerde World bazılarında WorldInversaTranspose görürsün normalleri transform etmek için.

Saygılar, Sevgiler, Bilgiler
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder
lucifer



Kayıt: Nov 02, 2002
Mesajlar: 215
Nereden: Istanbool

MesajTarih: Tue Jul 26, 2005 11:08 am    Mesaj konusu: Re: Neden WorldInverseTraverse? Alıntıyla Cevap Ver

asyncore demiş ki:
Ben, Sokrates misali dialekt ile bildiğin bilgiyi ortaya çıkardım o kadar.


Dialektik materyalizm forumu acilsin.

Tangent space'de butun normaller (0,0,1)'dir diye tisort bastirilsin, oyorg uyelerine dagitilsin.


Bi de arkadaslar, normallerinize sahip cikin, kimseye transpoze ettirmeyin.

Bir de matris'de scaling varsa, normallerin uzunlugu da degisir genelde, yeniden normalize etmek gerekir...vb.
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
asyncore



Kayıt: Jan 13, 2004
Mesajlar: 110
Nereden: Gevrek, darı ve çiğdem yenen yerden

MesajTarih: Tue Jul 26, 2005 8:23 pm    Mesaj konusu: Alıntıyla Cevap Ver

Hayatında en az bir kere shader (GL tabirince program) yazmış ya da incelemiş olanlar bilirler ki, normaller world matrisi (içinde non-uniform scaling olmasına bakılmaksızın) ile transform edildiğinde her halukarda normalize edilirler...
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder
DG



Kayıt: Mar 06, 2004
Mesajlar: 351
Nereden: Eskişehir

MesajTarih: Wed Jul 27, 2005 12:42 am    Mesaj konusu: Alıntıyla Cevap Ver

asyncore demiş ki:
Hayatında en az bir kere shader (GL tabirince program) yazmış ya da incelemiş olanlar bilirler ki, normaller world matrisi (içinde non-uniform scaling olmasına bakılmaksızın) ile transform edildiğinde her halukarda normalize edilirler...


Bu kısmı anlayamadım yahu. Eğer bahsettiğimiz bir transformasyonsa ve matrisin det=+- 1 ise yani saf döndürme veya saf yansıtma matrisi ise normal'in boyuna bir şey olmaması gerek. Her durumda neden parmaklayalım ki? Olaya shader girince ne oluyor ki? Shocked

Inverse Transpoze'un benim bildiğim olayı şudur:

Elimizde plane'e ait bir tanjant vektörü (t) var bir de plane'in normali var (n)

Bu iki vektör birbirine dik olduğu için ilk durumda skaler çarpımlarının (dot) sıfırdır: n . t = 0

Şimdi, elimizdeki geometriyi M gibi bir dönüşüm matrisine tâbi tuttuk. Haliyle normal de bir dönüşüm geçirdi, o da N gibi bir matrisle dönüşmüş olsun. Dönüşümden sonra da ilk eşitliğin gerçekleşmesi gerekir. Yani tanjant yine normale dik olmalı.

Kod:
Not: tp() fonksiyonu ile gösterilen, transpoz işlemidir.

Nn . Mt      = 0   // Vektörlerin dönüşümlerden sonraki hallerinin skaler çarpımı yine 0 olmalı
tp(Nn)Mt     = 0   // Vektör skaler çarpımının matris çarpımı şeklinde ifadesi
tp(n)tp(N)Mt = 0   // İki matrisin çarpımlarının tranpozları, tranpozlarının ters sırada çarpımlarına eşit olmasından yararlandık


şimdi tp(t) ile v'nin matris çarpımının 0 olduğunu biliyoruz ki bu zaten 'n . t' ifadesine eşit. Bu eşitliğin sağlanabilmesi için şu koşul gerekli:

Kod:
Not: 'I' diye belirtilen birim matris, tek tırnak (') işareti ile belirtilen işlem matris tersi.

tp(N)M = I
tp(N)  = M'   // Her iki tarafı da M' ile çarptık, sol taraftaki MM' ifadesi I oldu ve kayboldu haliyle.
N      = tp(M')  // Her iki tarafın da transpozunu aldık


Yani normali dönüştüren matris tanjantı dönüştüren matrisin tersinin transpozu.

Resimleri sonradan silmek zorunda kalıyorum diye böyle yazdım ama bundan sonra imageshack'a veya başka bir yere atarım. Kendim bile bir şey anlamadım umarım siz anlarsınız arkadaşlar.

Bu arada bu bilgiler Eric Lengyel'in yazdığı "Mathematics for 3D Game Programming and Computer Graphics, Second Ed." kitabın 86. sayfasındandır.
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
DG



Kayıt: Mar 06, 2004
Mesajlar: 351
Nereden: Eskişehir

MesajTarih: Wed Jul 27, 2005 12:45 am    Mesaj konusu: Alıntıyla Cevap Ver

Pöeg Pöeg Confused Stroma'nın verdiği linkte zaten her şey anlatılmış. Boşa kastık onca. Neyse...
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
lucifer



Kayıt: Nov 02, 2002
Mesajlar: 215
Nereden: Istanbool

MesajTarih: Wed Jul 27, 2005 8:20 am    Mesaj konusu: Alıntıyla Cevap Ver

Efendim saygilar,

asyncore demiş ki:
Hayatında en az bir kere shader (GL tabirince program) yazmış ya da incelemiş olanlar bilirler ki, normaller world matrisi (içinde non-uniform scaling olmasına bakılmaksızın) ile transform edildiğinde her halukarda normalize edilirler...


Hayatimda en cok bir-iki kere vertex shader yazmistim, o da seneler onceki supersonik ultramatik gforce2mx kartimdaydi, dolayisiyla bilmiyorum boyle bisii :) Yada biliyorduysam da unutmusumdur.

Sokrates diyince, askerde universite terk bi arkadas vardi, bi ara icinde 'sokrat' gecen bir cumle kurmustum, eleman da 'evet, sokrat, yuce insan, hastasiyiz, kanki benim' demisti. Boyle de bir anim var.
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
Mesajları göster:   
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> OpenGL, DirectX Tüm saatler GMT +2 Saat
1. sayfa (Toplam 1 sayfa)

 
Forum Seçin:  
Bu forumda yeni konular açamazsınız
Bu forumdaki mesajlara cevap veremezsiniz
Bu forumdaki mesajlarınızı değiştiremezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu forumdaki anketlerde oy kullanamazsınız


Powered by phpBB 2.x.x © 200x phpBB Group
Türkçe Çeviri : Onur Turgay & Erdem Çorapçıoğlu
Türkçe Düzenleme: Alexis Canver
Version 2.x.x of PHP-Nuke Port by Tom Nitzschner © 200x www.toms-home.com




Web site powered by PHP-Nuke
Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Sayfa Üretimi: 0.172 Saniye