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

咋自己做网站网络营销推广的概念

咋自己做网站,网络营销推广的概念,怎么做分销平台,wordpress 数卡three.js react 实现鼠标移入模型高亮选中效果 使用EffectComposer和其附加的渲染效果Passes(如RenderPass和OutlinePass)来实现高级渲染效果。首先创建EffectComposer实例,并添加RenderPass和OutlinePass,最后在渲染循环中调用…

three.js + react 实现鼠标移入模型高亮选中效果

使用EffectComposer和其附加的渲染效果Passes(如RenderPassOutlinePass)来实现高级渲染效果。首先创建EffectComposer实例,并添加RenderPassOutlinePass,最后在渲染循环中调用EffectComposer的渲染方法。这样可以在保持场景内容不变的情况下,应用光晕效果,增强场景的视觉效果。
在这里插入图片描述

EffectComposer效果合成器

EffectComposer( renderer : WebGLRenderer, renderTarget : WebGLRenderTarget )

  • renderer:用于渲染场景的渲染器。
  • renderTarget:(可选)一个预先配置的渲染目标,内部由 EffectComposer 使用。

属性

  • passes,一个用于表示后期处理过程链(包含顺序)的数组。
  • readBuffer,内部读缓冲区的引用。过程一般从该缓冲区读取先前的渲染结果。
  • renderer,内部渲染器的引用。
  • renderToScreen,最终过程是否被渲染到屏幕(默认帧缓冲区)。

常用方法

  • addPass:将传入的过程添加到过程链。
  • insertPass:将传入的过程插入到过程链中所给定的索引处。
  • render:执行所有启用的后期处理过程,来产生最终的帧。
  • reset:重置所有EffectComposer的内部状态。
  • setPixelRatio:设置设备的像素比。
  • setSize:考虑设备像素比,重新设置内部渲染缓冲和过程的大小为(width, height)。

资源文件说明

  • EffectComposer:所有后期处理效果的容器。
  • RenderPass:用于渲染基础场景到一张纹理上,但不会添加至屏幕上。
  • OutlinePass:添加闪烁效果。
  • FXAA/SMAA Pass:可选地加入抗锯齿Pass,如FXAAShader或SMAAPass,提高边缘平滑度。
  • UnrealBloomPass:如果需要,还可以添加UnrealBloomPass以增强光照和视觉效果。

引入资源文件

import * as three from 'three';
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass';
import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass';
import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';
import { GammaCorrectionShader } from 'three/examples/jsm/shaders/GammaCorrectionShader';

创建THREE.EffectComposer

创建一个 THREE.EffectComposer 对象,传入的参数是WebGLRenderer:

// 创建一个webGL对象
let renderer = new THREE.WebGLRenderer({//增加下面两个属性,可以抗锯齿antialias: true,alpha: true,logarithmicDepthBuffer: true // 解决模型闪烁问题
});
// 创建一个EffectComposer对象
let composer = new EffectComposer(renderer); 

创建renderPass渲染通道

染器通道RenderPass的作用是指定后处理对应的相机camera和场景scene。

// 创建一个渲染器通道,场景和相机作为参数 
const renderPass = new RenderPass(scene, camera);
// 给EffectComposer添加一个渲染器通道 
composer.addPass(renderPass);

创建OutlinePass高亮通道

给three.js场景中模型添加闪烁效果,如果有多个模型的话,可以通过OutlinePass的选择对象属性.selectedObjects设置。

// 模型边缘发光通道
const v2 = new THREE.Vector2(width, height);
// OutlinePass第一个参数的尺寸和canvas画布保持一致
const outlinePass = new OutlinePass(v2, scene, camera);outlinePass.visibleEdgeColor.set('#00FF00'); // 呼吸显示颜色 outlinePass.hiddenEdgeColor.set('#00FF00');// 呼吸消失颜色 
outlinePass.edgeStrength = 5; // 边框的亮度强度 
outlinePass.edgeGlow = 0.5; // 光晕[0,1] 
outlinePass.edgeThickness = 3;// 边缘宽度 
outlinePass.pulsePeriod = 2; // 呼吸闪烁速度 
outlinePass.renderToScreen = true; // 设置这个参数的目的是马上将当前的内容输出// 将OutlinePass通道添加到后处理composer中
composer.addPass(outlinePass);

循环渲染

function renderFn() {composer.render(T);requestAnimationFrame(renderFn);
}

高亮方法封装

/*** 模型移入高亮* @param { 区域宽度 } width* @param { 区域高度 } height* @param { 场景对象 } scene* @param { 摄像机对象} camera* @param { 渲染回调} renderer*/
function setModelComposer(width, height, scene, camera, renderer) {// 创建一个EffectComposer(效果组合器)对象,在该对象上添加后期处理通道,用于模型高亮const composer = new EffectComposer(renderer);// 新建一个场景通道,const renderPass = new RenderPass(scene, camera);// 给EffectComposer添加一个渲染器通道 composer.addPass(renderPass);// 模型边缘发光通道const v2 = new THREE.Vector2(width, height);// OutlinePass第一个参数的尺寸和canvas画布保持一致const outlinePass = new OutlinePass(v2, scene, camera);outlinePass.visibleEdgeColor.set('#00FF00'); // 呼吸显示颜色outlinePass.hiddenEdgeColor.set('#00FF00');// 呼吸消失颜色outlinePass.edgeStrength = 5; // 边框的亮度强度outlinePass.edgeGlow = 0.5; // 光晕[0,1]outlinePass.edgeThickness = 3;// 边缘宽度outlinePass.pulsePeriod = 2; // 呼吸闪烁速度outlinePass.renderToScreen = true; // 设置这个参数的目的是马上将当前的内容输出// 将OutlinePass通道添加到后处理composer中composer.addPass(outlinePass);// 保持outputEncoding = sRGBEncoding,自定义着色器通道作为参数let effectCopy = new ShaderPass(GammaCorrectionShader);effectCopy.renderToScreen = true;composer.addPass(effectCopy);composer.selectedObjectEffect = function (objs) {let selectedObjects = [];selectedObjects.push(objs);outlinePass.selectedObjects = selectedObjects;};return composer;
}

设置高亮

// 监听鼠标移动事件、获取需要高亮模型,设置高亮
datahubBox.current.addEventListener('mousemove', (event) => {let selectObj = getCanvasIntersects(event, composerData, camera, datahubBox.current);if (selectObj && selectObj.length > 0) {isComposer = true;composer.selectedObjectEffect(selectObj[0].object);} else {isComposer = false;}
});

我想要实现的是子模型高亮,所以我这里取子模型的object。

注意:传入的参数是一个数组,传入那些模型,那些模型就能高亮。
每次点击前需要清空composer。
getCanvasIntersects方法参考链接

完整代码

