第1章—O3D程序框架

使用O3D javascript API构建一个O3D应用 在HTML中导入所需要的js包。O3D Example <!--//o3d js// --> O3D Example 一个复杂的3D应用包含场景、摄像机、3D几何体、灯管和材质等。o3djs.require(o3djs.util);o3djs.require(o3djs.rendergraph 阅读详情

一、要创建一个o3d项目需要做的基本工作

      1、生成o3d对象

      2、给全局变量赋值并且初始化API库

      3、生成pack包,用于管理所有产生的o3d对象

      4、生成渲染图形

      5、建立上绘图环境(透视网格和视图转换)

      6、生成效果,并加载渲染信息

      7、生成素材和形状,设置素材列表及其他素材参数

      8、对模型添加动作及形状

      9、生成绘制元素列表

      10、建立渲染回调函数,在每次3D模型刷新时执行特定任务

 

 

二、HTML文档

      一个o3d应用程序是基于HTML的,主要的o3d功能是HTML文档的<head></head>标签之间,包含在<script>标签元素的代码实现的,例如下面的代码。

      当HTML文档完成加载时,o3d的init()函数被调用。当关闭HTML文档时,会触发onunload事件,从而调用o3d的uninit()函数,完成一些清理工作,比如对象的删除,内存释放等。


<script type="text/javascript" src="o3djs/base.js"></script>
<script type="text/javascript">
o3djs.require('o3djs.util');
o3djs.require('o3djs.math');
o3djs.require('o3djs.rendergraph');
window.onload = init;
window.onunload = uninit;

 


 

 

三、o3d接口API库

      O3D包含了一系列公用库,如果要用某个功能函数,就需要在程序的开始在<script>标签内加载该代码。如下所示,第一个<script>标签内的加载的库中定义了require()函数,用这个函数来加载其他的接口API库。


<script type="text/javascript" src="o3djs/base.js"></script>
<script type="text/javascript">
o3djs.require('o3djs.util');
o3djs.require('o3djs.math');
o3djs.require('o3djs.rendergraph');


 

 

四、生成O3D插件对象

      在代码示例中,init()函数调用了o3d库函数o3djs.util.makeClients(),以此来产生o3d对象。当这个函数返回时,它会调用回调函数initStep2()。用户浏览器必须允许脚本执行。

 


 

function init() {
o3djs.util.makeClients(initStep2)
}

 


 

 

       在页面设置客户区窗口大小(即O3D程序运行区域)

用库函数o3djs.util.makeClients()在HTML中生成O3D对象可以跨平台使用。这个函数查找HTML文档中所有id以"o3d"开头的(例如o3d,o3d-element等)<div>标签,并在里面插入一客户区,以运行O3D程序。客户区域大小默认设置为100%,因此<div>必须有大小设置,如下

 


 

<!-- A div of a specific size -->
<div id="o3d" style="width:800px; height:600px" />
<!-- A div that fills its containing element -->
<div id="o3d" style="width:100%; height:100%" />

 


 

      makeClients()函数传入一个回调函数作为参数,一旦o3d对象被创建,此回调函数就会被触发。

 

 

五、建立基本的O3D

       给全局变量赋值:


var o3dElement = clientElements[0];
g_client = o3dElement.client;
g_o3d = o3dElement.o3d;
g_math = o3djs.math;


上面的变量有如下意义:

• o3dElement 是HTML O3D元素,是DOM的一部分

• g_client 是O3D应用程序的入口点
• g_o3d 是O3D的命名空间
• g_math是o3d数学库的命名空间

 

 

六、产生对象包pack

     对象包容纳了o3d的所有对象,并控制这些对象的生命周期。

g_pack = g_client.createPack();

 

 

七、创建渲染图

       下这段例子代码,用库函数renderGraph.createBasicView()产生一个标准的渲染图。这个渲染图有两个绘图列表,一个用于绘制非透明材质的元素(性能绘图列表),另一个用于绘制透明材质元素(透明效果绘图列表)

 


 

var viewInfo = o3djs.renderGraph.createBasicView(
g_pack,
g_client.root,
g_client.renderGraphRoot);

 


 

 

 

八、设置绘图背景(drawContext)

       绘图背景指定了视图投影和虚拟摄像机的位置。drawContext对象是用库函数renderGraph.createBasicView()产生的。下面的例子代码展示了如何设置它的参数:


// 建立一个简单的透视图

viewInfo.drawContext.projection = g_math.matrix4.perspective(
g_math.degToRad(30), // 30度视场

g_client.width / g_client.height,
1, // 靠近平面

5000); // 远离平面
// 建立视图变换注视模型所在的区域

viewInfo.drawContext.view = g_math.matrix4.lookAt([0, 1, 5], // 眼睛

[0, 0, 0], // 目标
[0, 1, 0]); // 向上

 


 

 

 

九、创建一个效果并加载渲染

       顶点和像素着色器定义在HTML文档的<textarea>之间。着色器控制每个像素的颜色计算。下面的代码产生效果(redEffect)并将渲染内容读入着色器。


var redEffect = g_pack.createObject('Effect');
// 在HTML文档中寻找“Effect”的元素

var shaderString = document.getElementById('effect').value;
// 将元素<textarea id="effect"> 中的所有内容加载到Effect对象中

redEffect.loadFromFXString(shaderString);


 

十、生成材质和形状

       模型的材质是在initStep2()中创建的,并被赋给渲染列表,该列表控制非透明材质。在下面的代码将模型的材质效果设置为红色 'redEffect’,这样图形硬件可以可以对模型进行适当的渲染。在下面的代码中,由于将模型所有像素都设置为红色,所以没有进行复杂的渲染计算。代码中的createCube()函数,创建了几何立方体,并渲染成红色材质。可以将立方体替换成SketchUp, 3ds Max或者Maya

等工具建的模型。


var redMaterial = g_pack.createObject('Material');
redMaterial.drawList = viewInfo.performanceDrawList;
redMaterial.effect = redEffect;
var cubeShape = createCube(redMaterial);

 


 

 

十一、给模型建立动作

        下面的代码给模型赋予了简单的动作变换。


g_cubeTransform = g_pack.createObject('Transform');
g_cubeTransform.addShape(cubeShape);
g_cubeTransform.parent(g_client.root);


 

十二、产生绘制元素(Draw Elements)

       每个图形基元都有一个用于描述该图形的材质及效果的绘制元素(draw element)。库函数createDrawElements()为每个图形基元生成不同的绘制元素(draw element)并将这些绘制元素添加到与图形基元材质有关的绘制列表(draw list)中。当窗口渲染时,系统会为每个绘制列表(draw list)产生一次绘制刷新(draw pass),这样所有的在绘制列表(draw list)中的绘制元素(draw element)就会被渲染。


cubeShape.createDrawElements(g_pack, null);


 

十三、设置渲染回调函数

        每次硬件刷新屏幕时,场景都会被自动渲染。下面的例子代码中setRenderCallback()函数设置了一个回调,用于每次场景渲染时更新模型的动作及形状。


g_client.setRenderCallback(renderCallback);


 

 

      

 

      

RK3576的ISP和VPSS图像处理能力实测:对比海思方案能做什么? 本文深度评测了RK3576芯片的ISP和VPSS图像处理能力,并与海思方案进行对比。测试显示,RK3576在MIPI接口灵活性、多路视频支持、HDR动态范围和降噪效果等方面表现优异,特别适合智能视觉和安防监控应用。通过实测数据展示了其在低照度、高动态范围等复杂场景下的卓越性能。 阅读详情

相关推荐

条码打印工具-Bartender的使用

文章目录1、安装Bartender1.解压安装包,可获得bartender2021版本和破解文本2. 双击“BarTender_2021_R1_Full_x64.exe”文件运行,勾选协议及软件安装设置3. 选择安装选项,自行选择勾选,点击Browser可更换软件安装路径4. 耐心等待软件安装完成,直接点击完成退出5. 此时会弹出提示需要激活许可证,先点击取消6. 接着将Crack夹中的“BarTend.exe”破解文件复制到软件安装目录中替换7. 再双击“serial.reg”导入注册,点击确定即可8.

