threejs-UV

news2024/10/23 5:39:39
一、简介
1.介绍

1.什么是UV映射?
UV映射是一种将二维纹理映射到三维模型表面的技术。在这个过程中,3D模型上的每个顶点都会被赋予一个二维坐标(U, V)。U和V分别表示纹理坐标的水平和垂直方向。这些坐标用于将纹理图像上的像素与模型表面上的点进行对应。通过UV映射,我们可以在模型上精确地控制纹理的位置和方向。

2.UV坐标与顶点位置的关系和区别
顶点位置(Position)表示3D模型中每个顶点的空间坐标(x, y, z)。UV坐标则表示该顶点在纹理上的二维坐标(U, V)。顶点位置用于确定模型在场景中的形状,而UV坐标用于确定纹理在模型上的分布。
两者之间的主要区别在于:
● 顶点位置是三维坐标,描述了一个顶点在三维空间中的位置。
● UV坐标是二维坐标,描述了一个顶点在纹理图像上的位置。

2.属性
// 创建uv贴图
let uvTexture = new three.TextureLoader().load('./textureImage/UV.png')
// 创建平面材质
const planeMaterial = new three.MeshBasicMaterial({map: uvTexture})


//定点创建的几何体需要进行uv设置
// 设置uv坐标
const uvs = new Float32Array([
  0, 0, 1, 0, 1, 1, 0, 1
])
geomentry.setAttribute('uv', new three.BufferAttribute(uvs, 2))
二、设置
1.效果

2.代码
// 导入threejs文件
import * as three from 'three'
// 导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'
// 创建场景
const scene = new three.Scene()
// 创建相机
const camera = new three.PerspectiveCamera(
  45, //视角 值越多视野越大
  window.innerWidth / window.innerHeight, //宽高比
  0.1, //近平面(相机最近能看到的物体)
  1000 //远平面(相机最远能看到的物体)
)
// 创建渲染器
const renderer = new three.WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
// 添加背景颜色
scene.background = new three.Color(0x999999)

// 创建平面几何
const planeGeometry = new three.PlaneGeometry(2,2)

// 创建uv贴图
let uvTexture = new three.TextureLoader().load('./textureImage/UV.png')
// 创建平面材质
const planeMaterial = new three.MeshBasicMaterial({
  map: uvTexture
})

// 创建平面网格
const planeMesh = new three.Mesh(planeGeometry, planeMaterial)
planeMesh.position.x = -2
// 加入场景
scene.add(planeMesh)


// 创建几何体
const geomentry = new three.BufferGeometry()

// 使用索引绘制
const vertices = new Float32Array([-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0])
// 创建顶点属性
geomentry.setAttribute('position', new three.BufferAttribute(vertices, 3))
// 创建索引
const indices = new Uint16Array([0, 1, 2, 2, 3, 0])
// 创建索引属性
geomentry.setIndex(new three.BufferAttribute(indices, 1))
// 设置uv坐标
const uvs = new Float32Array([
  0, 0, 1, 0, 1, 1, 0, 1
])
geomentry.setAttribute('uv', new three.BufferAttribute(uvs, 2))

// 创建材质
const material = new three.MeshBasicMaterial({
  // color: 0xff0000,
  // side: three.DoubleSide //正反面都能看到
  // wireframe: true //线框模式
    map: uvTexture
})
// 创建网格
const cube = new three.Mesh(geomentry, material)
cube.position.x = 2
// 加入场景
scene.add(cube)
// 相机位置
camera.position.z = 5 //设置在z轴位置
// 看向位置
camera.lookAt(0, 0, 0) //看向原点
// 创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement)
controls.enableDamping = true // 启用阻尼系数:值越大,阻尼越明显
controls.dampingFactor = 0.5 //设置阻尼值
controls.enableZoom = true // 启用缩放:值为false时禁止缩放
// controls.autoRotate = true // 启用自动旋转:值为true时禁止手动旋转
controls.autoRotateSpeed = 0.5 // 自动旋转速度
// 渲染函数
const animate = () => {
  controls.update()
  requestAnimationFrame(animate) //每一帧调用函数
  renderer.render(scene, camera) // 重新渲染
}
animate()

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

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

相关文章

SQL优化,我就用了这几招

先赞后看,Java进阶一大半 阿里巴巴社区博客最近发表了一篇探究MySQL索引策略的博客,下图是一条查询SQL的执行过程。 我是南哥,相信对你通关面试、拿下Offer有所帮助。 敲黑板:本文总结了MySQL语句优化、索引优化常见的面试题&…

景区卫生间智能刷脸取纸机,灵活设置取纸长度、取纸间隔时间

在旅游景区,卫生间的服务质量直接影响着游客的体验。景区卫生间智能刷脸取纸机的出现,为解决游客用纸需求、提高资源利用效率以及提升景区管理水平带来了创新性的解决方案。 一、智能刷脸取纸机功能 1. 精准取纸:能够根据游客的实际需求&…

“链动2+1+消费增值:用户留存新策略“

大家好,我是吴军,目前在一家以创新为核心的软件开发公司担任产品经理。今天,我将深入探讨一个经受住了时间考验且依然充满活力的商业模式——“链动21”模式,并通过一个实例及相关数据展示它如何巧妙应对用户留存与复购的挑战。 首…

每日OJ题_牛客_HJ63DNA序列_滑动窗口_C++_Java

目录 牛客_HJ63DNA序列_滑动窗口 题目解析 C代码 Java代码 牛客_HJ63DNA序列_滑动窗口 孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网 描述: 一个 DNA 序列由 A/C/G/T 四个字母的排列组合组成。 G 和 C 的比例(定义为 GC-Ratio )是…

