Threejs学习05——球缓冲几何体背景贴图和环境贴图

这篇具有很好参考价值的文章主要介绍了Threejs学习05——球缓冲几何体背景贴图和环境贴图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现随机多个三角形随机位置随机颜色展示效果

这是一个非常简单基础的threejs的学习应用!本节主要学习的是球面缓冲几何体的贴图部分,这里有环境贴图以及背景贴图,这样可以有一种身临其境的效果!这里环境贴图用的是一个.hdr的文件,可以在网上随便下载一些使用,我在这里的例子里面使用的hdr文件已经免费上传到资源中,可以在文章上方直接下载!

实现效果

Threejs学习05——球缓冲几何体背景贴图和环境贴图,Threejs,前端知识,学习,贴图,数码相机

准备工作

使用vue创建项目,然后实现以上功能需要安装一些插件:threejs

yarn add three

在index.html中引入main.js

<script src="./main/main.js" type="module"></script>

然后我们编写的Threejs代码都在main.js中编写!

设计效果

引入OrbitControls鼠标控制插件

import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';

创建一个场景

//创建一个场景
const scene = new THREE.Scene();

创建一个透视相机

/**
 * 创建一个相机(透视相机)
 * fov — 摄像机视锥体垂直视野角度
    aspect — 摄像机视锥体长宽比
    near — 摄像机视锥体近端面
    far — 摄像机视锥体远端面
 */
const camera = new THREE.PerspectiveCamera(90,window.innerWidth/window.innerHeight,1,1000);

设置相机对象位置以及将相机加入场景中

//设置相机对象 x y z
camera.position.set(0,0,10); 
//相机加入场景中
scene.add(camera);

接下来我们循环创建球缓冲几何体对象,并设置球缓冲几何体的材质,这里我们主要设置材质的金属材质metalness以及光滑程度roughness,然后根据球缓冲几何体以及材质创建一个网格物体,最后将物体添加到场景中。

//球缓冲几何体
const sphereGeometry = new THREE.SphereGeometry(1,30,30);
const material = new THREE.MeshStandardMaterial({
    metalness:0.9,  // 金属材质 1 黑
    roughness:0.1   //光滑
});
//新建物体
const sphere = new THREE.Mesh(sphereGeometry,material);
//将绑定的物体添加到场景中
scene.add(sphere);

设置three渲染器并初始化渲染器大小并把渲染器添加到场景中!

//初始化渲染器
const render = new THREE.WebGLRenderer();
//设置渲染尺寸大小
render.setSize(window.innerWidth,window.innerHeight);

//将webgl渲染的canvas内容添加到body
document.body.appendChild(render.domElement)

最后我们添加坐标轴辅助器,并加入场景中!以及我们的控制器可以使得鼠标能够转动场景内容!

//创建坐标轴辅助器
const axes = new THREE.AxesHelper(5);
scene.add(axes);

//添加控制器
const control = new OrbitControls(camera,render.domElement)
control.update();

//设置时钟
render.render(scene,camera);
function animate(){
    requestAnimationFrame(animate)
    //使用渲染器  通过相机将场景渲染
    render.render(scene,camera);
}
animate()

以上就在页面可以看到一个黑色的球了!

下面我们添加环境纹理贴图这里使用到Three里面的rgb加载器RGBELoader
首先我们在最上方引入RGBELoader

import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader'

然后我们再main.js中创建加载器对象

const rgbeLoader = new RGBELoader();

接下来就是加载hdr文件并设置贴图模式和场景的背景贴图为加载器参数的纹理,以及场景的环境贴图为加载器参数的纹理,这里接可以在页面看到效果了!!

注意:这里的hdr路径是放在dist下面的image,也就是说代码运行的是dist下面的路径,自己需要放在其他路径的可以自己改一下

rgbeLoader.loadAsync("/image/001.hdr").then((texture)=>{
    //贴图模式 经纬线映射贴图
    texture.mapping = THREE.EquirectangularReflectionMapping;
    //背景贴图
    scene.background = texture;
    //环境贴图
    scene.environment = texture;
});

在上一章介绍中主要就是加了一个环境RGB加载器!!也就是多加了几行代码!

效果:

Threejs学习05——球缓冲几何体背景贴图和环境贴图,Threejs,前端知识,学习,贴图,数码相机

小demo完成!!有点小意思!!

完整代码如下:

import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
//加载
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader'

//了解thres最基本用法
const camera = new THREE.PerspectiveCamera(90,window.innerWidth/window.innerHeight,1,1000);

//1.创建一个场景
const  scene = new THREE.Scene();

//设置相机对象 x y z
camera.position.set(0,0,10); 
//相机加入场景中
scene.add(camera);
//球缓冲几何体
const sphereGeometry = new THREE.SphereGeometry(1,30,30);
const material = new THREE.MeshStandardMaterial({
    metalness:0.9,  // 金属材质 1 黑
    roughness:0.1   //光滑
});
//新建物体
const sphere = new THREE.Mesh(sphereGeometry,material);
//将绑定的物体添加到场景中
scene.add(sphere);

//初始化渲染器
const render = new THREE.WebGLRenderer();
//设置渲染尺寸大小
render.setSize(window.innerWidth,window.innerHeight);

//将webgl渲染的canvas内容添加到body
document.body.appendChild(render.domElement)

//创建坐标轴辅助器
const axes = new THREE.AxesHelper(5);
scene.add(axes);

//添加控制器
const control = new OrbitControls(camera,render.domElement)
control.update();

//设置时钟
render.render(scene,camera);
function animate(){
    requestAnimationFrame(animate)
    //使用渲染器  通过相机将场景渲染
    render.render(scene,camera);
}
animate()

//加载环境图
const rgbeLoader = new RGBELoader();

rgbeLoader.loadAsync("/image/001.hdr").then((texture)=>{
    //贴图模式 经纬线映射贴图
    texture.mapping = THREE.EquirectangularReflectionMapping;
    //背景贴图
    scene.background = texture;
    //环境贴图
    scene.environment = texture;
});

目前还在学习threejs,有写错误的地方请指出!!现在只是一个菜鸟,不喜勿喷!!文章来源地址https://www.toymoban.com/news/detail-665482.html

到了这里,关于Threejs学习05——球缓冲几何体背景贴图和环境贴图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • three.js(九):内置的路径合成几何体

    TubeGeometry(path : Curve, tubularSegments : Integer, radius : Float, radialSegments : Integer, closed : Boolean) path — Curve - 一个由基类Curve继承而来的3D路径。 Default is a quadratic bezier curve. tubularSegments — Integer - 组成这一管道的分段数,默认值为64。 radius — Float - 管道的半径,默认值为1。 radialSegm

    2024年02月09日
    浏览(27)
  • Three.js之几何体、高光材质、渲染器设置、gui

    阵列立方体和相机适配体验 Threejs常见几何体简介 … gui.js库(可视化改变三维场景) 注:基于Three.js v0.155.0 长方体:BoxGeometry 球体:SphereGeometry 圆柱:CylinderGeometry 矩形平面:PlaneGeometry 圆形平面:CircleGeometry 高光网格材质:MeshPhongMaterial(shininess、specular) WebGL渲染器设置:

    2024年02月11日
    浏览(33)
  • d3d12龙书阅读----绘制几何体(上)

    本节主要介绍了构建一个简单的彩色立方体所需流程与重要的api 下面主要结合立方体代码分析本节相关知识 输入装配器阶段的输入 首先,我们需要定义立方体的八个顶点 顶点结构体: 当然,对于更复杂的情况,我们不仅要定义顶点的位置与颜色,还要包括法线向量、纹理

    2024年03月27日
    浏览(44)
  • Three.js——scene场景、几何体位置旋转缩放、正射投影相机、透视投影相机

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年04月14日
    浏览(29)
  • threejs贴图系列(一)canvas贴图

    threejs不仅支持各种texture的导入生成贴图,还可以利用canvas绘制图片作为贴图。这就用到了CanvasTexture,它接受一个canas对象。只要我们绘制好canvas,就可以作为贴图了。这里我们利用一张图片来实现这个效果。 基础代码: 最后的展示效果如下:  这里特别要注意贴图异步问题

    2024年02月11日
    浏览(19)
  • threejs 透明贴图,模型透明,白边

    使用Threejs加载模型时,模型出现了上面的问题。模型边缘部分白边,或者模型出现透明问题。 出现这种问题是模型制作时使用了透明贴图。threejs无法直接处理透明贴图。 方法一 场景一 模型有多个贴图时(一个透贴和其他贴图) 场景二 一个透明贴图 场景三 有时模型有透明

    2024年02月07日
    浏览(28)
  • threeJs实现3D地球-旋转-自定义贴图-透明发光

    //---html (angular)---         //---ts--- 效果图:

    2024年04月17日
    浏览(24)
  • GIS融合之路(二)CesiumJS和ThreeJS深度缓冲区整合

    在这篇文章开始前再次重申一下,山海鲸并没有使用ThreeJS引擎。但由于ThreeJS引擎使用广泛,下文中直接用ThreeJS同CesiumJS的整合方案代替山海鲸中3D引擎和CesiumJS整合。 系列传送门: 山海鲸可视化:GIS融合之路(一)技术选型CesiumJS/loaders.gl/iTowns 文章开始之前大家可以看下这

    2024年02月09日
    浏览(28)
  • UnityShader——05几何阶段和光栅化阶段

    几何阶段和光栅化阶段,开发者无法拥有绝对的控制权,其实现的载体是GPU,GPU通过实现流水线化,大大加快了渲染进度。虽然无法完全控制着两个阶段的实现细节,但GPU向开发者开放了很多控制权 顶点数据 为输入,顶点数据是由应用阶段加载到显存中,再由 Draw Call 指定的

    2024年02月20日
    浏览(19)
  • 3D-echarts的背景和地图表面的贴图

    1.设置背景图片 效果如下: 核心代码(全部代码见文末):   注意:图片的路径设置 绝对路径 或 asset下面的相对路径都没有效果,要把图片放到public路径下面才有效果(此demo是写在v2脚手架中)  2.设置背景颜色渐变 效果如下: 核心代码(全部代码见文末): 3.设置地图

    2024年02月12日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包