three.js问题记录---MeshLambertMaterial材质颜色失效

news2024/10/6 18:36:13

初学three.js,跟着教程走都比较顺利,自己尝试写个demo的时候发现创建一个物体,在给材质颜色的时候出现了一个问题。
在这里插入图片描述
在three.js官网文档(https://www.techbrood.com/threejs/docs/)中,我们可以看到材料(材质)在不同的场景下被赋予很多种分类,而这里我将LineBasicMaterialMeshLambertMaterial拿来做示例。

在这里,我们首先对两种材质进行概念上的区分:

MeshBasicMaterial:基础材质,给几何体赋予一种简单的颜色,只与初始化定义的颜色有关,不受光照的影响。

MeshLambertMaterial:Lambert材质,一种表面粗糙,比较暗淡的材质。它是一种高级材质,可以对光源产生反应创建不光亮的表面。

// 创建相机
const scene2 = new THREE.Scene();
// 创建物体及材质
const geom2 = new THREE.SphereGeometry(60, 40, 40);
const mater2 = new THREE.MeshLambertMaterial({ color: 0xce21bc });
// const mater2 = new THREE.MeshLambertMaterial({ color: 0xce21bc });

// 创建一个网格模型对象
const mesh4 = new THREE.Mesh(geom2, mater2)
mesh4.position.set(100, 0, 0);//设置mesh3模型对象的xyz坐标为120,0,0
scene2.add(mesh4);
// 创建一个相机
const width2 = 600; const height2 = 400
const camera2 = new THREE.PerspectiveCamera(45, width2 / height2, 0.1, 1000)
//设置相机位置
camera2.position.set(300, 300, 300);
//设置相机方向
camera2.lookAt(0, 0, 0);
//创建辅助坐标轴
const axesHelper2 = new THREE.AxesHelper(200);//参数200标示坐标系大小,可以根据场景大小去设置
scene2.add(axesHelper2);
// 创建一个渲染器
const renderer2 = new THREE.WebGLRenderer()
// renderer2.setClearColor('white'); //canvas画布颜色
renderer2.setSize(width2, height2)
renderer2.render(scene2, camera2)
const controls2 = new OrbitControls(camera2, renderer2.domElement)//创建控件对象
controls2.addEventListener('change', () => {
    renderer2.render(scene2, camera2)//监听鼠标,键盘事件
})
onMounted(() => {
    document.getElementById('my-three2')?.appendChild(renderer2.domElement)
})

在这里插入图片描述在此基础上,我们得到了一个基础网孔材料(MeshBasicMaterial)下的物体,可以正常显示。此时我们将MeshBasicMaterial换成兰伯特网孔材料(MeshLambertMaterial)

// 创建物体及材质
const geom2 = new THREE.SphereGeometry(60, 40, 40);
// const mater2 = new THREE.MeshLambertMaterial({ color: 0xce21bc });
const mater2 = new THREE.MeshLambertMaterial({ color: 0xce21bc });

在这里我们仅展示部分代码,其余代码与上方贴出的一模一样。
可以看大
可以看到在同样黑色背景的画布下,有一个黑色的物体存在,因背景颜色相同而被覆盖,我们将背景颜色换成其他颜色

renderer2.setClearColor('pink'); //canvas画布颜色

在这里插入图片描述证实确实物体是存在的,只是材质颜色没起作用。
查看官网文档和网上的各种小贴士才找出问题所在,我们可以看到l对MeshLambertMateria的概念中写道:它是一种高级材质,可以对光源产生反应创建不光亮的表面。所以对其添加光源是必不可少的一步。

// 创建物体及材质
const geom2 = new THREE.SphereGeometry(60, 40, 40);
const mater2 = new THREE.MeshLambertMaterial({ color: 0xce21bc });
//添加光源 
//会照亮场景里的全部物体(氛围灯),前提是物体是可以接受灯光的,这种灯是无方向的,即不会有阴影。
const ambient2 = new THREE.AmbientLight(0xffffff, 0.4);
const light2 = new THREE.PointLight(0xffffff, 1);//点光源,color:灯光颜色,intensity:光照强度
scene2.add(ambient2);
light2.position.set(200, 300, 400);
scene2.add(light2);

在这里插入图片描述此刻我们可以看到物体的颜色发生了变化,并且和上方基础网孔材料相比是更加立体和形象的。光源(AmbientLight)在官网文档中也有相关API,可以自行了解。
因此问题特做记录,希望对小伙伴们有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文解读-Early Detection of Cybersecurity Threats Using Collaborative Cognition

1 概述与介绍 作者描述了一种新颖的协作框架,该框架通过利用语义丰富的知识表示和与不同机器学习技术集成的推理功能来协助安全分析人员。文中介绍的认知网络安全系统从各种文本源中提取信息,并使用一种扩展的UCO安全本体的将其存储在知识图谱中。该系统…

[附源码]Python计算机毕业设计SSM家庭安防系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

一个ubuntu系统搭建redis集群

下载redis(如果要搭建redis集群不建议使用命令下载,因为后面启动集群时redis5.0一下的会有问题,依赖ruby) 更新apt sudo apt update使用apt下载 sudo apt install redis-server打开redis配置文件 sudo vim /etc/redis/redis.conf设置远程连接&#x…

2023年tiktok自动化运营软件新排名看这里!

【导读】2022年即将结束啦,你的tiktok运营效果怎么样呢?这里我们小编告诉您,用tiktok自动化运营软件可以取得事半功倍的效果哦!这里就带大家看看2023年tiktok自动化运营软件排名哦! 2023年tiktok自动化运营软件新排名看…

FPGA学习笔记(九)SPI学习总结及stm32的HAL库下SPI配置

系列文章目录 一、FPGA学习笔记(一)入门背景、软件及时钟约束 二、FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三、FPGA学习笔记(三) 流水灯入门FPGA设计流程 四、FPGA学习笔记(四&…

上海亚商投顾:沪指继续震荡向上 零售等消费股表现活跃

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪三大指数今日低开高走,深成指盘中涨超1%,创业板指一度涨逾1.5%,随后均上演冲高回…

【C++进阶】引用 函数提高

文章目录一 、引用1.1 引用的基本使用1.2 引用的注意事项1.3 引用做函数参数1.4 引用的本质 :指针的常量1.5 常量引用二、函数提高1 函数默认参数2 函数占位参数3 函数重载一 、引用 1.1 引用的基本使用 作用:给变量起别名 语法:数据类型 &a…

Python计算目标检测中的IoU

Python计算目标检测中的IoU前言前提条件相关介绍实验环境IoU概念代码实现前言 本文是个人使用PythonPython处理文件的电子笔记,由于水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入我的个人主页查看 前提条件 熟悉P…

​寒武纪思元370系列与飞桨完成II级兼容性测试,联合赋能AI落地实践

2022年12月2日,寒武纪思元370系列与飞桨已完成II级兼容性测试,兼容性表现良好。 本次II级兼容性测试基于寒武纪MLU370系列,测试了包含PP-YOLO、YOLOv3、ResNet50、DeepLabv3、BERT、OCR-DB等共计15个模型的验证,覆盖了计算机视觉…

01-go基础-07-map(声明map、初始化map、map赋值、遍历map、判断key是否在map中、删除map成员)

文章目录1. 声明 map2. 初始化 map3. map赋值3.1 直接声明并赋值3.2 分别定义每一组键值对4. 遍历map5. 判断key是否在map中6. 删除成员(delete())1. 声明 map 语法 var MapName map[keyType]valueType语法示例 var warlords map[string]string仅声明…

Eureka 服务端搭建入门与集群搭建

前言 Eureka在2022年已经确定的是,2.x版本开源计划已经停止了,1.x版本陆陆续续还是有人在维护的。还有很多最早使用微服务的公司还在继续用着eureka作为注册中心,也是很多同学学习微服务的敲门砖。 搭建Eureka服务端 创建一个平平无奇的ma…

2203 CSDN课程-python入门课

Python入门课,较为基础。 1 简介 1.1 前言 事实上,Python已经走过很多年的发展历程了,笔者最一开始学习的时候还是2.x版本,现在早就3.xx版本了。在当提笔,不是青春年少。确实是这样,我记得是2018年开始接…

【Linux从入门到放弃】Linux权限详解

🧑‍💻作者: 情话0.0 📝专栏:《Linux从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! L…

m基于遗传优化的复杂工序调度matlab仿真,输出甘特图和优化收敛图

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 遗传算法 (Genetic Algorithm,GA) 是一种基于规律进化的随机优化搜索算法,该算法最早是由Holland在1975年提出的。遗传算法的主要优势是通过对目标对象进行优化操作&#…

力扣-234-回文链表

回文链表 CategoryDifficultyLikesDislikesalgorithmsEasy (52.70%)1576- TagsCompanies给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入&#xff…

FTP文件传输服务

FTP 服务概述2-1 FTP连接及连接模式 控制连接:TCP 21,用于发送FTP命令信息 数据连接:TCP 20,用于上传、下载数据 数据连接的建立类型 主动模式:服务端从 20 端口主动向客户端发起连接 被动模式:服务端在指…

SIM8262E-M2,SIM8262A-M2,SIM8260C-M2,SIM8260C 5G定位模组支持多频段

SIM8262:支持R16标准的5G模组,支持多频段5G NR / LTE-FDD / LTE TDD / HSPA,支持SA和NSA双组网模式,高达 2.4Gbps的数据传输;扩展能力强,接口丰富,包括PCIe、USB3.1、GPIO等。该模块为客户的应用…

Polygon zkEVM中的子约束系统

1. 引言 前序博客有: Polygon zkEVM工具——PIL和CIRCOM Polygon zkEVM中主要设计了3种子约束系统: 1)Permutation check子约束系统:PIL中的关键字为is。 2)Plookup 子约束系统:PIL中的关键字为in。 …

数据结构——栈,队列,及其结构特点应用。

​✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;数据结构——栈&#xff0c;队列。 &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f3e1;<5>系统环境…

路由查找原理

最近在设计Netflow采集系统时&#xff0c;我想要将客户端的公网IP根据IP库转为对应的国家&#xff0c;此外在CACHE机房中&#xff0c;交换机上是没有AS信息的&#xff0c;因此我们也需要根据IP去查路由库&#xff0c;转换出AS信息。 这两个问题的本质是类似的&#xff0c;无论是…