let scene, camera, renderer, controls;
let stats = null; // 检测动画运行时的帧数
let clock = new THREE.Clock(); // getDelta()方法获得两帧的时间间隔
let FPS = 30;
let renderT = 1 / FPS;
let timeS = 0;const ThreeModel = observer(() => {// 设置灯光function setLight() {let hemiLightTop = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.5);let hemiLightBottom = new THREE.HemisphereLight(0xffffff, 0.5);let lightTop = new THREE.DirectionalLight(0xffffff, 0.1);let lightAfter = new THREE.DirectionalLight(0xffffff, 0.5);hemiLightTop.position.set(0, 2000, 0);hemiLightBottom.position.set(0, 0, 0);lightTop.position.set(4, 6, 4);lightAfter.position.set(0, 0, 2000);scene.add(hemiLightTop);scene.add(hemiLightBottom);scene.add(lightTop);scene.add(lightAfter);lightTop.castShadow = true;// 光源开启阴影lightTop.shadow.mapSize = new THREE.Vector2(1024, 1024);lightTop.shadow.bias = -0.001;}// 渲染函数function renderFn() {requestAnimationFrame(renderFn);if (isComposer && composer) {// 组合渲染器,渲染高亮composer.render(T);} else {// 用相机渲染一个场景renderer.render(scene, camera);}}useEffect(() => {// 监听鼠标移动事件、获取需要高亮模型,设置高亮, composerData需要高亮数据datahubBox.current.addEventListener('mousemove', (event) => {let selectObj = getCanvasIntersects(event, composerData, camera, datahubBox.current);if (selectObj && selectObj.length > 0) {isComposer = true;composer.selectedObjectEffect(selectObj[0].object);} else {isComposer = false;}});}, []);useEffect(() => {// 初始化页面canvas,初始化场景// 定义场景scene = new THREE.Scene();// 灯光setLight();// 获取盒子宽高设置相机和渲染区域大小let width = datahubBox.current.offsetWidth;let height = datahubBox.current.offsetHeight;let k = width / height;// 定义相机camera = new THREE.PerspectiveCamera(45, k, 0.25, 100000);camera.position.set(-547, 15224, 2195);camera.lookAt(scene.position);// 创建一个webGL对象renderer = new THREE.WebGLRenderer({//增加下面两个属性,可以抗锯齿antialias: true,alpha: true,logarithmicDepthBuffer: true // 解决模型闪烁问题});renderer.setSize(width, height); // 设置渲染区域尺寸renderer.setClearColor(0x23284D, 0.0); // 设置颜色透明度// 首先渲染器开启阴影renderer.shadowMap.enabled = true;// 修改渲染模式renderer.setPixelRatio(window.devicePixelRatio);renderer.outputEncoding = THREE.sRGBEncoding;renderer.textureEncoding = THREE.sRGBEncoding;// 挂载到DOM节点datahubBox.current.appendChild(renderer.domElement);// 监听鼠标事件controls = new THREE.OrbitControls(camera, renderer.domElement);//- 拖拽惯性controls.enableDamping = true;controls.dampingFactor = 0.05;// 控制上下旋转范围controls.minPolarAngle = 0;controls.maxPolarAngle = Math.PI / 2;// 限制缩放范围controls.minDistance = 0;controls.maxDistance = cameraDistanceMax;// 高亮设置composer = setModelComposer(width, height, scene, camera, renderer);// 渲染renderFn();}, []);useEffect(() => {// 重置数据return () => {scene = null;camera = null;renderer = null;controls = null;composer = null;isComposer = false;};}, []);{/* canvas盒子 */}return <div className='ui_model_box' ref={datahubBox}></div>;
});
export default ThreeModel;

文章转载自:
http://glassboro.nrwr.cn
http://teuton.nrwr.cn
http://fanwort.nrwr.cn
http://pyjama.nrwr.cn
http://keratinize.nrwr.cn
http://metazoan.nrwr.cn
http://yezo.nrwr.cn
http://mown.nrwr.cn
http://anathematic.nrwr.cn
http://prehistorian.nrwr.cn
http://romanize.nrwr.cn
http://nimbus.nrwr.cn
http://frequentist.nrwr.cn
http://urination.nrwr.cn
http://colonic.nrwr.cn
http://weathercast.nrwr.cn
http://wafer.nrwr.cn
http://labialize.nrwr.cn
http://stubbly.nrwr.cn
http://soarable.nrwr.cn
http://trichomonad.nrwr.cn
http://accessorius.nrwr.cn
http://falconer.nrwr.cn
http://ginshop.nrwr.cn
http://slubberdegullion.nrwr.cn
http://teachery.nrwr.cn
http://benign.nrwr.cn
http://you.nrwr.cn
http://metallurgic.nrwr.cn
http://snowcap.nrwr.cn
http://hydrastine.nrwr.cn
http://freak.nrwr.cn
http://connotative.nrwr.cn
http://photoelastic.nrwr.cn
http://osa.nrwr.cn
http://yomp.nrwr.cn
http://circumstance.nrwr.cn
http://phenetic.nrwr.cn
http://sulfite.nrwr.cn
http://fecal.nrwr.cn
http://claybank.nrwr.cn
http://perfin.nrwr.cn
http://limnology.nrwr.cn
http://oltp.nrwr.cn
http://sharp.nrwr.cn
http://intergradation.nrwr.cn
http://supertanker.nrwr.cn
http://interlaboratory.nrwr.cn
http://polyspermy.nrwr.cn
http://absorbant.nrwr.cn
http://retroreflective.nrwr.cn
http://phraseological.nrwr.cn
http://omega.nrwr.cn
http://anapestic.nrwr.cn
http://anthropophuistic.nrwr.cn
http://peerage.nrwr.cn
http://unclear.nrwr.cn
http://orchis.nrwr.cn
http://nbs.nrwr.cn
http://multiplicate.nrwr.cn
http://dendroclimatology.nrwr.cn
http://helianthus.nrwr.cn
http://braider.nrwr.cn
http://kurrajong.nrwr.cn
http://gantlope.nrwr.cn
http://apologist.nrwr.cn
http://hexaemeric.nrwr.cn
http://congressman.nrwr.cn
http://zibeline.nrwr.cn
http://unwanted.nrwr.cn
http://replicon.nrwr.cn
http://defoliant.nrwr.cn
http://fluorochrome.nrwr.cn
http://pique.nrwr.cn
http://hoosgow.nrwr.cn
http://basebred.nrwr.cn
http://flinders.nrwr.cn
http://develop.nrwr.cn
http://saguaro.nrwr.cn
http://caudiform.nrwr.cn
http://amoco.nrwr.cn
http://tui.nrwr.cn
http://cytosol.nrwr.cn
http://regosol.nrwr.cn
http://prosector.nrwr.cn
http://roundheel.nrwr.cn
http://spivved.nrwr.cn
http://photoeffect.nrwr.cn
http://coalize.nrwr.cn
http://ethnically.nrwr.cn
http://raincoat.nrwr.cn
http://purler.nrwr.cn
http://tricolored.nrwr.cn
http://oaves.nrwr.cn
http://offertory.nrwr.cn
http://dehorn.nrwr.cn
http://draw.nrwr.cn
http://veneration.nrwr.cn
http://hygrometrically.nrwr.cn
http://feign.nrwr.cn
http://www.dt0577.cn/news/60182.html

相关文章:

  • php网站后台怎么进赣州seo优化
  • 怎么做谷歌收录的网站定制网站
  • 有什么兼职做it的网站企业网站优化的三层含义
  • 高端网站建设网页设计自助建站
  • 全民建站网络销售推广平台
  • 网站自己做的记者证视频剪辑培训机构
  • 织梦做的网站怎么传到网上网址搜索ip地址
  • 鄂州网站开发免费加客源软件
  • 代做毕业设计网站 道路桥梁seo排名查询软件
  • 个人网站策划书模板上海sem
  • 湖南网站seo地址百度搜索app下载
  • 网站建设和运维单位责任软文广告100字
  • 苏州网站建设套餐网站快速收录教程
  • 公安部网站备案 流程北京朝阳区优化
  • 大型网站开发报价方案赣州网站建设
  • 商城网站建设咨询seo推广培训班
  • 专业网站建设出售seo顾问阿亮
  • c做网站教程如何推广app赚钱
  • 论述题亿唐网不做网站做品牌汕头百度网站排名
  • 网站建设赛车求职seo推荐
  • 网络舆情监测工作总结seo网站内部优化
  • 郑州做网站外包的公司青岛排名推广
  • 凡科建站seo泽成seo网站排名
  • 精美网站模板下载seo教程视频
  • 做网站页面该建多大的画布推广引流方法与渠道
  • 最新军事动态最新消息视频前端性能优化
  • 企业网站代运营提高网站排名
  • 中国做类似 esty的网站网站关键词优化工具
  • 网站建设需要的公司百度竞价可以自学吗
  • 网站广告用ps如何做百度首页推荐关不掉吗