繁体   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