这个Demo还没有添加任何东西,但是却可以让我们了解到基于O3D开发的程序框架。
一个O3D程序需要完成的任务如下:
1 创建一个O3D object
2 给全局变量赋值,并初始化程序库
3 创建pack以管理O3D objects
4 创建render graph
5 建立draw context(远景和视野转换)
6 创建一个效果,载入shader information
7 创建材质和形状,设置材质绘制列表,并且设置其他材质参数
8 将transforms和shapes加入到transform graph
9 创建primitives的绘制单元
10 设置回调函数,在3D场景每次被渲染时执行特殊的任务
下面是HTML代码:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Tutorial A1: Loading a scene</title>
</head>
<body>
<h1>Loading a scene.</h1>
This tutorial shows how we load and display a scene in O3D.
<!-- Start of O3D plugin -->
<div id="o3d_elem1" style="width:400px; height:300px" />
<!-- End of O3D plugin -->
</body>
</html>
这段代码里定义了一个o3d_elem1元素,这是一个重点,后面会介绍到。
下面是JS代码:
<script type="text/javascript" src="o3djs/base.js"></script>
<!-- Our javascript code -->
<script type="text/javascript" id="o3dscript">
o3djs.require('o3djs.util');
o3djs.require('o3djs.math');
o3djs.require('o3djs.rendergraph');
o3djs.require('o3djs.camera');
o3djs.require('o3djs.pack');
o3djs.require('o3djs.scene');
window.onload = init;
window.onunload = unload;
//全局变量
var g_o3d;
var g_math;
var g_client;
var g_viewInfo;
var g_pack;
var g_finished = false;
function init()
{
o3djs.util.makeClients(initStep2);
}
function unload()
{
if (g_client)
g_client.cleanup();
}
function initStep2(clientElements)
{
var o3dElement = clientElements[0];
g_o3d = o3dElement.o3d;
g_math = o3djs.math;
g_client = o3dElement.client;
g_pack = g_client.createPack();
g_viewInfo = o3djs.rendergraph.createBasicView(g_pack,
g_client.root,
g_client.renderGraphRoot);
g_viewInfo.drawContext.projection = g_math.matrix4.perspective(
g_math.degToRad(30),
g_client.width / g_client.height,
1, //近切面的Z轴坐标.
5000); //远切面的Z轴坐标.
// 设置照相机
g_viewInfo.drawContext.view = g_math.matrix4.lookAt([0, 1, 5], // eye
[0, 0, 0], // target
[0, 1, 0]); // up
}
</script>
o3djs.require加载O3D库文件。init() 和unload()则是HTML被载入和关闭时回调函数。从这里我们来分析一下O3D的执行过程:
(1) HTML载入时,执行init(),调用o3djs.util.makeClients()函数。这个函数的功能是查找在当前html文档中所有id以o3d开头的元素(像o3d,o3d_elem,o3d_lang等),然后在这些元素里面开辟一块区域(一个object),这个就相当于windows的窗口,以后操作都是在这里面进行的,所以这个函数所做的其实跟windows编程中的建立窗口差不多。makeClients函数会生成一个o3dobject的数组,参数就是回调函数,makeClients会将这个o3dobject的数组传给其回调函数。
(2) 进入回调函数initStep2。可以在这个函数里做一些初始化的工作,clientElements[0]就是第一个object(这里你也可以访问其他的object,如果存在的话)。g_client是 整个o3d应用的入口点, g_o3d是o3d的命名空间,g_math是整个数学库的命名空间。
(3) 创建一个包(pack)来管理所有的对象(object)和这些对象的生存时间。
(4) 创建一个渲染图(renderGraph),即g_viewInfo,然后设置照相机。
(5) 退出程序,执行unload(),清理所有callbacks。
到这里差不多就是一个完整的程序了,不过还没有任何东西可以显示,下面往场景里加入一些元素,代码直接加入到initStep2的尾部:
var effect = g_pack.createObject('Effect');
var material = g_pack.createObject('Material');
material.drawList = g_viewInfo.performanceDrawList;
material.effect = effect;
//创建一个球体
var shape = o3djs.primitives.createSphere(g_pack, material, 0.5, 20, 20);
g_cubeTransform = g_pack.createObject('Transform');
g_cubeTransform.addShape(shape);
g_cubeTransform.parent = g_client.root;
g_finished = true;//结束标志
可以看出来,O3d创建场景元素的过程和其他3D引擎很相似,首先创建一个材质渲染列表,然后创建object,将材质添加到物体上,最后将这个object添加到场景。现在我们可以看到场景中显示出一个物体了。
分享到:
相关推荐
在这个"Java 2.5D游戏Demos"压缩包中,包含了一系列用Java编写的2.5D游戏示例,如俄罗斯方块和人物行走等。这些示例对于学习和理解Java游戏编程至关重要,因为它们提供了实际的代码和逻辑结构,可以帮助开发者掌握...
**Android 6.0 API Demos详解** Android 6.0 API Demos 是一个官方提供的示例代码集合,它展示了Android 6.0 (Marshmallow) SDK中的各种API功能和用法。这些示例旨在帮助开发者更好地理解和学习如何在实际应用中...
Signal processing demos from Richards
《深入探索Android API Demos:最新实践与技术解析》 Android API Demos是Google官方提供的一款用于展示Android SDK中各种API功能和用法的应用程序,它涵盖了从基础控件到高级特性的全方位示例,是开发者学习...
《Android ApiDemos apk:深入理解Android应用开发的实践指南》 Android ApiDemos apk是Android开发者们熟悉的一个示例程序,它包含了Android SDK中的各种API功能演示,为开发者提供了丰富的学习资源。这个应用程序...
ApiDemos 6.0
总的来说,"Demos.rar_3D射击游戏_d3d_d3d 游戏_shooting_游戏demo"为我们提供了一个学习和实践3D游戏开发的良好起点,通过深入研究和实践,开发者可以掌握D3D的核心技术和3D射击游戏的开发流程,进一步提升自己的...
《Android 8.1版本ApiDemos源码详解:深入理解API使用实例》 在Android开发领域,理解和熟练运用各种API是提升技能的关键步骤。"8.1版本ApiDemos源码"为开发者提供了一个宝贵的资源,它包含了Android 8.1系统中各种...
《Android ApiDemos详解——揭示Android开发的奥秘》 Android ApiDemos是Android开发者学习和探索平台功能的重要资源库,它集成了Android SDK中的各种控件、绘图技术以及四大组件(Activity、Service、...
《ApiDemos示例源码解析》 ApiDemos是Android平台提供的一款示例应用,它包含了Android SDK中的各种API功能展示,对于开发者来说,这是一个非常宝贵的资源库,可以帮助我们深入理解和学习Android系统的API用法。...
"ant-design-demos" 是一个基于Ant Design框架的示例集合,主要展示了Ant Design的各种组件和功能在实际应用中的使用方式。Ant Design是一款由阿里集团开发的高质量React UI库,它提供了一系列美观、易用且具有企业...
文件名称: jdk-8u211-windows-x64-demos.zip 文件大小: 57.0 MB (59,804,583 字节) MD5: c759dd4d00b1ee2ed172e21d3a7b2d82 SHA1: 9dd4288b1486621efe4e7e261b0aac9f2a1decb5 SHA256: bef76dec23897b81f3fb5ed8b7c...
"Android Demos"是一个集合了各种Android开发示例的应用程序,它包含了丰富的代码实例,旨在帮助开发者更好地理解和学习Android平台的各种功能和API的使用。这个压缩包中的"ApiDemos"很可能是一个官方或非官方的实现...
`Support4Demos`这个项目就是专门用来演示如何使用`support-v4`库中的功能,尤其是关于`Fragment`和`ViewPager`的使用。 首先,我们来详细了解一下`Fragment`。`Fragment`是Android 3.0(API级别11)引入的概念,...
ApiDemos是Android开发中的一个经典示例项目,它包含了Android SDK中各种API的示例代码,用于展示如何使用Android框架的各种功能。这个最新的ApiDemos源码版本为开发者提供了直观的学习材料,帮助他们理解并实践...
《安卓ApiDemos详解——掌握Android API实践精髓》 安卓ApiDemos,作为一个开发者们耳熟能详的项目,它是Android SDK中一个重要的组成部分,它提供了丰富的API实例,旨在帮助开发者深入理解和掌握Android系统的各种...
《mesa-demos_8.4.0.orig.tar.gz:深入探索OpenGL ES 2.0演示与Mesa库》 在计算机图形学领域,OpenGL ES(OpenGL for Embedded Systems)是针对嵌入式设备如智能手机、游戏机和平板电脑等设计的一个开放标准图形库...
API Demos 是 Google 为了 Android 开发者所提供的一个 Android API 合集,其中包含了很多的 API 范例,同时遵循了良好的代码规范,是一个值得开发者研究和学习的典型。android的ApiDemos,需要解压缩后使用。
【Android Studio支持库support4Demos详解】 在Android开发中,`support4Demos`是一个重要的学习资源,它包含了Google官方支持库v4版本的各种组件和功能的示例代码。这个压缩包文件“support4Demos”是针对Android ...