sách gpt4 ăn đã đi

c++ - OpenGL 变换

In lại 作者:太空狗 更新时间:2023-10-29 19:39:43 27 4
mua khóa gpt4 giày 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

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

câu trả lời hay nhất

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

让我们有一个 vector X = (x,y,z,1) .我希望你知道如何multiply matrixes .假设您想通过以下方式翻译您的观点 V = (vx,vy,vz) .为此,您需要构建 translation matrixNhư thế này:

Translation matrix

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

Translation via matrix

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

Rotation matrices

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

  • dịch T1
  • 旋转R1
  • dịch T2

您可以准备一个矩阵,它可以一次完成所有工作: F =
T1R1T2

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

请注意矩阵乘法不是commutativeVì thế顺序很重要

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

glGetDoublev(GL_MODELVIEW_MATRIX, redTransformationMatrix);

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

nhập mô tả hình ảnh ở đây

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

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

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress