我試圖實現'raypicker'選擇我的項目中的對象。我不完全理解如何實現這一點,但我從概念上理解它應該如何工作。我一直在努力學習如何做到這一點,但是我發現大多數的教程都讓我頭痛。我目前的代碼是基於我發現的最近的教程之一,here.'雷'創作raypicking不完全工作
經過幾個小時的修訂,我相信我的raypicker的問題實際上是在第一個地方創建射線。如果我用無疑位於三角形區域內的座標替換/硬編碼我的近/遠平面,拾取器可以正確識別它。
我的問題是這樣的:我的光線創作似乎沒有充分考慮我當前的「相機」或視角,因此相機旋轉不會影響我的鼠標所在的位置。 我相信要解決這個問題,我需要類似使用gluUnProject()或類似的東西,但是每當我使用它時,返回的x,y,z座標都會令人難以置信的小,
我當前創建的ray是一團糟。我試圖使用其他人最初提出的方法,但它似乎像我嘗試過的任何方法,它從來沒有與我的選擇器/交叉函數一起工作。
下面是我的射線創作代碼:
void oglWidget::mousePressEvent(QMouseEvent *event)
{
QVector3D nearP = QVector3D(event->x()+camX, -event->y()-camY, -1.0);
QVector3D farP = QVector3D(event->x()+camX, -event->y()-camY, 1.0);
int i = -1;
for (int x = 0; x < tileCount; x++)
{
bool rayInter = intersect(nearP, farP, tiles[x]->vertices);
if (rayInter == true)
i = x;
}
if (i != -1)
{
tiles[i]->showSelection();
}
else
{
for (int x = 0; x < tileCount; x++)
tiles[x]->hideSelection();
}
//tiles[0]->showSelection();
}
要重複,我用來加載了視,型號&投影矩陣,並unproject鼠標座標,但1920×1080的窗口內,所有我得到的是每個鼠標事件的xy & z在-2到2範圍內的值,這就是爲什麼我試圖使用此方法,但此方法不適用於相機旋轉和縮放。
我不想做的像素顏色採摘,因爲誰知道我以後可能需要這種技術,我把在迄今
有人可以告訴我我做錯了什麼嗎?我一直在這個好幾天無處可去!我甚至嘗試過關於鼠標和頂點的投影和非投影的不同組合,但沒有任何工作正常 – Yattabyte 2015-02-06 23:47:42
你知道,你可以通過繪製你的場景到另一個緩衝區來實現一個選擇器,而不是繪製顏色「繪製「對象ID到緩衝區中。爲了找出你點擊的對象,你所要做的就是從緩衝區中讀取對象ID。這是有利的,因爲它將是像素完美的,並且它也將解決頂點着色器中的任何操作,而且無需額外成本。 – 2015-02-07 02:11:00