Fizik simülasyonlarını farklı koordinat sistemleriyle bağlama


9

Nesnelerin bir "pencere" aracılığıyla iki fizik simülasyonu arasında hareket etmesini ve pencere düzlemiyle kesişmeleri durumunda her iki simülasyondan çarpışmasını istiyorum.

Simülasyonların koordinat sistemleri aynı kökene sahip değildir ve farklı bir yöne sahip olabilir. Bir simülasyonun kendisine sarılması gerekli değildir, ancak bir artı olacaktır.

Tek tek nesneleri klonlamadan sistemleri verimli bir şekilde nasıl bağlarım?

Düzenle:

Hesaplamalar olabildiğince doğru olmalıdır, bu nedenle nesneler pencereyi aynı anda karşı taraflardan geçerse sıkışmazlar.


İlk soru, fiziksel simülasyonun pencerede doğru olması mıydı? Çünkü oryantasyon değişiklikleri uygun bir süpürmeyi imkansız kılıyor. Bu, ölçek değiştirme portalları gibi - olası bir acı dünyası. İkinci soru: Farklı yönelim, keyfi olarak veya en az 90 derecelik açılarla, sadece bir eksen takası mı?
Kaj

Bu, Portal'da ele almaları gereken bir sorun gibi görünüyor. Doğru hatırlıyorsam bu problemleri ve bazı oyun içi yorumlarda nasıl çözdüklerini anlatıyorlar. Muhtemelen bunları bir yerde çevrimiçi bulabilirsiniz.
Nailer

@Kaj Bence gelişigüzel ve dik açılı geçişler için hesaplama yolunu ayırmanın en iyisi olacağını düşünüyorum. Bu şekilde, dik açılı olanlar daha yüksek bir hassasiyet ve hıza sahip olabilirken, diğer açılar da mümkün olabilir.
Tamschi

@Nailer Doğru hatırlıyorsam, portal açılırken yeni bir fizik ortamı yarattılar ve daha sonra bu ek simülasyona yaklaşan her fizik nesnesini klonladılar. Nesneleri bir şekilde kısıtladıklarını söylediler, ancak büyük olasılıkla her bir fizik adımını sadece kuvvetleri dönüştürüyorlar ve konumlandırıyorlar. Kaynakta simüle edilmiştir.
Tamschi

Yanıtlar:


2

Eskiden 'Portalized' olarak bilinen Pseudoform adlı bu harika proje, portalları kullanarak fizik simülasyonlarını groovie tarzında ele alıyor:

psödoformundan

Bunu kontrol et!

Özellikle videolar - şaşırtıcı derecede havalı.

Bu açık kaynak, bu yüzden nasıl yaptıklarını göreceksiniz.

Eminim istediğin budur. :)


2
Sadece kodu okudum: Bunu yapmanın yolu neredeyse Valve'ın çözümü gibidir, ancak ek fizik ortamı olmadan. Portalize motordaki portallar, portal yüzeyine dokunduğunda bir nesnenin kopyasını oluşturur, ardından portaldan belirli bir süre ayrıldıktan sonra onu siler. Bu yanıt hala biraz yardımcıdır: Kopyaları kısıtlamak için kullanılan eklem, nesnenin portalda nasıl dönüştürüldüğünü gösterir.
Tamschi

0

Tamam - Bunun işe yarayıp yaramayacağını bilmiyorum.
Yukarıdaki bilgilere dayanarak, bir nesnenin bir dünya dışına çıktığında tespit edebilmem için 'pencerelere' tetikler koyacağım. Çarpışma anında mevcut hız vektörü alın. Tetikleyiciyi nereye vurduğuna ve bu kareyi nerede bitirdiğine bağlı olarak kalan zaman çizelgesini hesaplayın (dünyanın dışında, dünyanızın buna izin vermek için sanal bir sınıra ihtiyacı olacaktır). Bu noktada hızı ve kalan zaman adımını bilirsiniz, böylece girmek üzere olduğu dünyanın sınırına yeniden konumlandırabilir ve hızı yeniden ayarlayabilirsiniz. Ancak bu, bir çerçevede iki fizik güncellemesi gerektirecektir ve bir nesnenin kenarlık çerçevesi a'dan b'ye giderken, diğeri b'den aynı konuma gider - hiçbir çarpışma algılanmaz.
Biraz kabataslak,


Bu mümkün olan en hızlı yol gibi görünüyor, ancak iki nesne pencereden aynı taraftan geçerse bir sorun var: İlk nesne sınırın ortasında sıkışırsa, ikincisi sınıra ulaşana kadar çarpışmaz, ve hedefte birincinin içinde görünür.
Tamschi

Siz yazarken biraz düzenlenmiş ve gerçekten de eklediğim sorun
buydu

Okumayı öğrenmeliyim. Eklemem başka bir sınır davasıydı. Düşünecek.
Kaj

Hayır, sınır dünyanın dışında. Böylece nesne 1, b nesnesinde olduğu gibi kendi hızı ile dünya 2'ye (dünya 2 sınırından - pencere konumunda değil) çekilir. Dünya 2'de sınırda düzgün bir şekilde çarpıştılar .... Bence: o? Ancak kendi sınır davam hala devam ediyor.
Kaj

Görünüşe göre sanal sınır hakkındaki kısmı yanlış okudum. Her neyse, bir nesne takılırsa başka bir sorun daha var. Hedef pencerenin arka tarafındaki kısım hala orijinal konumunda oluşturulur, ancak sınıra değmeyen nesneler onunla çarpışmaz. Bu sorunları çözmenin bir yolu simülasyonları birleştirmek olacaktır, ancak bunun nasıl verimli bir şekilde yapılabileceğinden emin değilim.
Tamschi

0

Fizik simülasyonları hakkında bazı bilgiler okudum ve olası bir çözüm buldum. Her fizik adımını üç aşamaya bölerek çalışır:

1. Adım Öncesi:

Her fizik adımı, bir pencere, bağlantının her iki tarafı için iki tane olmak üzere dört dönüşüm oluşturur:

  • bir nesnenin konumunu, hızını (ve muhtemelen boyutu ve ağırlığını) hedef koordinat sistemine dönüştüren bir girdi dönüşümü ve
  • kuvvetleri nesnenin orijinal sistemine geri dönüştüren bir çıktı dönüşümü.

(Statik pencerelerin bunu yalnızca bir kez yapması gerekir.)

Ayrıca, her bir koordinat sistemindeki nesneler üç gruba ayrılır:

Fizik Gruplaması http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. Pencerenin önündeki nesneler (yeşil).
    Bir nesne, pencere düzlemini kesişiyorsa veya pencerenin arkasından geçmesi muhtemel ise (gösterilmiyor) bu gruba doğru sayılır.

  2. Pencereyle kesişen veya bu fizik adımında (turuncu) kesişmesi muhtemel nesneler.

  3. Pencerenin arkasındaki nesneler (mavi). Bir nesne pencerenin arka tarafına doğru uçarsa, yine de üçüncü grubun üyesi olarak işaretlenir.

Pencere simülasyonun sınırındaysa gruplandırma basitleştirilebilir.

2. Ana Adım:

Fizik çoğunlukla birkaç istisna dışında çoğunlukla her zamanki gibi hesaplanır:

  • İkinci gruptaki nesneler asla üçüncü gruptaki nesnelerle çarpışmaz, bunun tersi de geçerlidir.

  • Pencerenin giriş dönüşümü ikinci gruptaki nesnelerde kullanılır ve sonuçlar hedef sistemden gelen ön ve kesişen nesnelere göre değerlendirilir. Elde edilen kuvvet çıktı dönüşümü kullanılarak dönüştürülür ve orijinal nesneye uygulanır.

(Hesaplama sırasında bir nesneye vurulursa, yeniden gruplandırılmalıdır!)

3. Adım Sonrası:

İkinci gruptaki bir nesne pencereyi geçtiyse, giriş dönüşümü kullanılarak hedef sisteme taşınır.

Ek Düşünceler:

Dönüşümler fizik hesaplandıktan sonra korunursa, oluşturmayı hızlandırmak ve daha kolay AI hesaplamaları için kullanılabilir. Gruplama, klip düzlemlerini oluşturma işleminden kaldırmak için kullanılabilir.

Bu çözümün dezavantajı, pencerelerin doğrudan fizik motoruna eklenmesi gerektiğidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.