当前位置: 首页 > news >正文

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • pytest 生成allure测试报告
  • 网络安全 L2 Introduction to Cryptography 密码学
  • 技术接口:日志程序2
  • 今日leetCode 160.链表相交
  • Java 每日一刊(第4期):Java 23 即将发布
  • 基于“硅基”的AI数字人要闻直播
  • 乔迁新址,盛启新章!聚铭网络河北办事处盛大开业
  • el-table使用合计和固定列时,滚动条被覆盖区域无法拖拽问题
  • 解决vue3 useRoute无法获取get参数记录
  • 面试常见八股
  • 【MATLAB】数据和字符串类型转换
  • html+css网页设计 旅游 雪花旅行社5个页面
  • C#基础(11)函数重载
  • 【JS】将class转为构造函数需要注意的细节
  • 深度学习算法
  • 【EOS】Cleos基础
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 3.7、@ResponseBody 和 @RestController
  • CSS实用技巧
  • eclipse的离线汉化
  • es6
  • overflow: hidden IE7无效
  • PAT A1017 优先队列
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 给github项目添加CI badge
  • 汉诺塔算法
  • 前端设计模式
  • 通过几道题目学习二叉搜索树
  • 线性表及其算法(java实现)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 再谈express与koa的对比
  • kubernetes资源对象--ingress
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 通过调用文摘列表API获取文摘
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (55)MOS管专题--->(10)MOS管的封装
  • (9)STL算法之逆转旋转
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (分布式缓存)Redis持久化
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (黑马点评)二、短信登录功能实现
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (六)vue-router+UI组件库
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)c++ std::pair 与 std::make
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .jks文件(JAVA KeyStore)
  • .net 7和core版 SignalR
  • .net中生成excel后调整宽度
  • @ConfigurationProperties注解对数据的自动封装
  • @Transactional事务注解内含乾坤?
  • @在php中起什么作用?