gpt4 book ai didi

c++ - OpenGL 变换

转载 作者:太空狗 更新时间:2023-10-29 19:39:43 27 4
gpt4 key购买 nike

我在一个点上有一个对象,比如相对于原点的 x、y、z。
我想对点应用一些变换,比如旋转和平移,并在变换后的点渲染对象。我正在使用 glTranslatef()glRotatef() 函数。它看起来像这样:

glTranslatef(x,y,z); 
glRotatef(Ang,0,1,0); // rotated around Y axis at an arbitrary angle
glTranslatef(xt,yt,zt); // further translation
<render the object>

尽管它使我免于复杂的矩阵变换操作,但我不知道最终位置相对于原点的实际坐标值。有没有一种方法可以不经过矩阵运算就可以得到变换点的实际位置坐标?

最佳答案

我先给你一些理论。 OpenGL 使用矩阵 4x4和长度为 4 的 vector (点坐标) (3D)。

让我们有一个 vector X = (x,y,z,1) .我希望你知道如何multiply matrixes .假设您想通过以下方式翻译您的观点 V = (v<sub>x</sub>,v<sub>y</sub>,v<sub>z</sub>) .为此,您需要构建 translation matrix像这样:

Translation matrix

然后您将乘以两个矩阵(矩阵 * vector/点):Y = TX :

Translation via matrix

如此复杂地执行此操作(而不仅仅是添加 X + V )的原因是您可以通过用不同的值填充相同的矩阵来绕轴旋转您的点。它叫做 rotation matrix :

Rotation matrices

最好的部分是您可以链接这些矩阵。当你需要用这些规则画点时:

  • 翻译 T<sub>1</sub>
  • 旋转R<sub>1</sub>
  • 翻译 T<sub>2</sub>

您可以准备一个矩阵,它可以一次完成所有工作: F =
T<sub>1</sub>R<sub>1</sub>T<sub>2</sub>

然后一次将所有这些转换应用于该点:Y = FX .

请注意矩阵乘法不是commutative所以顺序很重要

OpenGL 在内部使用这些矩阵(还有更多类型,如 scale matrix )。您可以使用命令获取当前转换矩阵(示例来自 here ):

glGetDoublev(GL_MODELVIEW_MATRIX, redTransformationMatrix);

下面是正确表示这些数据的方法(详细信息 here ):

enter image description here

除了最后一张以外的所有图片都来自wikipedia.org

关于c++ - OpenGL 变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9328992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com