# dou3d-ts
**Repository Path**: mirrors-gis/dou3d-ts
## Basic Information
- **Project Name**: dou3d-ts
- **Description**: webgl 学习
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-04-24
- **Last Updated**: 2024-04-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# dou3d-ts
逗3D,基于 WebGL 的 3D 引擎,整体框架参考 AS3 时代的 Away3D 引擎,具体的实现参考了部分 H5 3D 引擎。
*本着以其看别人的引擎代码学习不如自己照着实现一个的想法,所以写了该引擎。*
* 该引擎主要是我自己为了了解3D底层运行原理而写,如果还有时间会扩充和完善示例。
* 本引擎采用左手坐标系。
[欢迎来我的博客,不定时发布 3D 学习心得。](https://www.cnblogs.com/hammerc/)
---
## 开始上手
1. 在编写代码之前请引入位于**examples/lib**文件夹中的**dou.js**和**dou3d.js**两个文件:
```html
```
2. 需要外部加载资源时,请注册加载类型解析器:
```javascript
// 注册贴图解析器并绑定对应的文件后缀名
dou.loader.registerAnalyzer("texture", new dou3d.TextureAnalyzer());
dou.loader.registerExtension("jpg", "texture");
dou.loader.registerExtension("jpeg", "texture");
dou.loader.registerExtension("png", "texture");
```
3. 启动引擎并创建View3D对象:
```javascript
var engine = new dou3d.Engine();
var viewRect = engine.viewRect;
var view3D = new dou3d.View3D(0, 0, viewRect.w, viewRect.h);
view3D.on(dou3d.Event3D.RESIZE, function () {
view3D.width = viewRect.w;
view3D.height = viewRect.h;
});
engine.addView3D(view3D);
```
4. 调整摄像机位置:
```javascript
view3D.camera3D.lookAt(new dou3d.Vector3(0, 0, -1000), new dou3d.Vector3(0, 0, 0));
```
5. 添加立方体对象:
```javascript
var geometery = new dou3d.CubeGeometry();
var cube = new dou3d.Mesh(geometery);
view3D.scene.root.addChild(cube);
```
## 未来路线图
**当前未实现的引擎必备功能**
*受时间和精力的限制,这部分的功能实现会在时间充裕之后补上。*
* 雾化;
* 法线贴图、高光贴图等特殊效果贴图;
* 阴影支持所有类型灯光,且支持多个光源;
* 通用模型文件解码;
* 专用模型格式导出插件;
* 包围盒和视野剔除;
* 碰撞和拾取;
* 文本渲染;
* 3D声音;
* 单场景支持多个摄像机;
* 自定义着色器渲染;
* 粒子效果;
* GUI;
* 地形;
* 效率优化(绘制批处理);
## 引擎示例
* [立方体](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=CubeTest)
* [贴图](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=TextureTest)
* [光照](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=LightTest)
* [阴影](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=ShadowTest)
*注:阴影仅支持方向光,且只支持一个灯光*
* [骨骼动画](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=AnimationTest)
*注:小键盘数字键可以切换动画播放*
* [朝向控制器](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=LookAtTest)
* [拖拽查看](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=HoverTest)
* [坐标转换](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=TransformTest)
*注:左边使用了本地坐标转全局坐标,右边使用了全局坐标转本地坐标*
* [天空盒](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=SkyBoxTest)
* [公告板](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=BillboardTest)
* [线框](https://hammerc.github.io/dou3d-ts/examples/index.html?demo=WireframeTest)