Babylonjs学习笔记(二)——创建基本材质

news/2025/1/18 6:15:26/

书接上回,这里讨论给网格添加材质!!!

准备好材质

1、创建材质球

/*** 创建网格材质* @param scene 场景对象* @returns 材质对象*/
const createGroundMaterial=(scene:Scene):StandardMaterial=>{const texArray:Texture[] =[]// 材质uv缩放const uvScale = 4;const groundMaterial = new StandardMaterial('groundMaterial',scene)// diffuse 漫射纹理const diffuseTex = new Texture('./textures/random_bricks_thick_diff_4k.jpg',scene);groundMaterial.diffuseTexture  = diffuseTextexArray.push(diffuseTex)// normal 法线纹理const normalTex = new Texture('./textures/random_bricks_thick_nor_gl_4k.jpg',scene)groundMaterial.bumpTexture = normalTex;texArray.push(normalTex)// AO环境遮挡const aoTex = new Texture('./textures/random_bricks_thick_ao_4k.jpg',scene)groundMaterial.ambientTexture = aoTex;texArray.push(aoTex)// spec 镜面纹理const speTex = new Texture('./textures/random_bricks_thick_spec_4k.jpg',scene)groundMaterial.specularTexture = speTex;texArray.push(speTex)texArray.forEach((tex)=>{tex.uScale = uvScale;tex.vScale = uvScale;})return groundMaterial
}/*** 创建盒子网格材质* @param scene 场景对象* @returns 材质对象*/
const createBoxMaterial = (scene:Scene):StandardMaterial=>{const boxMat = new StandardMaterial('boxMat',scene)const aoTex = new Texture('./textures/aerial_beach_02_ao_4k.jpg',scene)boxMat.ambientTexture = aoTex;const normalTex = new Texture('./textures/aerial_beach_02_nor_gl_4k.jpg',scene)boxMat.bumpTexture = normalTex;const diffuseTex = new Texture('./textures/aerial_beach_02_diff_4k.jpg',scene)boxMat.diffuseTexture = diffuseTexreturn boxMat
}
2、应用材质球
  // 创建boxbox = MeshBuilder.CreateBox('box',{size:2},scene)// 赋予材质box.material = createBoxMaterial(scene)box.position.y= 1;// 相机目标camera.setTarget(box)const ground = MeshBuilder.CreateGround('ground',{width:10,height:10},scene)// 赋予材质ground.material =  createGroundMaterial(scene)
3、演示


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

相关文章

Linux中的命令lsof

一、介绍 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。 传输控制协议 (TCP) 和用户数据报协议 (U…

重入漏洞EtherStore

重入漏洞 // SPDX-License-Identifier: MIT pragma solidity ^0.8.13;contract EtherStore {mapping(address > uint) public balances;function deposit() public payable {balances[msg.sender] msg.value;}function withdraw() public {uint bal balances[msg.sender]…

微信小程序不能使用本地图片当背景图片的解决方法

解决方法1:使用image组件,这个src就可以引用本地图片 解决方法2:使用网络路径 解决方法3:base64转码

python小脚本用于接受你输入的第一个参数并打印该值

#!/usr/bin/env python # -*- coding:utf-8 -*- import sysdef main():var1 sys.argv[1];result "u input: %s" % var1print resultif __name__ __main__:main()

关于利用webase-front节点控制台一键导出的java项目解析

搭建区块链系统和管理平台分别用的的fisco、webase。 关于我们在利用java开发DApp(去中心化引用),与区块链系统交互,可以用: 1.webase前置服务给开发者提供的api:我们在搭建好fisco链之后,在搭一个webase-front服务,我…

C#实现对数据库字节数组判断

/// <summary>/// 判断字节数组是否为空&#xff0c;空返回false 不为空true/// </summary>/// <param name"object1"></param>/// <returns>判断字节数组object1是否为空&#xff0c;空返回false 不为空true</returns>public s…

吃瓜教程2|线性模型

线性回归 “广义的线性模型”&#xff08;generalized linear model&#xff09;&#xff0c;其中&#xff0c;g&#xff08;*&#xff09;称为联系函数&#xff08;link function&#xff09;。 线性几率回归&#xff08;逻辑回归&#xff09; 线性判别分析 想让同类样本点的…

设计模式(13)适配器模式

一、介绍&#xff1a; 1、定义&#xff1a;是一种结构型设计模式&#xff0c;它可以将一个类的接口转换成客户端所期望的另一种接口。适配器模式常用于系统的不兼容性问题。 2、组成&#xff1a; &#xff08;1&#xff09;目标接口&#xff08;Target&#xff09;&#xff…