96SEO 2026-02-23 15:09 1
共同努力#xff0c;打造了一个令我们特别自豪的流畅的沉浸式网站。

和会议而建#xff0c;旨在展示里昂最具标志性的活动场所。
观看简短的介绍视频后#xff0c;用户…Plongez
和会议而建旨在展示里昂最具标志性的活动场所。
观看简短的介绍视频后用户可以进入城市的交互式风景如画的地图所有场馆都建模为
场景其中包含大量景观元素、云彩、动画车辆、波光粼粼的河流当然还有建筑物。
对象。
如果你有一些现成的3D模型可以利用那么可以使用这个在线3D格式转换工具将它们转换成GLTF模型这会节省不少时间。
团队从地图的早期迭代开始了项目的创作过程并很快确定了低多边形和丰富多彩的艺术方向。
我们知道必须添加两打可点击的建筑物因此我们必须在视觉构图、导航便利性和性能之间找到适当的平衡。
为了将绘制的三角形数量保持在最低限度我们还很快决定限制场景左侧和右侧远侧的
为了避免平移、缩放和动画之间的任何冲突我很早就决定从头开始编写相机控件的代码。
这样我们成功地限制了相机的移动同时仍然允许用户探索所有地图重要区域。
当然这意味着更多的建模工作如果你的场景需要频繁更改这可能会很烦人。
的大量计算负担光照阴影、阴影贴图……在我们的例子中这绝对是值得的。
WebGLExperience.jsdata文件夹包含单独文件中的
对象以及所有信息shaders文件夹包含单独文件中的所有项目自定义着色器CameraController.js处理所有相机移动和控制的类GroupRaycaster.js处理所有“交互式”对象光线投射的类ObjectsLoader.js加载所有场景对象的类WebGLExperience.js初始化渲染器、相机、场景、后处理并处理所有其他类的主类
three/examples/jsm/loaders/GLTFLoader;
three/examples/jsm/loaders/BasisTextureLoader;export
LoadingManager();this.basisLoader
BasisTextureLoader(this.loadingManager);//
wantthis.basisLoader.setTranscoderPath(/node_modules/three/examples/js/libs/basis/);this.basisLoader.detectSupport(this.renderer);this.loadingManager.addHandler(/\.basis$/i,
GLTFLoader(this.loadingManager);this.loader.setPath(this.basePath);this.onLoading
false,};this.loadingManager.onProgress
this.onLoading(percent);if(percent
true;this.isLoadingComplete();}};this.loadingManager.onError
url);};}loadObject({object,parent,
{this.startLoading({object,parent,onSuccess});});}else
{this.startLoading({object,parent,onSuccess});}}startLoading({object,parent,onSuccess})
{this.loader.setPath(this.basePath
object.subPath);}this.loader.load(object.gltf,
example!parent.add(gltf.scene);this.objects.push(sceneObject);onSuccess
everythingthis.state.objectsLoaded;this.isLoadingComplete();},
);this.state.objectsLoaded;this.isLoadingComplete();});}isLoadingComplete()
{WebGLRenderer,Scene,sRGBEncoding,Group
window.innerHeight;this.initRenderer();this.initScene();this.initCamera();this.loadObjects();this.initRaycasting();}/***
GLTFs!this.renderer.outputEncoding
sRGBEncoding;this.renderer.setSize(
canvasthis.container.appendChild(
this.cameraController.camera;}/***
this.height,onMouseEnteredObject:
this.onLoadingCallback(percent);},onComplete:
callbackthis.onCompleteCallback
this.onCompleteCallback();}});//
Group();this.scene.add(this.objectGroup);//
objectssceneObjects.forEach(object
{this.objectsLoader.loadObject({object,parent:
{console.log(loadedObject);}});});}/***
../../webgl/WebGLExperience;import
./WebGLCanvas.module.scss;export
container.current,});setWebglXP(webgl);},
如果你仔细查看上面的示例代码会发现我允许每个对象在需要时使用自己的自定义着色器。
ShaderMaterial因为当你单击建筑物时灰度滤镜将应用于所有其他场景网格体
;由于所有对象都必须遵守此行为因此我将其实现为“着色器块”就像
shader.fragmentShader.replace(#include
grayscale_fragment,grayscaleChunk);
};这样如果我必须调整灰度效果我只需修改一个文件它就会更新我的所有片段着色器。
}然后在片段着色器中我使用它们根据一些uniforms计算漫反射闪电
https://learnopengl.com/PBR/Theory
}这是一种从头开始应用基本闪电阴影的廉价方法而且结果足够令人信服。
https://gist.github.com/patriciogonzalezvivo/670c22f3966e662d2f83#classic-perlin-noise
它处理出现的动画在某个位置聚焦时在相机移动上添加一点鱼眼并负责小级别校正亮度、对比度、饱和度和曝光。
https://www.w3.org/TR/WCAG21/#dfn-relative-luminanceconst
};在某些时候我们还尝试添加散景通道但它对性能要求太高因此我们很快就放弃了它。
你始终可以通过安装spector.js扩展并检查WebGL上下文来深入查看使用的所有着色器。
this.renderer.getContext(),});this.setImprovedGPUTier();})();
this.height)};this.gpuTier.improvedTier.tier
但它确实需要一些组织和一个包含多个文件的干净代码库可以轻松调试、添加或删除功能。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback