top of page
多边形编辑器
![](https://static.wixstatic.com/media/bd49bc_6f82ca1385684f68851f179a4395ec7ff000.jpg/v1/fill/w_866,h_487,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/bd49bc_6f82ca1385684f68851f179a4395ec7ff000.jpg)
项目总览
建立BVH
对于每个多边形,我在生成它时计算它的边界 AABB ,并递归地构建 AABB 的BVH以加速射线投射交点。为了管理多边形,我只让BVH的叶节点拥有场景中多边形的索引值。
![](https://static.wixstatic.com/media/bd49bc_474cdc1f69f24709b6bdad67f1c09526f000.jpg/v1/fill/w_457,h_257,al_c,q_80,usm_0.66_1.00_0.01,enc_avif,quality_auto/bd49bc_474cdc1f69f24709b6bdad67f1c09526f000.jpg)
为多边形构建 BVH
递归构建 BVH 的代码
在我的场景中,使用 BVH至少比不 使用 BVH 快 3 倍。如果修改随机光线的散步范围,性能提升会更大。130k条光线与 8 个多边形相比仅需13 毫秒。
![](https://static.wixstatic.com/media/bd49bc_9ef5855435bf4bc08ee1a2b2843354e5f000.jpg/v1/fill/w_457,h_257,al_c,q_80,usm_0.66_1.00_0.01,enc_avif,quality_auto/bd49bc_9ef5855435bf4bc08ee1a2b2843354e5f000.jpg)
通过BVH 加速求交过程
射线与多边形求交
红点表示向内点,绿点表示向外点。只有当最后一个红点和第一个绿点的中点位于多边形时,射线才会击中多边形。
![](https://static.wixstatic.com/media/bd49bc_79b031d493204f4e96b363e68f588a53f000.jpg/v1/fill/w_457,h_257,al_c,q_80,usm_0.66_1.00_0.01,enc_avif,quality_auto/bd49bc_79b031d493204f4e96b363e68f588a53f000.jpg)
射线与多边形求交以及Debug Draw
射线与多边形求交的代码
截图
![](https://static.wixstatic.com/media/bd49bc_00b397e03b8f4d8faf9f51c824bdfe62~mv2.png/v1/fill/w_980,h_490,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/bd49bc_00b397e03b8f4d8faf9f51c824bdfe62~mv2.png)
![](https://static.wixstatic.com/media/bd49bc_d733b4f1d8fb4b7bb1414977cc0e4eb1~mv2.png/v1/fill/w_980,h_487,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/bd49bc_d733b4f1d8fb4b7bb1414977cc0e4eb1~mv2.png)
![](https://static.wixstatic.com/media/bd49bc_3da9a4c9818442758ffa2e4df6823034~mv2.png/v1/fill/w_980,h_488,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/bd49bc_3da9a4c9818442758ffa2e4df6823034~mv2.png)
![](https://static.wixstatic.com/media/bd49bc_00b397e03b8f4d8faf9f51c824bdfe62~mv2.png/v1/fill/w_980,h_490,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/bd49bc_00b397e03b8f4d8faf9f51c824bdfe62~mv2.png)
1/4
bottom of page