标签: google-cardboard

如何使用Google CardBoard SDK实施Google StreetView?

我们计划为Google StreetView创建Google Cardboard体验.谷歌已经公开了谷歌街景API,以根据位置和角度获取图像.如果我使用此API,我需要根据用户头部移动来拼接图像.用户可以水平360度,垂直180度观看物体.如何基于StreetView API实现此功能以及我需要多长时间才能发出请求以及组合图像的最佳方式是什么.有没有什么办法可以直接在com.google.vrtoolkit.cardboard.CardboardView中使用"com.google.android.gms.maps.StreetViewPanoramaView"?感谢提前..

android google-maps google-street-view google-cardboard

6
推荐指数
1
解决办法
1257
查看次数

在Google Cardboard SurfaceTexture中显示gstreamer视频源

我正在使用gstreamer检索视频源(从RaspPi发送),我需要将其显示在Google Cardboard中.

我的工作基于gstreamertutorial-3示例.我设法将我的视频显示到SurfaceView中,通过提供我的Surface(从中检索SurfaceView.SurfaceHolder.getSurface(),但我现在需要将其与Google Cardboard连接).

如果我没有弄错,Google Cardboard依赖于某些SurfaceTexture.所以我认为使用Surface(SurfaceTexture)构造函数从SurfaceTexture中简单地获取Surface会很容易.

问题是它根本不起作用.我的Google纸板应用程序Cardboard Pasthrough示例,我还没有触及OpenGL代码,因为我对此一无所知.

在调试时,我发现我正在使用的代码存在(至少)一个问题.看来就行了

GLES20.glActiveTexture(GL_TEXTURE_EXTERNAL_OES);
GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture);
Run Code Online (Sandbox Code Playgroud)

由于GL_TEXTURE_EXTERNAL_OES不在glActiveTexture方法的所需范围内(需要GL从0到GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS),因此给我带来了一些麻烦.这是我的日志:

GLConsumer  W  [unnamed-12520-0] bindTextureImage: clearing GL error: 0x500
Adreno-ES20  W  <core_glActiveTexture:348>: GL_INVALID_ENUM
Run Code Online (Sandbox Code Playgroud)

那么现在有什么用呢?

似乎gstreamer接收了视频源,它尝试更新Surface(我得到一些关于onFrameAvailable正在更新的SurfaceTexture的通知,并且只在那里发送错误日志).但是,屏幕保持黑色,好像什么都没有更新.

以下是我的代码中最有趣的部分:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    CardboardView cardboardView = (CardboardView) findViewById(R.id.cardboard_view);
    cardboardView.setRenderer(this);
    setCardboardView(cardboardView);

    // Initialize GStreamer and warn if it fails
    try {
        GStreamer.init(this);
    } catch (Exception e) {
    //Catch e...
    } …
Run Code Online (Sandbox Code Playgroud)

video android opengl-es google-cardboard

6
推荐指数
0
解决办法
1651
查看次数

确定精确的眼睛视图大小

在我的Android Cardboard应用程序中,我希望在每个眼睛中心显示一个叠加.简单地创建一个具有两个居中视图的LinearLayout非常简单,适用于大多数手机,因为眼睛最适合:

CarboardView中的视频

如果情况并非如此,那么让每个眼睛的中心成为一个问题.使用平板电脑时最清楚地说明了这一点:

以CardboardView的眼睛为中心

我试图在每个眼睛视图中居中显示消息"缓冲,0%......".

眼睛的渲染框的大小具有固定的尺寸(当然,因为人眼之间的距离具有相当固定的尺寸).不幸的是,CardboardView似乎没有提供有关眼睛的确切大小和/或位置的信息.

我已经研究过获得左眼和右眼cardboardView.getCurrentEyeParams()(奇怪的未记录),每个眼睛都包含一个视口.这似乎给出了大小和位置,但其值似乎与屏幕上的大小和位置没有直接关系.

在屏幕分辨率为1920×1080的LG G2上,视口为:

Viewport left: {
    x: 0,
    y: 0,
    width: 1150,
    height: 1177,
}
Viewport right: {
    x: 1150,
    y: 0,
    width: 1150,
    height: 1177,
}
Run Code Online (Sandbox Code Playgroud)

在屏幕分辨率为2048×1536的Nexus 9上,视口为:

Viewport left: {
    x: 0,
    y: 0,
    width: 802,
    height: 802,
}
Viewport right: {
    x: 802,
    y: 0,
    width: 802,
    height: 802,
}
Run Code Online (Sandbox Code Playgroud)

这两个尺寸(如果它们以像素为单位)比显示的实际图像大得多,并且在LG G2的情况下,宽度和高度确实大于1080px的屏幕尺寸.

看一下Cardboard SDK的一些反编译代码,看来眼睛周围的渐晕方形是通过一个名为DistortionMesh的内部类绘制的,并通过一些有些复杂的代码呈现.(注意,通过反编译似乎缺少某些逻辑,例如第195和199行.)

Viewport的创建表明这些值确实是像素(以米为单位的偏移量乘以每米的像素数).也许DistortionMesh或EyeView矩阵在渲染之前应用于视口?无论如何,我觉得我没有找对地方.

我还看了一下获取ScreenParams,因为它也提供了宽度和高度.不幸的是,这会返回两个设备上的整个屏幕尺寸,但似乎并不相关.

我当前的方法叠加是一个自定义ViewGroup,它通过child.layout()使用ScreenParams的高度和宽度的一半来调用两个孩子.

我怎样才能知道Eye被吸引到StereoRenderer的大小?我可以找到一种不同的方式来将眼睛中的不同视图居中吗?

android google-cardboard

6
推荐指数
0
解决办法
419
查看次数

