【问题标题】:OpenGL - How to scale an object from the centre?OpenGL - 如何从中心缩放对象?
【发布时间】:2012-04-22 22:17:18
【问题描述】:

我的 .c 程序使用 glut 创建了一个对象并将纹理映射到该对象上。然后该对象可以由用户操作。当对象按比例放大然后按比例缩小时,它会移出窗口并移出视野。我如何确保对象在缩放时保持居中或替代不能移出窗口?如果需要,我可以包含我的代码。

我在想,如果我总是从对象的中心缩放,这会有所帮助,但不确定如何做到这一点,因为它似乎总是从角落缩放,导致它移出屏幕

好的,所以图像最初似乎是从中心缩放的,但是当图像被平移后,之后的任何缩放都会导致它移动?

【问题讨论】:

    标签: c opengl glut


    【解决方案1】:

    听起来好像缩放操作没有从对象中心位置缩放对象,这将导致对象远离其原点。

    确保在任何翻译之前执行缩放操作。

    【讨论】:

    • 不,它似乎是从角落缩放的。这有明显的原因吗?
    • 这可能只是因为 glut 生成的顶点都是正数。你可以通过找到对象的宽度、高度和深度来解决这个问题,使用 glTranslate 将这些值平移减半,然后缩放,然后再次平移。有点笨拙,但应该可以解决问题。
    【解决方案2】:

    为此,您需要在对象和窗口边缘之间创建碰撞检测算法。如果屏幕上对象的边缘或像素碰到窗口的边缘,则不应再进一步。

    网上有很多关于这方面的资料,我相信你可以找到一些例子。

    【讨论】:

      【解决方案3】:

      一个对象是一组点。例如,如果它们的所有坐标都是正的,则缩放看起来像是从角落完成的。为了防止这种情况,您需要自己进行一些翻译。

      glScaled(...);
      glTranslated(/*-1 * center coordinates relative to the object*/);
      //draw the object
      

      请注意,使对象居中的方法不止一种。最简单的就是找到边界框的中心。

      【讨论】:

        猜你喜欢
        • 2018-01-18
        • 1970-01-01
        • 2019-03-07
        • 2021-07-29
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 2015-11-14
        • 1970-01-01
        相关资源
        最近更新 更多