[SQL] 数据库图形化安装和使用

一 安装 1.1 图形化安装 下载DataGrip安装包 点击此处一直下一步即可。点击免费使用。 进去界面后,选择新建一个项目 点击加号,创建一个Mysql连接。输入Mysql的连接信息。点击DownLoad下载Mysql的驱动 接下来点击创建的mysq项目中后面的三个点,选择…

Facebook的全球影响力:跨文化交流与信息共享的前沿

引言 在数字化时代,社交媒体已成为全球沟通的重要平台。自2004年成立以来,Facebook迅速发展成为拥有超过20亿活跃用户的巨头。其强大的影响力使其成为跨文化交流与信息共享的前沿平台。 跨文化交流的促进 Facebook的多语言支持让来自不同文化背景的用户…

如何在mkdocs-material文档主题下设置多版本文档系统?

引言 前一段时间,参与了PaddleOCR开源项目的文档站点搭建工作,基于mkdocs工具,采用mkdocs-material主题,基于Github Pages来搭建整个文档站点。目前该站点已经搭建完毕, 支持多语言、文档搜索等诸多功能。 最近得知&…

【C++ 算法进阶】算法提升二

算法提升二 最大分配工资问题 (贪心)题目分析代码详解 数组有序问题 (贪心)题目分析代码详解 消息流问题 (数据结构设计)题目分析代码详解 可乐问题 (Coding能力)题目分析代码详解 司…

YOLOv9下载安装运行

1、进入GitHub的YOLOv9官网 https://github.com/WongKinYiu/yolov92、clone或下载项目 https://github.com/WongKinYiu/yolov9.githttps://codeload.github.com/WongKinYiu/yolov9/zip/refs/heads/main2.1、进入控制台下载项目 git clone https://github.com/WongKinYiu/yol…

在线培训知识库+帮助中心:教育行业智慧学习的创新桥梁

在数字化转型的浪潮中,教育行业正经历着前所未有的变革。为了应对日益增长的学习需求,提升教育质量,构建一个集在线培训知识库与帮助中心于一体的智慧学习环境,已成为教育行业转型升级的重要方向。这一创新模式不仅优化了学习资源…

无人机飞手执照培训费用较高原因分析

无人机飞手执照培训费用较高的原因可以归结为多个方面,以下是对这些原因的具体分析: 一、课程内容的全面性和专业性 无人机飞手执照培训涵盖了从无人机基础知识到高级飞行技巧、从组装调试到故障维修的多个方面。这种全面性和专业性要求培训机构提供高…

猎板PCB测试大讲堂:让你测试的明明白白

在电子研发领域,PCB(印刷电路板)的检测是确保产品质量的关键环节。主要的检测方式包括飞针测试和测试架测试。以下是这两种技术的详细介绍,旨在为电子研发工程师提供技术资料。 PCB飞针测试(Flying Probe Test&#x…

麦克风哪个品牌音质最好,无线领夹麦克风十大品牌推荐

随着科技的进步,无线领夹麦克风的技术也在不断革新。从传统的模拟信号传输到如今的数字信号传输,再到智能降噪、自适应增益控制等先进技术的应用,无线领夹麦克风的录音品质得到了显著提升。然而,市场上仍有一些产品采用过时的技术…

vue2使用pdfjs-dist实现pdf预览(iframe形式,不修改pdfjs原来的ui和控件)

前情提要 在一开始要使用pdf预览的时候,第一次选的是vue-pdf,但是vue-pdf支持的功能太少,缺少了项目中需要的一项-复制粘贴功能 之后我一顿搜搜搜,最终貌似只有pdfjs能用 但是网上支持text-layer的貌似都是用的2.09那个版本。 使…

嵌入式AI博客目录

文章目录 环境搭建ubuntu下载安装c版opencv4.7.0和4.5.0 & 安装opencv4.5.0报错及解决方法ubuntu系统vscode配置c版opencv & 编译运行c播放视频代码(包含:vscode使用copencv,创建CmakeList.txt,创建编译项目)u…

【干货】2024期中考试成绩公布方式

本学期的期中考试即将拉开帷幕,而考试后的成绩发布往往是老师觉得最复杂耗时的工作。老师完全可以抛弃这种费力耗时的“笨方法”,只需要易查分,即可一分钟完成成绩发布的工作。教师发布省心,家长查询安心。 易查分是一个在线的查询…

智能健康推荐:SpringBoot技术应用

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户管理 基于智能推荐的卫生健康系统的系统管理员可以管理用户管理,可以对用户管理信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户管理信息管理界面 5.1.2 科室类型管理 系统管理员可以查看对…

让你的MacOS剪切板变得更加强大,如何解决复制内容覆盖的问题

MacOS的日常使用过程中,肯定少不了复制粘贴,不论是文本内容还是文件,复制粘贴是避不开的操作,如果需要复制粘贴的内容不多,那么普通的复制粘贴就可以完成了,但是当有同样的内容需要输入不同的地方的时候&am…

SAM应用:医学图像和视频中的任何内容分割中的基准测试与部署

医学图像和视频中的任何内容分割:基准测试与部署 目录 摘要:一、引言1.1 SAM2 在医学图像和视频中的应用 二.结果2.1 数据集和评估协议2.2 二维图像分割的评估结果 三 讨论四 局限性和未来的工作五、方法5.1数据来源和预处理5.2 微调协议5.3 评估指标 总…

flask项目创建、flask使用、python使用flask、pycharm创建flask项目

创建项目前python和pycharm要装好 打开pycharm创建项目: 虚拟空间下载flask: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Flask 下载好后:下载扩展 pip install Flask-SQLAlchemy -i https://mirrors.aliyun.com/pypi/simple/ 目录结构&…