簡體   English   中英

如何在OpenGL中繪制3D矢量?

[英]How to draw a 3D vector in OpenGL?

我正在對粒子的運動進行3D模擬,並且我想繪制表示電場在某些位置的箭頭。 我在Blender中制作了一個箭頭網格,並將其導出為.obj,以便可以在我的代碼中使用它(我制作了.obj loader),但是我似乎無法正確旋轉它,使其指向正確的方向,即使我檢查了電場矢量是否正確計算。 我也得到一些奇怪的結果。 例如,如果矢量應該指向上方,則它指向下方,但是當我注釋掉在x軸上旋轉的代碼時,箭頭會像預期的那樣指向下方。 然后,如果應該指向右邊,則指向內部(朝負z軸),但是當我注釋掉y軸上的旋轉時,它指向右邊。

這是我的箭頭旋轉和渲染代碼:

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();
};

field是代表電場的向量。

glTranslatef(0,0,_zdefault);
glRotatef(Entity::yangle,0,1,0);

在那里,這樣我就可以旋轉整個場景,有點像在Blender中圍繞它旋轉。 另外,Vector3只是我編寫的具有基本功能的簡單Vector類。 就像我說的那樣,矢量計算沒有問題,我檢查了一下,只是不能使用矢量正確地旋轉物體。

我有種感覺,我在使用atan2的glRotatef的角度上有些扭曲,但是我仍然不明白這將如何影響如前所述的旋轉。

有什么方法可以僅基於矢量分量旋轉某些東西嗎?

首先,您可能不應該使用glRotatef glTranslatef等舊版管道,而使用着色器並管理自己的矩陣。

除此之外,最好使用lookAt轉換,將field用作方向,將某些up作為up向量

要旋轉整個場景,您只需定義一個中心並在轉換它們后以相同的變換圍繞所有向量旋轉它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM