gpt4 book ai didi

opengl - 3D场景图遍历问题

转载 作者:行者123 更新时间:2023-12-01 22:03:49 26 4
gpt4 key购买 nike

我已经实现了一个由 OpenGL 渲染的小场景图,所有对象都派生自一个公共(public) Node 类,并且在 OpenGL 帧渲染期间我只需调用 visit 方法的根节点,并递归地遍历图。开始遍历时我传递的第一个矩阵是相机矩阵。

visit 方法如下所示:

void Node::visit(const QMatrix4x4 &mv) {
QMatrix4x4 m = mv;
m.rotate(m_rot);
m.translate(m_pos);
m.scale(m_scale);

m_effectiveMV = m;

for (int i = 0; i < m_children.size(); i++) {
m_children[i]->visit(m_effectiveMV);
}

draw(); // draws if this node has anything to draw,
// otherwise just transformation.
}

我遇到的问题是,当我为子节点设置旋转时,旋转是相对于父节点发生的,而不是围绕节点本身发生的。有人能发现我在这里做错了什么吗?

最佳答案

假设您的矩阵方法正在做正确的事情,翻译应该是列表中的第一个:

m.translate(m_pos);
m.rotate(m_rot);
m.scale(m_scale);

这将首先缩放和旋转顶点,然后将其转换到父系统中,依此类推。

关于opengl - 3D场景图遍历问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6670950/

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