【问题标题】:Canceling the translation due to scaling由于缩放而取消翻译
【发布时间】:2013-02-27 12:27:15
【问题描述】:

在其中一个渲染场景中,我将相机聚焦在箭头的顶端。我缩放箭头并改变相机焦点。我应该如何计算箭头所需的平移值以抵消由于缩放而发生的平移并保持相机焦点不变? (我无法更改相机变量) 假设红色圆圈是相机的焦点。第二帧显示了所需的行为。

【问题讨论】:

    标签: opengl graphics 3d directx-9


    【解决方案1】:

    如果您将相机平移到原点,请对其进行缩放,然后将其平移回原点(按缩放量平移),这样您的相机就会位于正确的位置。缩放不在原点的东西往往会使它们远离原点,因为它们的位置和其他所有东西一样被缩放。

    【讨论】:

    • "(translate by scaled amount)" 如果我​​用 'Sy' 在 y 中缩放,y 方向平移的数学方程是什么?
    • 仅在 Y 中进行缩放,您应该有一个缩放向量 然后将它与您正在缩放的​​任何内容相乘(如果它不是您正在缩放的​​ 3 维向量,则只需填充另一个带有 1 的组件)
    • 为什么要缩放第二个翻译?如果您将一个点从 (50, 50) 平移到原点,缩放会将其留在原点,您需要将其平移回 (50, 50)。
    • 如果箭头的尖端在 (50,50),那么您将其缩放为 (60,60),如果您转换回 (50,50),那么您就失去了焦点
    • 这就是您将其翻译为原点的原因,对吗?您将点从 (50, 50) 转换为 (0, 0),应用缩放(将 (0, 0) 留在 (0, 0) 处),然后转换回 (50, 50)。您的焦点停留在 (50, 50)。
    【解决方案2】:

    什么叫“相机对焦”?那是你创造的东西吗?还是 OpenGL 里面的东西?

    我会从那个特定点应用转换。我的意思是,规模的中心。这样你就可以保住这个职位了。

    【讨论】:

    • 我的意思是,翻译取决于您选择比例中心的位置!
    • 如果您使用 glScale,那么您将无法更改刻度中心。您应该使用转换矩阵重写该方法:en.wikipedia.org/wiki/Transformation_matrix
    • 这是我创造的。我只需要将箭头保持在同一位置。希望你明白...
    • 然后您必须使用该特定点的转换中心应用自定义转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 2022-01-10
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多