我正在製作粒子運動的三維模擬,我想在某些位置繪製表示電場的箭頭。 我在Blender中製作了一個箭頭網格,並將其導出爲.obj,因此我可以在我的代碼中使用它(我製作了一個.obj加載程序),但似乎無法正確旋轉它,以便它指向正確的方向,儘管我檢查了電場矢量的計算是否正確。 我也收到了一些奇怪的結果。例如,如果向量應該向上指向,它向下指向,但是當我註釋掉在x軸上旋轉的代碼時,箭頭會像預期的那樣向下指向。那麼如果它指向右側,它會向內指向(朝着負z軸),但是當我註釋掉y軸上的旋轉時,它指向右側。如何在OpenGL中繪製3D矢量?
這裏是我的代碼爲箭頭的旋轉和渲染:
void Render(Vector3 cameraPos)
{
glScalef(field.length() * ArrowLength,1.0,1.0);
glTranslatef(0,0,_zdefault);
glRotatef(Entity::yangle,0,1,0);
glTranslatef(pos.getX() + cameraPos.getX(), pos.getY() + cameraPos.getY(), pos.getZ() + cameraPos.getZ() - _zdefault);
glRotatef(atan2(field.getZ(),field.getY()) * 180/M_PI, 1.0,0.0,0.0);
glRotatef(atan2(field.getX(),field.getZ()) * 180/M_PI, 0.0,1.0,0.0);
glRotatef(atan2(field.getY(),field.getX()) * 180/M_PI, 0.0,0.0,1.0);
glBindTexture(GL_TEXTURE_2D,arrowTexture);
glCallList(arrow);
glLoadIdentity();
};
場是代表電場矢量。 線條
glTranslatef(0,0,_zdefault);
glRotatef(Entity::yangle,0,1,0);
是否有這樣我可以旋轉整個場景,有點像在攪拌機周圍的軌道。 另外,Vector3只是一個簡單的Vector類,我用非常基本的功能編寫。就像我說的,矢量計算沒有問題,我檢查了一下,我只是不能使用矢量來正確地旋轉東西。
我有一種感覺,我的角度有點搞砸了glRotatef的地方,我使用atan2,但我仍然無法理解這將如何影響旋轉,如前所述。
有沒有什麼辦法只基於矢量組件旋轉某些東西?
而不是處理旋轉角度,它更容易直接構建旋轉矩陣。看到我的答案在這裏,這是同一種問題:http://stackoverflow.com/questions/24705225/opengl-rotation-from-velocity-vector/24709587#24709587。 – 2014-10-20 03:03:34
你未轉換的箭頭指向什麼方向?上面的答案是原始矢量指向正z方向。應該很容易地調整它的原始箭頭,例如指向x方向。但是如果有必要,我可以寫一個新版本的答案。 – 2014-10-20 03:06:44