如何确保对象不会超出可见范围 - > opengl-> c

时间:2011-01-06 00:46:36

标签: c windows opengl glut

想象一下,你在屏幕的中心有一些多边形(让我们说一个正方形,考虑一个2D世界),你有一个从中心点重绘多边形的功能。 每当您按下键盘上,下,左或右按下时,考虑到按下的键,形状将重绘(向上或向下将更新y coords,左右将更新coords)。 考虑到你有: glutInitWindowSize(400400); glutInitWindowPosition(400,200);

我正在使用glMatrixMode(GL_MODELVIEW),如何防止从相机视线中退出形状?

PS:到目前为止,我只能阻止不从左下方退出,我在重绘时测试coords刷新,如果y或x将是负数(如果它们将是,则形状将在相同位置重绘) ,但我无法通过窗口的右边和上边缘来做同样的事情。

3 个答案:

答案 0 :(得分:3)

听起来您需要将摄像机的远剪裁平面设置为更远的距离,或者确保您的对象不会超出摄像机的远剪辑属性。

答案 1 :(得分:3)

在读完你对其他答案的评论之后,我有了一个想法。我不确定它是否合适,但它可能会有所帮助。

根据我的理解,你可以看到玩家控制的飞机,并且当玩家在设置内移动飞机时你希望飞行器相对于玩家拥有的视图移动,但是你不希望它退出视图。我的假设是整个视图随着飞行器向前飞行而移动(这可能是错误的)。

我的想法是,你总是让视图朝着飞行器的中心移动,速度随着飞机离视线中心越来越远而增加。当飞行器离中心越来越远以接近边缘时,摄像机将在飞行器上重新定位的速度将增加(并且摄像机运动的速度限制大于速度限制飞机)。随着摄像机在飞机上关闭,它将减速。 (是的,这听起来很像狭义相对论)

你应该能够跟上飞机中心的距离,首先要知道飞机最初是居中的,并且知道你对它做了什么改造。您可以更新与您应用于飞机的运动保持一致的变换矩阵,并且在每次更新时,您可以计算将摄像机移回摄像机视图中心的逆操作,然后将该矩阵乘以标量1 / 2,并通过它转换整个场景。如果您不希望相机随着飞机的方向旋转,那么您就不要将转弯放入与之保持同步的矩阵中。每次更新你想要移动相机多少(在我的例子中是1/2)取决于你。我选择了1/2,因为您应用的部分和为下次更新保存的部分是相同的。

我做了任何openGL已经有很长一段时间了,但我记得能够从引擎中读取矩阵,但这很容易让你自己跟上。

这可能根本不是你想要的,但似乎它可能会有所帮助。

答案 2 :(得分:1)

听起来好像需要跟踪图形对象的宽度和高度,然后使用一些减法来计算允许的最大x和y位置。

这是学校的作业吗?