如何通过Google CardBoard Android SDK和Rajawali制作简单的VR视频播放器

我是这个地区的新人.我正在尝试更改github中的程序,以便现在播放纸板视频.

我使用StreamingTexture修改了MyRenderer.

public class MyRenderer extends RajawaliCardboardRenderer {

public MyRenderer(Context context) {
    super(context);
}

private MediaPlayer mMediaPlayer;
private StreamingTexture streamingTexture;

@Override
protected void initScene() {
    mMediaPlayer = MediaPlayer.create(this.getContext(), R.raw.test);

    streamingTexture = new StreamingTexture("video", mMediaPlayer);
    Sphere sphere = createPhotoSphereWithTexture(streamingTexture);

    getCurrentScene().addChild(sphere);

    getCurrentCamera().setPosition(Vector3.ZERO);
    getCurrentCamera().setFieldOfView(75);
}

private static Sphere createPhotoSphereWithTexture(ATexture texture) {

    Material material = new Material();
    material.setColor(0);

    try {
        material.addTexture(texture);
    } catch (ATexture.TextureException e) {
        throw new RuntimeException(e);
    }

    Sphere sphere = new Sphere(50, 64, 32);
    sphere.setScaleX(-1);
    sphere.setMaterial(material);

    return sphere;
} …
Run Code Online (Sandbox Code Playgroud)

android rajawali google-cardboard virtual-reality

6
推荐指数
1
解决办法
5423
查看次数

谷歌纸板如何改变眼睛之间的距离

我在Stack Overflow中的第一条消息如果我不是100%与规则一致,那么道歉.在这里和谷歌搜索没有任何运气.

如何更改眼睛之间的Google Cardboard Unity预制距离.我有一个眼睛紧张经验,相机看起来太近或太公鸡眼睛(面向内)但游戏对象的任何调整在播放时被重新设置,我无法从脚本中找到正确的代码行.

谢谢.

google-cardboard

6
推荐指数
1
解决办法
720
查看次数

Unity:如何将VR Cardboard游戏嵌入到网站中

现在,我认为在Unity中没有办法做到这一点.这是我到目前为止所发现的(如果我错了,请纠正我):

unity-game-engine webgl three.js google-cardboard virtual-reality

6
推荐指数
1
解决办法
2025
查看次数

如何摆脱Xcode中的"未知类型名称'__declspec'"错误

我尝试在Xcode中构建并运行我的第一个Google Cardboard项目.

我第一次遇到的东西基本上说我的签名不正确并要求我登录以便计算机可以修复它(它似乎).(如果它以某种方式与错误相关,我会包含此信息.)

然后我遇到了错误Unknown type name '__declspec',不知道如何解决它.

这个问题也在这里找到,但没有答案.一个谷歌搜索产生约50个结果,因此它似乎比较少见.

什么是我最好的行动方案?

xcode unity-game-engine ios google-cardboard

6
推荐指数
2
解决办法
7040
查看次数

用于调用360度视频的拆分视图的YouTube参数

我试图找出是否可以通过参数或通过API调用某些YouTube 360​​视频的双眼分割视图的"VR模式" ?

现在,当我在iPhone上播放#360视频时,我可以360度移动,但是分割视图不是一个选项.

如果我在Android设备上执行相同的操作,我可以选择为Google Cardboard输入"splitview" .

是否可以从iPhone触发此拆分视图模式,或者如果#360视频嵌入带参数的网站或通过API?

youtube parameters video youtube-api google-cardboard

6
推荐指数
1
解决办法
3483
查看次数

画布不在顶部渲染

我使用canvas和Unity UI元素作为HUD.我希望HUD能在所有事物面前,但事实并非如此.

HUD

unity-game-engine google-cardboard virtual-reality

6
推荐指数
1
解决办法
3852
查看次数

如何修复 Android 10 中的崩溃处理

我有一个使用 Cardboard SDK 构建的 Unity 场景,并导出为 Android 库。该库用于在 Android 应用程序上以纸板模式播放视频。它不是整个应用程序,而是其中的一部分。Android 应用程序的其余部分是使用 Kotlin 和 Java 构建的。

我已经实现了,所有功能都按预期工作,但是退出场景会使 android 崩溃。

我们尝试了各种方法来清除玩家首选项,甚至在关闭场景之前清除内存。但在安卓上总是崩溃。我有两部 Android 手机(Android 9 和 10)用于测试。

在 Android 应用程序中,我已经做到了,一旦应用程序崩溃,我就会尝试恢复。我的崩溃是一些lateinit var变量被破坏了。它们的值变为 null 并且恢复先前的活动会使其崩溃。因此,在退出 Unity 场景后,我将取消引用的变量加载回内存中,一切都会恢复正常。

注意:我尝试过使用Application.Quit();unity,但它只是关闭了整个应用程序。另一方面,我只想关闭跑步场景

在统一中[我调用goBackandroid部分中的一个函数来关闭应用程序]:

public void GoToHome()
    {
        Pause();
        Stop();
        Resources.UnloadUnusedAssets();
        PlayerPrefs.DeleteAll();
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("goBack");
    }
Run Code Online (Sandbox Code Playgroud)

在应用程序中:

public void goBack()
    {
       UnityPlayer.currentActivity.finish();
       finish();
       loadDerereferencedVars();
    }
Run Code Online (Sandbox Code Playgroud)

这在 android 9 上完美运行。在另一部装有 android 10 的手机上,关闭场景后,应用程序继续运行,但是出现一条消息

应用程序不断停止

当我单击关闭应用程序时,该应用程序继续工作。

我检查了日志,null pointer dereference …

java android unity-game-engine uncaught-exception google-cardboard

5
推荐指数
1
解决办法
2696
查看次数