暮紫的笔记本 1万+

O3D 简明入门

O3D是google公司开发的一套用于web3D开发的javascript API,是为了创建基于网页的3D图形操作界面和3D游戏而开发。网上经常有人把它拿来和OpenGL作比较,实际上,O3D可以看做是对OpenGL和D3D的封装。O3D的架构如下所示,底层是基于OpengGL和Direct3D接口实现,支持顶点shader和像素shader,支持GPU加速运算,因此,在不考虑带宽限

啥东西都张罗 3084

载波同步技术(一):BPSK的Costas Loop 载波同步

Author:McCrocodile 2010/11/04          载波的提取在相干解调中往往比较重要,根据信号中是否包含载频分量,载波同步一般也可以分为两种方法。包含载频分量的可以采用窄带滤波或者基本的锁相环环路来实现,不包含的则比较麻烦需要采用特殊的环路实现载波的同步。这里介绍的BPSK的载波恢复就属于后面一种。 对于不包含载频分量的信号载波同步一般有:同相-正交环(就是常说的Costas环)、判决反馈环(几乎可以适用所有调制方式)、同相-正交环衍生环(QPSK松尾环、N相同相-正交环)。

McCrocodile Blog 1万+

O3D 编程起步

1.  下载 o3djs  js库 ,下载地址为 http://o3d.googlecode.com/svn/trunk/samples/o3djs/,请下载所有的js库并放入一个文件夹中,文件夹名可任意,但建议命名为 o3djs 。2.  引入base.js , 网页和文件夹同级。3.  在 内加入 ,其中div 标签 id 必须以o3d开头,width 和 height 是标签的宽

o3d_tech 1663

Streamlit安装避坑指南:从零到一键启动你的第一个数据可视化应用

本文提供了一份详尽的Streamlit安装避坑指南,帮助用户从零开始快速启动第一个数据可视化应用。文章深入剖析了安装过程中常见的网络超时、依赖冲突、环境变量缺失等核心问题,并给出了使用虚拟环境、配置国内镜像源、利用.whl文件离线安装等多种经过验证的解决方案,确保安装过程顺畅无阻。

weixin_29065015的博客 614

深入解析MTK平台hang_detect机制:从原理到实战调试

本文深入解析了MTK平台hang_detect机制的工作原理与实战调试技巧。作为系统健康监测的核心机制,hang_detect通过多层级监控体系检测应用层和内核层异常,结合Kernel_exception等日志信息快速定位问题。文章详细介绍了典型问题案例、调试方法及预防措施,帮助开发者提升MTK平台系统稳定性调试能力。

purple的博客 1004

O3D程序基本结构

