Bu kılavuzda, Cardboard SDK'sının nasıl kullanılacağı gösterilmektedir kendi Sanal Gerçeklik (VR) deneyimlerinizi oluşturmasını sağlar.
Akıllı telefonları sanal gerçeklik platformuna dönüştürmek için Cardboard SDK'sını kullanabilirsiniz. Akıllı telefon stereoskopik oluşturma ile 3D sahneleri görüntüleyebilir, kafa hareketlerini izleyebilir ve kafa hareketlerine tepki verebilir, ve kullanıcının görüntüleyici düğmesine ne zaman bastığını algılayarak uygulamalarla etkileşimde bulunmalarını sağlayın.
Başlamak için temel özellikleri gösteren bir demo oyun olan HelloCardboard'u kullanacaksınız. özellikleri hakkında daha fazla bilgi edinin. Kullanıcılar oyunda sanal bir dünyada dolaşarak nesneleri toplamanızı sağlar. Bu kılavuzda şunları nasıl yapacağınız gösterilmektedir:
- Geliştirme ortamınızı ayarlama
- Demo uygulamayı indirme ve oluşturma
- Parametrelerini kaydetmek için bir Cardboard gözlüğünün QR kodunu tarayın
- Kullanıcının kafa hareketlerini izleme
- Her göz için doğru görünüm projeksiyon matrisini ayarlayarak stereoskopik görüntüler oluşturun.
HelloCardboard, Android NDK'yı kullanır. Her yerel yöntem:
HelloCardboardApp
sınıfı bir yöntemle benzersiz olarak sınırlıdır veya- İlgili sınıfın bir örneğini oluşturur veya siler
Geliştirme ortamınızı ayarlama
Donanım gereksinimleri:
- Android 8.0 "Oreo" çalıştıran Android cihaz (API düzeyi 26) veya üstü
- Cardboard görüntüleyici
Yazılım gereksinimleri:
- Android Studio 2022.1.1 "Electric Eel" sürümü veya üzeri
- Android SDK 13.0 "Tiramisu" (API düzeyi 33) veya üstü
Android NDK çerçevesinin son sürümü
Yüklü SDK'ları incelemek veya güncellemek için Tercihler'e gidin > Görünüm ve Davranış
Sistem Ayarları > Android Studio'daki Android SDK'sı.
Demo uygulamayı indirme ve oluşturma
Cardboard SDK, önceden derlenmiş bir Vulkan dosyası kullanılarak oluşturulmuştur başlık dosyasına sahip olursunuz. Sıfırdan başlık dosyalarını oluşturmak için gereken adımları bulabilirsiniz burada bulabilirsiniz.
Cardboard SDK'sını ve HelloCardboard demosunu klonlamak için aşağıdaki komutu çalıştırın uygulamasını kullanın:
git clone https://github.com/googlevr/cardboard.git
Android Studio'da Mevcut bir Android Studio projesini aç'ı seçin, ardından ve HelloCardboard demo uygulamasının klonlandığı dizin.
Kodunuz Android Studio'daki Proje penceresinde görünür.
Cardboard SDK'sını derlemek için uygulamanın içindeki derle seçeneğini çift tıklayın. Gradle sekmesindeki cardboard/:sdk/Tasks/build klasörü (Görünüm > Araç Windows > Gradle).
Çalıştır'ı seçerek telefonunuzda HelloCardboard demo uygulamasını çalıştırın > Çalıştır... ve
hellocardboard-android
hedefini seçin.
QR kodunu tarayın
Cihaz parametrelerini kaydetmek için Cardboard gözlüğündeki QR kodunu tarayın:
Kullanıcı "ATLA"ya basarsa daha önce kaydedilmiş parametre olmadığından Cardboard, Google Cardboard v1 (Google I/O 2014'te kullanıma sunuldu) parametreleri.
Demoyu deneyin
HelloCardboard'da 3D uzayda jeodezik küreler arayıp toplayacaksınız.
Bir küre bulmak ve toplamak için:
Kayan bir şekil görene kadar başınızı herhangi bir yönde hareket ettirin.
Doğrudan küreye bakın. Bu, renk değişikliğine neden olur.
"Toplama" için Cardboard gözlüğü düğmesine basın yer alır.
Cihazı yapılandırma
Kullanıcı Cardboard gözlüğünü değiştirmek için dişli simgesine dokunduğunda nativeSwitchViewer
yöntemi çağrılır. nativeSwitchViewer
arama
CardboardQrCode_scanQrCodeAndSaveDeviceParams
, taranacak pencereyi açar
İzleyicinin QR kodu. İzleyicinin lens bozulması ve diğer parametreler bir kez güncellenir
QR kodu taranır.
// Called by JNI method
void HelloCardboardApp::SwitchViewer() {
CardboardQrCode_scanQrCodeAndSaveDeviceParams();
}
Android Studio x86 emülatörünü etkinleştir
Android Studio x86 emülatörü için geliştirme yapmak üzere
SDK'da build.gradle
dosya
ve Örnek:
abiFilters 'armeabi-v7a', 'arm64-v8a'
Bu, tüm ABI'leri etkinleştirir ve oluşturulan ABI'lerin boyutunu önemli ölçüde artırır.
.aar
dosyası yükleyin. Android ABI'lerini göster
konulu videomuzu izleyin.
Baş takibi
Baş takip cihazı oluştur
Ana izleyici, HelloCardboardApp
öğesinin oluşturucusunda bir kez oluşturulur:
HelloCardboardApp::HelloCardboardApp(JavaVM* vm, jobject obj, jobject asset_mgr_obj) {
Cardboard_initializeAndroid(vm, obj); // Must be called in constructor
head_tracker_ = CardboardHeadTracker_create();
}
VrActivity
oluşturulduğunda HelloCardboardApp
sınıfının bir örneği oluşturulur
nativeOnCreate
yöntemini çağırarak:
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
nativeApp = nativeOnCreate(getAssets());
//...
}
Baş takip cihazını duraklat ve devam ettir
Baş takip cihazını duraklatmak, devam ettirmek ve kaldırmak için:
CardboardHeadTracker_pause(head_tracker_)
, CardboardHeadTracker_resume(head_tracker_)
,
Sırasıyla ve CardboardHeadTracker_destroy(head_tracker_)
çağrılmalıdır.
"HelloCardboard" bu uygulamaya nativeOnPause
, nativeOnResume
ve
nativeOnDestroy
:
// Code to pause head tracker in hello_cardboard_app.cc
void HelloCardboardApp::OnPause() { CardboardHeadTracker_pause(head_tracker_); }
// Call nativeOnPause in VrActivity
@Override
protected void onPause() {
super.onPause();
nativeOnPause(nativeApp);
//...
}
// Code to resume head tracker in hello_cardboard_app.cc
void HelloCardboardApp::onResume() {
CardboardHeadTracker_resume(head_tracker_);
//...
}
// Call nativeOnResume in VrActivity
@Override
protected void onResume() {
super.onResume();
//...
nativeOnResume(nativeApp);
}
// Code to destroy head tracker in hello_cardboard_app.cc
HelloCardboardApp::~HelloCardboardApp() {
CardboardHeadTracker_destroy(head_tracker_);
//...
}
// Call nativeOnDestroy in VrActivity
@Override
protected void onDestroy() {
super.onDestroy();
nativeOnDestroy(nativeApp);
nativeApp = 0;
}
Lens bozulması
Cardboard her yeni QR kodu taradığında aşağıdaki kod kayıtlı parametreleri okur bunları, uygun lens bozulmasını uygulayan lens distorsiyonu nesnesini oluşturmak için kullanır. ekleyin:
CardboardQrCode_getSavedDeviceParams(&buffer, &size);
CardboardLensDistortion_destroy(lens_distortion_);
lens_distortion_ = CardboardLensDistortion_create(
buffer, size, screen_width_, screen_height_);
CardboardQrCode_destroy(buffer);
Oluşturma
Cardboard'da içerik oluşturma süreci şu şekildedir:
- Doku oluşturma
- Sol ve sağ gözler için görüntüleme ve projeksiyon matrislerini elde etme
- Oluşturucuyu oluşturma ve distorsiyon ağını ayarlama
- Her kare oluşturuluyor
Doku oluşturma
Tüm içerik, sol ve sağ gözler için bölümlere ayrılmış bir doku üzerine çizilir.
Bu bölümler sırasıyla _leftEyeTexture
ve _rightEyeTexture
dillerinde başlatıldı.
void HelloCardboardApp::GlSetup() {
LOGD("GL SETUP");
if (framebuffer_ != 0) {
GlTeardown();
}
// Create render texture.
glGenTextures(1, &texture_);
glBindTexture(GL_TEXTURE_2D, texture_);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, screen_width_, screen_height_, 0,
GL_RGB, GL_UNSIGNED_BYTE, 0);
left_eye_texture_description_.texture = texture_;
left_eye_texture_description_.left_u = 0;
left_eye_texture_description_.right_u = 0.5;
left_eye_texture_description_.top_v = 1;
left_eye_texture_description_.bottom_v = 0;
right_eye_texture_description_.texture = texture_;
right_eye_texture_description_.left_u = 0.5;
right_eye_texture_description_.right_u = 1;
right_eye_texture_description_.top_v = 1;
right_eye_texture_description_.bottom_v = 0;
//...
CHECKGLERROR("GlSetup");
}
Bu dokular, CardboardDistortionRenderer_renderEyeToDisplay
öğesine parametre olarak aktarılır.
Sol ve sağ göz için görüntüleme ve projeksiyon matrislerini öğrenin
İlk olarak, sol ve sağ gözlere ilişkin göz matrislerini alın:
CardboardLensDistortion_getEyeFromHeadMatrix(
lens_distortion_, kLeft, eye_matrices_[0]);
CardboardLensDistortion_getEyeFromHeadMatrix(
lens_distortion_, kRight, eye_matrices_[1]);
CardboardLensDistortion_getProjectionMatrix(
lens_distortion_, kLeft, kZNear, kZFar, projection_matrices_[0]);
CardboardLensDistortion_getProjectionMatrix(
lens_distortion_, kRight, kZNear, kZFar, projection_matrices_[1]);
Daha sonra, her bir göz için distorsiyon örgülerini alın ve distorsiyon oluşturucuya iletin:
CardboardLensDistortion_getDistortionMesh(lens_distortion_, kLeft, &left_mesh);
CardboardLensDistortion_getDistortionMesh(lens_distortion_, kRight, &right_mesh);
Oluşturucuyu oluşturma ve doğru distorsiyon ağını ayarlama
Oluşturucunun yalnızca bir kez başlatılması gerekir. Oluşturucu oluşturulduktan sonra, yeni
CardboardLensDistortion_getDistortionMesh
işlevi.
distortion_renderer_ = CardboardOpenGlEs2DistortionRenderer_create();
CardboardDistortionRenderer_setMesh(distortion_renderer_, &left_mesh, kLeft);
CardboardDistortionRenderer_setMesh(distortion_renderer_, &right_mesh, kRight);
İçeriği oluşturma
Her kare için CardboardHeadTracker_getPose
kaynağından geçerli baş yönünü alın:
CardboardHeadTracker_getPose(head_tracker_, monotonic_time_nano, &out_position[0], &out_orientation[0]);
Görünüm oluşturmak için görünüm ve projeksiyon matrisleriyle mevcut baş yönünü kullanın görüntüler ve içeriği ekranda oluşturur:
// Draw eyes views
for (int eye = 0; eye < 2; ++eye) {
glViewport(eye == kLeft ? 0 : screen_width_ / 2, 0, screen_width_ / 2,
screen_height_);
Matrix4x4 eye_matrix = GetMatrixFromGlArray(eye_matrices_[eye]);
Matrix4x4 eye_view = eye_matrix * head_view_;
Matrix4x4 projection_matrix =
GetMatrixFromGlArray(projection_matrices_[eye]);
Matrix4x4 modelview_target = eye_view * model_target_;
modelview_projection_target_ = projection_matrix * modelview_target;
modelview_projection_room_ = projection_matrix * eye_view;
// Draw room and target. Replace this to render your own content.
DrawWorld();
}
Bozulmayı uygulamak için CardboardDistortionRenderer_renderEyeToDisplay
öğesini kullanın
düzeltme ve içeriği ekrana görüntüleme.
// Render
CardboardDistortionRenderer_renderEyeToDisplay(
distortion_renderer_, /* target_display = */ 0, /* x = */ 0, /* y = */ 0,
screen_width_, screen_height_, &left_eye_texture_description_,
&right_eye_texture_description_);