在我的場景中,我想要「抓取」地形,然後讓相機平移(使用其高度,視圖向量,視野等等)與我移動光標相同)。在3D場景中實現「抓取」相機平移工具
所以最初的「抓取」點將成爲世界空間中的工作點,並且我希望這個點在我拖動時保持在光標下方。
我目前的解決方案是採取以前和當前的屏幕點,不投影他們,從另一個減去一個,並翻譯我的相機與該向量。這與我想要的很接近,但光標不能完全保留在最初的場景位置上,如果您在地形的邊緣附近開始,這可能會有問題。
// Calculate scene points
MthPoint3D current_scene_point =
camera->screenToScene(current_point.x, current_point.y);
MthPoint3D previous_scene_point =
camera->screenToScene(previous_point.x, previous_point.y);
// Make sure the cursor didn't go off the terrain
if (current_scene_point.x != MAX_FLOAT &&
previous_scene_point.x != MAX_FLOAT)
{
// Move the camera to match the distance
// covered by the cursor in the scene
camera->translate(
MthVector3D(
previous_scene_point.x - current_scene_point.x,
previous_scene_point.y - current_scene_point.y,
0.0));
}
任何想法表示讚賞。
您是否試圖在地形上「抓取」實際的3D點,或者您能否抓住Z = 0處的2D點? – genpfault 2011-06-02 21:17:25
這個想法是,光標將保持在地形上的初始3D點上,所以這就是我試圖「抓住」。例如,如果您正在查看遠處有山脈的場景,並且您在「抓取」了山峯中的一個山峯時,在向下拖動(或拉動)光標時,當光標保持點亮時,山峯會向您走來整個時間的高峯期。 – 2011-06-02 21:39:44
現在想想一個體面的解決方案爲時已晚,但你要做的是解決這個系統問題:{從相機到鼠標的高峯時間; mountain.position.y = 0},對吧? – Calvin1602 2011-06-02 22:23:29