鸿蒙(API 12 Beta6版)【ArkGraphics 3D资源创建以及使用】方舟3D图形

news/2024/9/19 11:27:44/ 标签: harmonyos, 3d, 华为, openharmony, 鸿蒙, 鸿蒙系统, 图形

3D场景中资源类型主要包含以下几种:

  • 材质(Material): 材质是对场景中物体的光学物理性质的数学建模。在渲染计算的过程中,利用这些物理性质计算与光的相互作用,得到最终渲染的颜色。ArkGraphics 3D提供的材质类型基于PBR渲染,支持用户参照PBR渲染材质类型创建材质资源,得到预期的渲染结果。
  • 图片(Image): 图片本质上是上一个储存信息的二维内存块(buffer),用于储存3D渲染计算过程需要的相关信息,比如基础色、法线等等。ArkGraphics 3D提供基于png、jpg、ktx格式创建Image资源的能力,支持用户自定义需要的Image资源。
  • 着色器(Shader): 着色器是GPU上可以执行的一段程序,可以控制GPU执行哪些并行计算操作。AGP引擎提供的默认着色器实现了PBR渲染,开发者只需要指定对应的参数就可以完成不同的PBR渲染。ArkGraphics 3D支持开发者创建自定义的着色器,开发者可以通过自定义着色器自定义渲染计算过程,完全控制渲染计算流程,比如控制某物体不受某光源的影响等。
  • 环境(Environment): 环境是3D场景背景的一种描述,可以基于图片进行创建。通过将一张图片进行正方体或者球体的映射处理,将图片贴在正方体或者球体上,在3D场景中模拟真实的环境。ArkGraphics 3D支持用户创建环境资源,定义3D场景的背景。
  • 动画(Animation): 3D中的动画资源用于创建三维场景可以运动的虚拟对象,例如人物、动物、车辆等。它们是构成3D场景的基本元素之一,为动画片、游戏、虚拟现实等领域提供了丰富的内容。

材质的创建及使用

材质的关键属性包括名字和类型,以此为输入可以创建材质。示例代码如下:

import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';function createMaterialPromise() : Promise<Material> {return new Promise(() => {let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));scene.then(async (result: Scene) => {let sceneFactory: SceneResourceFactory = result.getResourceFactory();let sceneMaterialParameter: SceneResourceParameters = { name: "material" };// 创建材质let material: Promise<Material> = sceneFactory.createMaterial(sceneMaterialParameter, MaterialType.SHADER);return material;});});
}

着色器资源的创建及使用

着色器主要用于控制GPU计算,给开发者提供自定义渲染的能力,提高了3D渲染控制的灵活性。着色器资源的创建需要着色器资源的名字以及着色器在文件沙箱中的路径。着色器资源主要的使用场景是替换材质的着色器属性,给材质自定义渲染算法,达到灵活控制渲染过程的目的,示例代码如下:

import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';function createShaderPromise() : Promise<Shader> {return new Promise(() => {let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));scene.then(async (result: Scene) => {let sceneFactory: SceneResourceFactory = result.getResourceFactory();// 创建SceneResourceParameters类型变量并以此创建shaderlet sceneResourceParameter: SceneResourceParameters = { name: "shaderResource",uri: $rawfile("shaders/custom_shader/custom_material_sample.shader") };let shader: Promise<Shader> = sceneFactory.createShader(sceneResourceParameter);shader.then(async (shaderEntity: Shader) => {let sceneMaterialParameter: SceneResourceParameters = { name: "material" };// 创建材质let material: Promise<Material> = sceneFactory.createMaterial(sceneMaterialParameter, MaterialType.SHADER);material.then(async (materialEntity: ShaderMaterial) => {// 绑定材质与shadermaterialEntity.colorShader = shaderEntity;});});return shader;});});
}

图片资源的创建及使用

3D场景中的图片资源是指GPU可以直接使用的图片资源。创建图片资源的关键参数包括图片资源的名字以及图片资源的路径。将图片资源应用到材质中作为材质属性,是常见的图片资源使用方式之一,示例代码如下:

import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';function createImagePromise() : Promise<Image> {return new Promise(() => {let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));scene.then(async (result: Scene) => {let sceneFactory: SceneResourceFactory = result.getResourceFactory();let sceneImageParameter: SceneResourceParameters = { name: "image", uri: $rawfile("bricks.jpg") };// 创建Imagelet image: Promise<Image> = sceneFactory.createImage(sceneImageParameter);image.then(async (imageEntity: Image) => {let sceneMaterialParameter: SceneResourceParameters = { name: "material" };// 创建材质let material: Promise<Material> = sceneFactory.createMaterial(sceneMaterialParameter, MaterialType.SHADER);material.then(async (materialEntity: ShaderMaterial) => {// 利用创建的图片资源设置纹理属性if (materialEntity && materialEntity.colorShader) {materialEntity.colorShader.inputs["BASE_COLOR_Image"] = imageEntity;}});});return image;});});
}

环境资源的创建及使用

环境资源的创建需要指定名字以及图片或者glTF在文件沙箱中的路径,将环境资源设置到3D scene的environment属性,即可以将创建的环境资源设置为3D场景的背景环境。环境资源提供了diffuseFactor、specularFactor等的属性,支撑开发者对于环境资源属性进行控制。示例代码如下:

import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';function createEnvironmentPromise() : Promise<Environment> {return new Promise(() => {let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));scene.then(async (result: Scene) => {let sceneFactory: SceneResourceFactory = result.getResourceFactory();let sceneEnvironmentParameter: SceneResourceParameters = { name: "env", uri: $rawfile("bricks.ktx") };// 创建Environmentlet env: Promise<Environment> = sceneFactory.createEnvironment(sceneEnvironmentParameter);env.then(async (envEntity: Environment) => {// 设置env相关属性envEntity.indirectDiffuseFactor.x = 1;envEntity.indirectDiffuseFactor.y = 1;envEntity.indirectDiffuseFactor.z = 1;envEntity.indirectDiffuseFactor.w = 1;});return env;});});
}

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 鸿蒙 (OpenHarmony)开发学习视频》
  • 鸿蒙生态应用开发V2.0白皮书》
  • 鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 鸿蒙开发基础》
  • 鸿蒙开发进阶》
  • 鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1


http://www.ppmy.cn/news/1522957.html

相关文章

Arduino IDE安装操作指南

Arduino是一个基于开源硬件和软件的平台&#xff0c;旨在使人们更容易开发电子项目。Arduino IDE&#xff08;集成开发环境&#xff09;是用于编写代码、编译和上传到Arduino开发板的工具。无论是电子爱好者、新手还是专业开发者&#xff0c;Arduino IDE都是一个不可或缺的工具…

人工智能在C/C++中的应用

随着技术的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们日常生活中不可或缺的一部分。从智能手机的语音助手到自动驾驶汽车&#xff0c;AI的应用无处不在。在众多编程语言中&#xff0c;C和C因其高性能和灵活性&#xff0c;成为实现复杂AI算法的理想选…

HivisionIDPhotos-证件照-免费开源的AI证件照制作工具

HivisionIDPhoto 旨在开发一种实用的证件照智能制作算法。 它利用一套完善的模型工作流程&#xff0c;实现对多种用户拍照场景的识别、抠图与证件照生成。 HivisionIDPhoto 可以做到&#xff1a; 轻量级抠图&#xff08;仅需 CPU 即可快速推理&#xff09;根据不同尺寸规格生…

《Nginx核心技术》第16章:实现Nginx的高可用负载均衡

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

2024 年高教社杯全国大学生数学建模竞赛题目-C 题 农作物的种植策略

根据乡村的实际情况&#xff0c;充分利用有限的耕地资源&#xff0c;因地制宜&#xff0c;发展有机种植产业&#xff0c;对乡村经济 的可持续发展具有重要的现实意义。选择适宜的农作物&#xff0c;优化种植策略&#xff0c;有利于方便田间管理&#xff0c;提 高生产效益&#…

HTTPS访问是什么?

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种安全的网络传输协议&#xff0c;它基于HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;进行工作&#xff0c;但增加了安全性的要求。HTTPS通过在客户端&#xff08…

014.PL-SQL编程

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

lvs dr模式集群搭建

lvs-dr模式 集群搭建 编辑zyj86主机网卡配置文件 cd /etc/sysconfig/network-scripts/ cp ifcfg-ens160 ifcfg-ens160:1 vim ifcfg-ens160:1TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITyes IPV6_AUTOCONFyes IP…

经验笔记:持续集成/持续部署(CI/CD)流程

持续集成/持续部署&#xff08;CI/CD&#xff09;流程经验笔记 随着软件开发的快速发展&#xff0c;持续集成&#xff08;Continuous Integration, CI&#xff09;和持续部署&#xff08;Continuous Deployment, CD&#xff09;已经成为现代软件工程不可或缺的部分。CI/CD不仅…

Transformer、BERT、GPT、T5、LLM(大语言模型),以及它们在实际行业中的运用

作为AI智能大模型的专家训练师&#xff0c;我将从主流模型框架的角度来分析其核心技术特点及其在不同实际行业中的应用。我们重点讨论以下几个主流模型框架&#xff1a;Transformer、BERT、GPT、T5、LLM&#xff08;大语言模型&#xff09;&#xff0c;以及它们在实际行业中的运…

【unity小技巧】使用Unity的Animation Layer和Avatar Mask把多个不同动画组合使用,实现人物不同部位播放不同的动画

文章目录 前言如何使用Unity的Animation Layer和Avatar Mask把多个动画组合使用游戏角色的疲劳感是如何制作的&#xff1f;利用Animation Layers中的additive模式把多个动画混合在一起如何制作角色的受伤状态&#xff1f;Unity动画层级&#xff08;Animation Layer&#xff09;…

ChatGPT 3.5/4.0使用手册:解锁人工智能的无限潜能

1. 引言 在人工智能的浪潮中&#xff0c;ChatGPT以其卓越的语言理解和生成能力&#xff0c;成为了一个革命性的工具。它不仅仅是一个聊天机器人&#xff0c;更是一个能够协助我们日常工作、学习和创造的智能伙伴。随着ChatGPT 3.5和4.0版本的推出&#xff0c;其功能和应用范围…

Ftrans无缝替代FTP方案:保障数据传输的安全性与合规性

FTP&#xff08;文件传输协议&#xff09;是一种用于在网络上进行文件传输的标准网络协议&#xff0c;历史悠久并且被广泛使用。但随着业务规模和文件体量的快速增长&#xff0c;在应用实践中&#xff0c;FTP存在一些安全和效率问题。因此政府单位需要可以平滑替代FTP的文件传输…

【H2O2|全栈】关于HTML(2)HTML基础(一)

HTML相关知识 目录 前言 准备工作 标签的具体分类&#xff08;一&#xff09; 本文中的标签在什么位置使用&#xff1f; 属性 标题标签 段落标签 文本格式化标签 分类汇总 计算机输出标签 ​编辑分类汇总 引文&#xff0c;引用标签 分类汇总 预告和回顾 UI设计…

消息中间件都有哪些

RabbitMQ&#xff1a;这可是一个开源的消息代理软件&#xff0c;也叫消息中间件。它支持多种消息传递协议&#xff0c;可以轻松地在分布式系统中进行可靠的消息传递。 Kafka&#xff1a;Apache Kafka是一个分布式流处理平台&#xff0c;它主要用于处理实时数据流。Kafka的设计初…

C#学习 深入理解委托、匿名方法、Lamda表达式、Linq;

目录 一.委托 1.1 什么是委托 1.2 委托的使用 二.匿名方法和Lamda表达式 2.1 什么是匿名方法 2.2 Lambda表达式 三.Linq 3.1 Linq理解 3.2 Linq的扩展方法 一.委托 1.1 什么是委托 委托和类一样&#xff0c;是具有特定参数列表和返回值类型的方法函数的…

3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议 协议只是一种规则&#xff0c;你不按规则来就无法和目标方进行你的工作 协议说白了只是人定的规则&#xff0c;任何人都可以定协议 我们不需要太了解细节&#xff0c;这些制定和完善协议的人去做的&#xff0c;我们只需要知道协议的一个大概 HTTPS 协议 1、概述…

【2.2 简单的逻辑电路,包括与门、与非门、或门】

2.2 简单的逻辑电路&#xff0c;包括与门、与非门、或门 在深度学习中&#xff0c;直接实现传统逻辑电路&#xff08;如与门、与非门、或门&#xff09;并不是最常见的应用&#xff0c;因为深度学习模型&#xff08;如神经网络&#xff09;通常用于处理更复杂、更抽象的数据表示…

Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)

文章目录 引言I 跨域运行案例开发资源测试/生产环境,Nginx代理转发,实现跨域运行本机开发运行II nginx的location指令Nginx配置中, 获取自定义请求header头Nginx 配置中,获取URL参数引言 背景:全景监控 需求:感知站点由于云台相关操作为 http 请求,http 请求受浏览器…

MonoHuman: Animatable Human Neural Field from Monocular Video 精读

一、共享双向变形模块 1. 模块的核心思想 共享双向变形模块的核心目标是解决从单目视频中生成不同姿态下的3D人体形状问题。因为视频中的人物可能处于各种动态姿态下&#xff0c;模型需要能够将这些不同姿态的几何形状进行变形处理&#xff0c;以适应标准的姿态表示并生成新的…