创建一个O3D对象 设置全局变量初始化通用库 创建一个O3D包管理对象 创建一个渲染图 设置绘图上下文(包括投影矩阵和观察转化矩阵) 创建材质效果对象,加载shader 文件或内容,付给材质效果对象 创建材质对象和形状对象,设置材质 draw list(透明或不透明)设置材质对象其他参数 j加载一个矩阵变换(transforms)和形状对象(shapes)到转换图对象(tra...

wjlgryx的专栏 197

YOLOv11数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强

本文介绍了YOLOv11目标检测中的数据集增强技术,重点解决图像与标注标签同步扩充的关键问题。文章系统分析了三类增强方法:几何变换(翻转、旋转、缩放)、颜色变换(亮度、对比度调整)和高级增强(Mosaic、MixUp),并探讨了其在小样本检测、复杂场景泛化和多方向目标识别等场景的应用价值。针对核心的标签同步问题,提供了基于Python和OpenCV的详细代码实现示例,展示如何对图像进行水平翻转和缩放操作时精确调整YOLO格式边界框坐标。该技术能有效解决训练数据不足和多样性匮乏问题,显著提升模型的泛化性能。

走向CTO的路上... 1512

O3D 例2- 立方体的移动、缩放和旋转

     通过transform 对象 实现 物体的移动、旋转和缩放  主要实现函数为 transform 的 translate方法、rotate方法和scale方法    和例子1的主要区别为 添加了  1. moveto 函数,实现移动  2. rotate 函数,实现旋转  3. scale  函数,实现缩放  edited by fieldyang--> 第二个例子-立方体的移动、缩

fieldyang的专栏 1119

3.DJI-payload SDK自定义控件的设计:

自定义控件(Widget)是指负载运行时,在用户界面中显示的自定义 UI 控件,以帮助用户快速查看负载独特的设备状态,或者对负载设进行设置。这些 UI 控件可以显示在以下用户界面中。Pilot 2 应用程序;大疆智图;基于 MSDK 开发的应用程序。这种自定义控件并不是通过 MSDK 实现的,而是通过 PSDK 的配置实现的。。

哒宰的博客 770

PyCharm配置SSH远程解释器第3步时弹框报错:com.google.gson.stream.MalformedJsonException: Expected value at l...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1928

o3d教程1 - 基本程序框架

O3d是一套开源的javascript API, 用来制作在浏览器中运行的3D游戏,当然也可以用来展示商家的产品,做一些3D模型。这系列教程会用一个个例子来展示如何写一个o3d程序,展示o3d所能够做的应用。    巧妇难为无米之炊,首先当然需要一些基本的东西,像o3d插件,这个可以在google code中获取,给个

luckdog_hot的专栏 2090

SAP HANA 中的 Union Node Pruning:让 Calculation View 少走弯路的关键优化

摘要:SAP HANA的Union Node Pruning技术通过在执行前排除无关数据源来优化查询性能。该技术主要采用三种方式:Constant Mapping(适用于规则稳定的场景)、Pruning Configuration Table(灵活性高)和Column-Based Pruning(基于列可用性)。典型应用场景包括分层存储的数据查询,如区分当前和历史销售数据。需要注意的是,当查询发生Unfolding且不含聚合时,Pruning可能失效,此时可通过NO_CALC_VIEW_UNFOLDING提

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 874

o3d基本程序框架-(转 这个比我写的全面)

O3d 是一套开源的javascript API, 用来制作在浏览器中运行的3D 游戏,当然也可以用来展示商家的产品,做一些3D 模型。这系列教程会用一个个例子来展示如何写一个o3d 程序,展示o3d 所能够做的应用。      巧妇难为无米之炊,首先当然需要一些基本的东西,像o3d 插件,这个可以在google code 中获取,给个链接http://code.google.com/in

o3d_tech 1442

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

o3d 基本教程框架和初步demos

O3d 是一套开源的javascript API, 用来制作在浏览器中运行的3D 游戏,当然也可以用来展示商家的产品,做一些3D 模型。这系列教程会用一个个例子来展示如何写一个o3d 程序,展示o3d 所能够做的应用。 巧妇难为无米之炊,首先当然需要一些基本的东西,像o3d 插件,这个可以在google code 中获取,给个链接http://code.google.com/in...

wjlgryx的专栏 261

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

O3D介绍

转自:http://xml.iteye.com/blog/531493 1、O3D简介 O3D是google公司开发的一款网页上运行的3D图形接口,是为了创建基于网页的3D图形操作界面和3D游戏而开发。 2、O3D结构 O3D支持GPU加速运算,底层是基于OpengGL和Direct3D接口实现,支持顶点shader和像素shader。O3D提供的JavaScript...

diyuan365760的专栏 281

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

o3d demos 画圆

这个Demo还没有添加任何东西,但是却可以让我们了解到基于O3D开发的程序框架。一个O3D程序需要完成的任务如下:1 创建一个O3D object2 给全局变量赋值,并初始化程序库3 创建pack以管理O3D objects4 创建render graph5 建立draw context(远景和视野转换)6 创建一个效果,载入shader information7 创建材质和形状,设置材质绘制列表...

wjlgryx的专栏 254

O3D技术简介(二)

 导入内容       调用O3D库可以直接在应用程序上绘制基本形状(如点,线,三角形,三角面,三角柱形(triangle fan??)) 。如下所示O3D提供的示例显示如何从一个COLLADA文件导入内容,COLLADA转换器从3D内容创建应用程序导入内容,如Autodesk 3ds Max, Maya和Google SketchUp。   如上图所示, 最初的从3ds

o3d_tech 1716

Hunyuan3D-1:文本和图像驱动的3D生成框架

Hunyuan3D-1 是腾讯推出的一款统一框架,致力于将文本和图像高效地转化为高质量的3D模型。该框架通过两个阶段的生成流程,不仅大大缩短了生成时间,而且保证了3D资产的质量和多样性。 ## 项目技术分析 Hunyuan3D-1 的技术核心是一个两阶段的生成方法。第一阶段使用多视角扩散模型,仅需大约4秒即可高效生成多视角的RGB图像。这些多视角图像捕捉了3D资产从不同视角的丰富细节,从而将任

gitblog_01128的博客 783

o3d 简介

    O3D是一种开源的JavaScript API,可以创造交互式三维图形应用,这些应用能够在浏览器窗口中运行,例如游戏,广告,三维模型浏览,产品演示,虚拟世界等。 O3D扩展了基于Web的客户端软件,通过以下方面:    1、系统:O3D提供了一个浏览器插件,增强标准网页浏览器的图形处理能力,包括Windows , Macintosh和Linux (TBP??不晓得什么意思)平台。    2...

wjlgryx的专栏 472

O3D 程序框架

一、要创建一个o3d项目需要做的基本工作 1、生成o3d对象 2、给全局变量赋值并且初始化API库 3、生成pack包,用于管理所有产生的o3d对象 4、生成渲染图形 5、建立上绘图环境(透视网格和视图转换) 6、生成效果,并加载渲染信息 7、生成素材和形状,设置素材列表及其他素材参数 ...

wjlgryx的专栏 138

o3d教程2 - shapes

 这一章介绍怎么用顶点数组创建一个3D模型,如何创建一个shape对象,缓冲(buffers),域(fields)等等。    由于要定义这个3D模型的每个顶点,然后存入顶点数组,所以这章不会画出一个比较复杂的3D模型,我们只是画一个立方体来说明如何创建一个3D模型,如果对于一个复杂的3D模型还是一个个顶点画的话,只能说太牛逼

luckdog_hot的专栏 1243

如何快速安装Hunyuan3D-1:腾讯3D生成框架的完整指南

Hunyuan3D-1是腾讯推出的一款强大的3D生成框架,支持文本到3D和图像到3D的生成功能。本指南将为你提供简单快速的安装步骤,让你轻松上手这款高效的3D创作工具。 ## 准备工作 在开始安装Hunyuan3D-1之前,请确保你的系统满足以下要求: - Linux操作系统 - 足够的存储空间(建议至少10GB) - 稳定的网络连接 ## 克隆项目仓库 首先,我们需要克隆Hunyuan3

gitblog_00431的博客 882

o3d 简单介绍

调用O3D库可以直接在应用程序上绘制基本形状(如点,线,三角形,三角面,三角柱形(triangle fan??)) 。如下所示O3D提供的示例显示如何从一个COLLADA文件导入内容,COLLADA转换器从3D内容创建应用程序导入内容,如Autodesk 3ds Max, Maya和Google SketchUp。  如上图所示, 最初的从3ds Max,Maya和SketchUp导入的COLLA...

wjlgryx的专栏 366

Hunyuan3D-2.1论文速读:一种用于文本到 3D 和图像到 3D 生成的统一框架

Hunyuan3D 1.0提出了一种高效统一的文本/图像到3D生成框架,通过两阶段流程解决现有3D扩散模型速度慢和泛化能力差的问题。第一阶段采用多视图扩散模型在4秒内生成多视角图像,第二阶段使用前馈重建模型在7秒内恢复3D结构。创新性地引入自适应分类器自由引导策略和混合输入技术,显著提升了生成质量与一致性。实验表明,该方法在GSO和OmniObject3D数据集上均达到了最优性能,用户研究也验证了其在速度和质量上的优势。该研究为3D生成领域提供了高效实用的解决方案。

直达开源前线,冲冲冲! 1546
上一篇: 怎样将3dmax模型转换为*.o3dtgz
下一篇: SVN使用方法
O3D_tech
博客等级 码龄17年 24粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值