tr-demoscene
the scene => coding => pc => Konuyu başlatan: paradox - 09.06.2010 21:24:53
-
Fps oyunlarında merminin duvarda iz bırakması şeklinde birşey yapıcam.
Merminin çarptığı koordinatlar ve normali var elimde..
Bu noktaları quad yada plane mesh'ine rotasyon vermek için nası kullanabilirm?
mesh'in yüzeye paralel olmasını istiyorum yani.
Not:Aslında bu tür şeylerle uğraşmayı yapamasamda seviyorum..buna fazla uğraşma zamanım olmadı ve çarpışma , normalller falan derken baydım birazda:D
Nighlorda msn'den yardımcı olmuştu sağolsun ama fazla üzerinde duramamıştım gene..
-
şimdi aklıma bi yöntem geldi.
mermi duvara çarptı..o anda quad meşinin pozisyonun facen normalinin doğrultusunda bi yere yerleştiricez..dağa sonra bu iki nokta arasında atan2f(x1-x2,z1-z2) ile y rotasyonu hallolur..X rotasyonu için biey düşünmedim henüz:D
-
paradox, genellikle iz mesh'de değil texture'da kalır. olayı mesh ile çözmek istediğine emin misin? ben de daha önce böyle birşey yapmadığım için tahmin yürütebiliyorum. normalde ekran kartının hafızasında tekrar eden bir texture yalnızca tek kopya olarak durur ve her yerde onu kullanırsın. benim aklıma gelen duvara kurşun çarpınca eğer daha önce o yüzeye bir kurşun çarpmamışsa texture'ın bir kopyasını çıkarıp o yüzeye unique olarak vermek ve texture koordinatları üzerinde çarpma noktasına bir kurşun deliği eklemek. eğer çok fazla texture kopyası çıkar ve çok hafıza harcanır endişesi oluşursa sanırım bunun çözümü de ya kurşun deliklerinin bir timer ile bir süre sonra yok edilmesi (kopya texture'ın ekran kartı hafızasından silinip, orjinal texture'a dönülmesi) ya da haritada belli bir alandaki textureların bu şekilde hafızada tutulmaları, bir noktadan çok uzaklaşıldığında otomatik olarak textureların resetlenmeleri.
ben olsam önce kısa bir araştırma yapardım ama araştırma yapmasam aklıma gelen yöntemler bunlar olurdu.
not: ID Software'ın Tech 5 engine'i ile ilgili birşeyler okurken tüm haritanın 1000000x1000000 pixellik tek bir texture olmasından falan bahsediliyordu. Avantaj olarak da ayak izleri, kurşun delikleri v.b. şeylerin artık sonsuza dek kalabileceği, sonuç olarak tiled texture mantığı birşeyin kalmadığından bahsediliyordu. tabii texture'ın tamamı hafızada tutulmuyor, stream loading yapılıyor. Ama yine de yukarıda yazdıklarımda etkili olan "hmmm" dedirten bir durum da Tech 5 engine'dir.
-
@paradox: ben pek 3d olaylarıyla ilgililenmiyorum ancak, daha geçen gün şansa tam senin bahsettiğin şeyin nasıl yapıldığını anlatan bir dokümana rastladım, pm'den mailini gönderirsen sana göndereyim.
-
Abi sen illa da kurşun delikleri içe göçmüş gibi görünsün diyorsan texture haricinde parallax mapping kullanabilirsin. Ancak bence kesinlikle mesh'i editlemek doğru yol değil. Meshi editlemek daha güçlü silahlarla duvarı gerçekten parçalaya parçalaya diğer odaya geçme durumu kadar abartılacaksa gerekli bence. Böyle bir oyun seneler önce piyasaya çıkmıştı, herkes de "yuh!" demişti hatırlıyorum. Bence şu anda yapmak istediğin için texture üzerinde oynaşma + kolay olsun diyorsan bump mapping, kaliteli olsun diyorsan parallax mapping senin işini çözer.
-
endo , teşşekürler.
skate ,abi sanırım yanlış anlaşılma olmuş..Resim üzerinde anlatayım olayı..
(http://img534.imageshack.us/img534/9189/cizim.jpg)
1 : Duvar
2: mermi kaplamalı quad meshi
3 : aynı meshin paralaxlı versiyonu
Yani duvar meshi gene aynı..olaylar texture verilmiş quad ile alakalı..
Sorunda işte o quadı yüzeye paralel yapıştırmak..
-
sorunun yanıtı trigonometrik hesaplarla çözülür ancak ben sana daha basit bir yöntem tavsiye edeceğim. bu yöntem duvarların 90 derecelik kenarlara sahip dikdörtgen ya da kare gibi quadlardan oluştuğu durumda işe yarar ki genel olarak böyle kullandığını varsayıyorum. kurşunun çarptığı quad'ın koordinatlarını kullanarak interpolasyon ile kurşunu istediğin yere yerleştirebilirsin. interpolasyonun sonucunda elde edeceğin quad her zaman bu quad ile paralel, hatta aynı düzlemde çıkacaktır.
işin daha genel çözümü ise quad'ın world coordinate system'e göre hangi üç açıyla durduğunu belirleyip quad'ı da böyle rotate etmektir elbette ki. formülünü soruyorsan ezbere bilemeyeceğim, zaten böyle şeyleri plain trigonometri ile değil matrislerle çözüyorlar genellikle. ben hala trigonometriden ilerleyenlerdenim, sen daha iyi bir tutorial bulursun artık :)
-
merminin değdiği koordinat "K" desek değdiği üçgennin normaline "N" desek
quadın normali Q=(0,0,1)
vector3d W=cross(N,Q);
if(W==zero) indentitymatrix(); else
vector3d B=cross(N,W);
vector3d C=cross(B,W);
vector3d A=cross(B,C);
MATRix
[ A.x , A.y , A.z , 0
B.x , B.y , B.z , 0
C.x , C.y , C.z , 0
K.x , K.y , K.z , 1 ] / determinant quadı bu matrixle çarp
eğer yamuk olursa a b c bunların yerlerini değiştir yada inverse matrix al
tabi birde sorun duvarın tam kenarına mermi gelirse o zaman quadı tam uygun yerden kesmen gerekir yoksa çirkin durur mesela quake 2 de böyle bi sorun vardı
-
Anlamadığım olay quadın neyini matrixle çarpıcam?.Bu tamamen worldmatrix tipi bişey heralde..yani rotasyonu için değil sadece, pozisyonda dahil?..
-
Anlamadığım olay quadın neyini matrixle çarpıcam?.Bu tamamen worldmatrix tipi bişey heralde..yani rotasyonu için değil sadece, pozisyonda dahil?..
dostum quadın 4 tane vectorü yokmu işte onları döndürüyorsun directxde fonksiyon vardı d3dxvector3dtransform(); gibi yada woldtransformmatrix olarakta yapabilirsin sen shaderlemi yapacaksın shaderle yapacaksan rotationa ihtiyacın olmaz ben tam olarak anlamadım sen hangi yöntemle yapacaksın
internette hiç örnek yokmu ? bulursan bizimlede palylaş iyi çalışmalar
-
shaderla yapmıcam..o resimdeki shader'i quad'ı göstermek için dedim skate'ye..duvarla işim yok diye..birde quad dediğim benim 3dsmaxden yaptığım plane objesi..onu mesh olarak yüklüyom..Terrain uzerinde kutunun eğim alması gibi genel bişey olsun istoydum..tutorial bulamadım.Nası arıyacağımıda bilmiyom:D
endo'da göndermedi dökümanı..
Öyle aklıma geldi uğraşayım dedim..Olmuyo ama bi türlü.:).
-
Yaptığım programı yükledim buraya..Tam olarak ne yapmaya çalıştığım anlaşılsın..
Bu özelliğide yeni buldum dosya ekleme olayı güzelmiş..Keşke önceden bilseyim:D
normallerin 1,0,0 , 0,1,0 .... gibi değerlerinde bi sorun yok ..
ama 0.3,0,-0.7 vs..tipinde değerler alınca olmuyo..
skatenin düşündüğü tarzda oldu yani..kutu şeklinde materila ateş edince oluyo anca..
Bu arada sahnedeki mesh komplex mesh.Yani olucaksa komple haritaya uygulansın demiştim.::confused:
-
sorunu hallettim..düzeldi.:^_^