零、前言

谷歌纸板是一种低成本的入门级媒体,用于体验虚拟 3D 环境。它的应用和移动智能手机应用一样广泛多样。这本书让你有机会使用原生的 Java SDK 为谷歌纸板实现各种有趣的项目。其理念是用最佳实践和方法来教育您制作与纸板兼容的移动虚拟现实应用,并指导您制作适合设备及其预期用户的优质内容。

这本书涵盖了什么

第 1 章人人虚拟现实,定义了谷歌纸板,对其进行了探索,并讨论了它是如何被使用的,以及它如何融入虚拟现实设备的范围。

第二章骨骼纸板项目,考察了一个面向安卓的纸板应用的结构,带你参观了 Android Studio,并通过介绍纸板 Java SDK 帮助你构建了一个入门纸板项目。

第 3 章硬纸板盒,讨论了如何从头开始构建一个带有 3D 立方体模型、变换、立体相机视图和头部旋转的 Cardboard Android 应用(基于谷歌的寻宝示例)。本章还包括三维几何,开放图形专家系统,着色器,矩阵数学和渲染管道的讨论。

第 4 章启动器大厅,帮助你构建一个应用,在手机上启动其他 Cardboard 应用。这个项目不是使用三维图形,而是模拟屏幕空间中的立体视图,并实现基于凝视的选择。

第 5 章RenderBox Engine 向您展示了如何创建一个小型图形引擎,用于通过将低级 OpenGL ES API 调用抽象为一套MaterialRenderObjectComponentTransform类来构建新的 Cardboard VR 应用。该库将在后续项目中使用和进一步开发。

第 6 章太阳系通过添加一个太阳光源、带有纹理贴图材质和着色器的球形行星、在其太阳轨道上制作动画以及一个银河系星域,构建了一个太阳系模拟科学项目。

第 7 章360 度图库,帮助你为常规和 360 度照片构建媒体查看器,并帮助你将手机的相机文件夹图片加载到缩略图网格中,并使用基于凝视的选择来选择要查看的图片。它还讨论了如何添加进程线程来改善用户体验,并支持安卓用户查看其他应用的图像。

第 8 章三维模型查看器,帮助您构建 OBJ 文件格式的三维模型查看器,使用我们的 RenderBox 库进行渲染。它还向您展示了如何在移动头部时交互式地控制模型的视图。

第 9 章音乐可视化工具,构建了一个 VR 音乐可视化工具,可以根据手机当前音频播放器的波形和 FFT 数据进行动画制作。我们实现了一个用于添加新可视化的通用架构,包括几何动画和动态纹理着色器。然后,我们添加了一个旅行轨迹模式和多个随机进出的并发可视化。

这本书你需要什么

在整本书中,我们使用 Android Studio IDE 开发环境来编写和构建 Android 应用。你可以免费下载 Android Studio,详见第二章框架纸板项目。你需要一部安卓手机来运行和测试你的项目。强烈建议您使用谷歌纸板浏览器在立体虚拟现实中体验您的应用。

这本书是给谁的

这本书是为安卓开发者写的,他们有兴趣学习和开发谷歌纸板应用,使用谷歌纸板原生软件开发工具包。我们假设读者对安卓开发和 Java 语言有一些了解,但可能对 3D 图形、虚拟现实和谷歌纸板不熟悉。新手开发者,或者不熟悉 Android SDK 的人,可能会觉得这本书很难入门。那些不是来自安卓背景的人可以通过使用像 Unity 这样的游戏引擎创建纸板应用来获得更好的服务。

惯例

在这本书里,你会发现许多区分不同种类信息的文本样式。以下是这些风格的一些例子和对它们的意义的解释。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄如下所示:“编辑MainActivity Java 类,使其扩展CardboardActivity并实现CardboardView.StereoRenderer

代码块设置如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CardboardView cardboardView = (CardboardView) findViewById(R.id.cardboard_view);
        cardboardView.setRenderer(this);
        setCardboardView(cardboardView);
    }

当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CardboardView cardboardView = (CardboardView) findViewById(R.id.cardboard_view);
 cardboardView.setRenderer(this);
 setCardboardView(cardboardView);
    }

任何命令行输入或输出都编写如下:

git clone https://github.com/googlesamples/cardboard-java.git

新名词重要词语以粗体显示。你在屏幕上看到的单词,例如菜单或对话框中的单词,会出现在如下文本中:“在 Android Studio 中,选择文件 | 新建 | 新模块……。选择导入。JAR/。AAR 包。”

警告或重要提示会出现在这样的框中。

类型

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或不喜欢什么。读者反馈对我们来说很重要,因为它有助于我们开发出你真正能从中获益的标题。

要给我们发送一般反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并在您的邮件主题中提及书名。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参见我们位于www.packtpub.com/authors的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

你可以从你在http://www.packtpub.com的账户下载这本书的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

您可以按照以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。
  2. 将鼠标指针悬停在顶部的 SUPPORT 选项卡上。
  3. 点击代码下载&勘误表
  4. 搜索框中输入图书名称。
  5. 选择要下载代码文件的书籍。
  6. 从您购买这本书的下拉菜单中选择。
  7. 点击代码下载

您也可以通过点击 Packt 出版网站图书网页上的代码文件按钮来下载代码文件。可以通过在搜索框中输入图书名称来访问该页面。请注意,您需要登录您的 Packt 帐户。

下载文件后,请确保使用最新版本的解压缩文件夹:

  • 视窗系统的 WinRAR / 7-Zip
  • zipeg/izp/un ARX for MAC
  • 适用于 Linux 的 7-Zip / PeaZip

也可以在https://github.com/cardbookvr从 GitHub 下载代码 fles。

下载本书的彩色图片

我们还为您提供了一个 PDF 文件,其中包含本书中使用的截图/图表的彩色图像。彩色图像将帮助您更好地理解输出中的变化。您可以从https://www . packtpub . com/sites/default/files/downloads/cardboardvrproject sforandroid _ color images . pdf下载此文件。

勘误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现了错误——可能是文本或代码中的错误——如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书籍,点击勘误表提交表链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请前往https://www.packtpub.com/books/content/support并在搜索栏中输入图书名称。所需信息将出现在勘误表部分。

盗版

互联网上版权材质的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们的作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽最大努力解决问题。