AR.js开发环境搭建:从配置到第一个AR应用
你是否曾想过在网页中轻松实现增强现实(Augmented Reality,AR)效果?无需复杂的原生开发,只需几行代码就能让3D模型在摄像头前栩栩如生。本文将带你从零开始搭建AR.js开发环境,完成你的第一个AR应用,全程仅需10分钟,即使是零基础也能快速上手。
准备工作:了解AR.js
AR.js是一个轻量级的Web增强现实库,能够在移动设备上实现60fps的流畅体验。它基于Three.js和A-Frame框架,支持标记跟踪、位置跟踪等多种AR功能。目前项目已迁移至新仓库AR-js-org/AR.js,但旧版本的CDN和链接仍然可用。
官方文档和示例代码是学习AR.js的最佳资源:
- 项目主页:README.md
- A-Frame示例:aframe/examples/
- Three.js示例:three.js/examples/
环境搭建:两种入门方式
AR.js提供了两种主要的开发方式,你可以根据自己的技术背景选择适合的方案。
方式一:基于A-Frame的零代码入门
A-Frame是一个基于WebGL的声明式3D框架,使用HTML标签即可创建AR场景,非常适合初学者。
- 创建一个新的HTML文件,复制以下代码:
<!-- 引入A-Frame和AR.js库 -->
<script src="https://cdn.jsdelivr.net/npm/aframe@1.4.2/dist/aframe.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/ar.js@3.4.3/aframe/build/aframe-ar.js"></script>
<!-- AR场景定义 -->
<a-scene arjs>
<!-- 创建一个平面作为地面 -->
<a-plane position="0 0 0" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
<!-- 创建一个立方体 -->
<a-box position="0 0.5 0" rotation="0 45 0" color="#4CC3D9" animation="property: rotation; to: 0 405 0; dur: 5000; loop: true"></a-box>
<!-- 创建一个球体 -->
<a-sphere position="-1 0.5 1" radius="0.3" color="#EF2D5E"></a-sphere>
<!-- 创建一个圆柱体 -->
<a-cylinder position="1 0.3 1" radius="0.2" height="0.6" color="#FFC65D"></a-cylinder>
<!-- 设置相机 -->
<a-camera-static></a-camera-static>
</a-scene>
- 将文件保存为
ar-basic.html,用浏览器打开即可看到AR效果。
这种方式的核心代码来自A-Frame基础示例,通过<a-scene arjs>标签启用AR功能,所有3D物体都会自动跟踪默认的HIRO标记。
方式二:基于Three.js的自定义开发
如果你熟悉JavaScript和Three.js,可以使用更灵活的Three.js接口来自定义AR场景。
- 创建HTML文件,复制以下代码:
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, user-scalable=no">
<script src="https://cdn.jsdelivr.net/npm/three@0.132.2/build/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/ar.js@3.4.3/three.js/build/ar.js"></script>
<body style="margin: 0;">
<script>
// 初始化场景、相机和渲染器
const scene = new THREE.Scene();
const camera = new THREE.Camera();
const renderer = new THREE.WebGLRenderer({ alpha: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// 初始化AR工具包
const arToolkitSource = new THREEx.ArToolkitSource({ sourceType: 'webcam' });
const arToolkitContext = new THREEx.ArToolkitContext({
cameraParametersUrl: 'data/data/camera_para.dat',
detectionMode: 'mono'
});
// 初始化AR控制器
arToolkitContext.init(() => {
camera.projectionMatrix.copy(arToolkitContext.getProjectionMatrix());
});
// 创建标记控制器
const markerControls = new THREEx.ArMarkerControls(arToolkitContext, camera, {
type: 'pattern',
patternUrl: 'data/data/patt.hiro',
changeMatrixMode: 'cameraTransformMatrix'
});
// 添加3D物体
const geometry = new THREE.CubeGeometry(1, 1, 1);
const material = new THREE.MeshNormalMaterial({ transparent: true, opacity: 0.5 });
const cube = new THREE.Mesh(geometry, material);
cube.position.y = 0.5;
scene.add(cube);
// 渲染循环
function animate() {
requestAnimationFrame(animate);
if (arToolkitSource.ready) {
arToolkitContext.update(arToolkitSource.domElement);
scene.visible = camera.visible;
}
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
}
// 初始化并开始渲染
arToolkitSource.init(() => {
arToolkitSource.onResizeElement();
arToolkitSource.copyElementSizeTo(renderer.domElement);
});
window.addEventListener('resize', () => {
arToolkitSource.onResizeElement();
arToolkitSource.copyElementSizeTo(renderer.domElement);
});
animate();
</script>
</body>
- 将文件保存为
ar-threejs.html,并确保相机参数文件和标记图案文件的路径正确:- 相机参数:data/data/camera_para.dat
- HIRO标记图案:data/data/patt.hiro
这种方式的代码基于Three.js基础示例,提供了更底层的控制能力,适合开发复杂的AR应用。
制作AR标记:让你的应用识别现实世界
AR.js需要通过标记(Marker)来定位虚拟物体。默认情况下,AR.js使用HIRO标记,你可以直接下载使用:
如果你想创建自定义标记,可以使用项目提供的标记生成工具:
运行第一个AR应用:步骤与常见问题
运行步骤
- 将创建的HTML文件和所需的资源文件放在同一个目录下
- 使用本地服务器打开文件(直接双击HTML文件可能会导致摄像头权限问题)
- 打印HIRO标记或将其显示在手机屏幕上
- 将摄像头对准标记,即可看到3D物体出现在标记上方
常见问题解决
- 摄像头无法启动:确保使用HTTPS协议或localhost访问,浏览器需要摄像头权限
- 标记识别不稳定:确保光线充足,标记清晰,背景不要过于复杂
- 3D模型不显示:检查控制台是否有报错,确认库文件加载正确
- 性能问题:减少场景中的多边形数量,关闭不必要的动画效果
进阶学习:探索更多AR功能
AR.js提供了丰富的功能和示例,以下是一些值得探索的方向:
位置跟踪应用
AR.js支持基于GPS的位置跟踪,可以创建户外AR应用。相关代码和示例:
- GPS相机组件:aframe/src/location-based/gps-camera.js
- 位置标记组件:aframe/src/location-based/gps-entity-place.js
多标记跟踪
通过多标记跟踪可以实现更复杂的AR场景:
AR门户效果
创建类似《头号玩家》中的AR门户效果:
- 门户示例:aframe/demos/demo-portal-door/basic.html
- 视频纹理:aframe/demos/demo-portal-door/videos/aframe-city-360.mp4
总结与资源推荐
通过本文的介绍,你已经掌握了AR.js的基本开发环境搭建和第一个AR应用的创建方法。AR.js作为一个轻量级的Web AR框架,非常适合快速原型开发和小型项目。
推荐学习资源
- 官方示例库:three.js/examples/ 和 aframe/examples/
- 测试用例:test/specs/
- 实验性功能:three.js/experiments/
下一步行动
- 尝试修改3D物体的形状、颜色和动画
- 创建自定义标记并在应用中使用
- 探索位置跟踪和多标记功能
- 参与AR.js社区,提交Issue或贡献代码
现在,你已经具备了开发Web AR应用的基础知识,快去创建属于你的增强现实体验吧!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00

