2010-11-11 14 views
5

Olası Çoğalt kullanıcının dokunuşlar Algılama:
How do I determine what is touched in 3D space from the screen?bir OpenGL meydanın

ben bir Android uygulama geliştiriyorum. Ayrıca OpenGL grafiklerle çalışıyorum.

Ekranda çizilen bir kare var ve ben o üzerine dokunduğunda kullanıcı taşımak izin vermek istiyorum. Başka bir deyişle, kullanıcı parmağını kareye koyarken kareyi hareket ettirebilmelidir. Meydanın dışına dokunursa hiçbir şey olmaz.

Kullanıcı kare üzerine dokunduğunda nasıl anlarım?

Teşekkürler. Eğer dokunmatik karenin dört tepelerinden oluşan boşluğun içinde yalan koordinatları eğer kontrol edebilir sadece bir kare varsa

cevap

3

burada geçerli değildir diğer yanıtlar verilen toplama ve seçim öğreticiler bir göz atmak emin olun; diğer glSelectBuffer ve glRenderMode arasında OpenGL ES'nin bir parçası değildir. esasen, başka yerde iki yaklaşımı belirtildiği gibi

vardır. Dokunmanın sahnede nasıl eşleştiğini anlayabilir ve nesnelerini matematiksel olarak test edebilirsiniz. Kareniz düz ise, 2d olarak çiziyormuşsunuz gibi, o zaman bunu kolayca elde edebilirsiniz.

Alternatif olarak, esasen çekme ama OpenGL ES altında kullanılabilir işlevsellik için uyarlanmış gibi bir şey yapabilirsiniz. Örneğin, manzaranızı siyah olarak temizleyin ve karenizi düz mavi olarak çizin. Dokunmatik yerde renk değerini elde etmek için glReadPixels kullanın. Mavi ise dokunma karenin üzerindedir. Bu muhtemelen test etmek için daha pahalı bir yoldur, çünkü sahnenin ek bir çekimi anlamına gelir, ancak bu, GL malzemelerinin ötesinde herhangi bir ek matematik veya başka bir kod uygulamak zorunda olmadığınız anlamına gelir. Sol alt, pozitif y yukarı gider ve pozitif x sola gitmesi (0, 0) -

akılda tutulması gereken sadece hafif bir şey

OpenGL her yerde piksel adresleme aynı şekilde kullanmasıdır. Yani, hangi eksenler sizin dokunmatik koordinatlarınızla bağlantılıysa, glReadPixels'i yapmadan önce bunları göreceli olarak dönüştürmeniz gerekir.

+0

Bu çok zor görünüyor. Ekrana bazı düğmeler koyacağım ve OpenGL nesnelerini taşımak için kullanacağım. – VansFannel

+0

@VansFannel hiç de zor değil, sadece renk toplaması için öğreticiyi takip edin. IPhone'da parmağın yapabildiğini yapmak için bir düğme çok kötü bir fikirdir – rano

+0

@rano: Bunu iPhone için değil Android için yapıyorum. – VansFannel

0

. X ekseni karesine eşit olmayan bir durumda, projeksiyon matrisini kullanarak kendi tepe noktalarını yansıtabilirsiniz. Genel olarak

Daha bir OpenGL modeli 'almak' için çeşitli teknikler vardır: ışını en çok kullanılan olmanın toplama ve rengini seçmek. this doc

4

Algılanan dokunuşlar ışın toplama kullanılarak gerçekleştirilebilir. Aynı sorun vardı ve bu sayfada kodu kullandım: Android OpenGL ES ray picking. Yöntem getViewRay() ışının yönünü hesaplar. [0,0,0] 'dan ray [x, y, z] yönüne kadar olan yönü biliyorsanız, ışın atımını simüle etmek ve sınırlayıcı nesne ile çarpışmayı belirlemek oldukça kolaydır.