2.8 局部操作无法选中点线面

文档中说

启动 Dandelion,加载 cube.obj 并进入建模模式 (model mode) 就可以看到用箭头表示的半边。直接点击某条半边就可以选中它,此时点击 Local Operations 一栏下的 Inverse, Next, Previous 等按钮就可以在这条半边连接的元素之间切换(如图 1.5 右侧所示)。

但是我无法选中

请问各位大佬有没有遇到类似的问题?
或者正确的操作方式是什么?


如图只能选中物体

我试着分析一下:

  1. 首先你能选中物体,也能正常进入建模模式,那运行时兼容性出问题的可能性比较小,姑且先假定没有问题。
  2. 日志里可以看到若干 perform picking 记录,说明射线打出去了,求交过程是存在的,但没求到交点。

dandelion 的拾取功能是基于射线求交的,而射线又是根据投影矩阵构造的。在实现正确的透视投影矩阵之前,打出去的射线位置与屏幕上点击的位置会有不小的偏差,所以求交很容易出错。而具体的偏差值与窗口大小和视角位置有关,所以特定的屏幕上选不中是有可能出现的问题。

我建议这样试一遍:

  1. 从 GitHub 上下载预编译版本,看看预编译版本能不能正常拾取。如果能,继续往下试;
  2. 打开菜单栏上的 Debug > Debug Options > Show Picking Ray 选项,让 dandelion 绘制点击时构造的拾取射线。此时再尝试点选模型,观察 picking ray。如果点击后看不到射线,稍微旋转视角后看到射线打中了你点击的位置,那么请联系我们当面调试;如果点击后就能看到射线,且射线明显打偏了,那么你需要先实现好透视投影矩阵 (Camera::projection) 。
1 Like

而且不难发现如果改了 CMakeLists.txt 里的#debug dandelion-ray-debug #optimized dandelion-ray链接库,并且在 utils/ray.cpp 里的 generate_ray 函数在实验中没有正确实现,也会影响结果。

1 Like