Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确保对象不';t离开可见范围->;opengl->;C_C_Windows_Opengl_Glut - Fatal编程技术网

如何确保对象不';t离开可见范围->;opengl->;C

如何确保对象不';t离开可见范围->;opengl->;C,c,windows,opengl,glut,C,Windows,Opengl,Glut,假设屏幕中心有一个多边形(假设是一个正方形,考虑二维世界),并且有一个从中心点重新绘制该多边形的函数。 每次按下键盘上的向上、向下、向左或向右键时,形状都会根据按下的键重新绘制(向上或向下将更新y坐标,向左和向右将更新坐标)。 考虑到你有: glutInitWindowSize(400400); 位置(400200) 我使用的是glMatrixMode(GL_MODELVIEW),如何防止形状从相机的视线中消失 PS:到目前为止,我只能防止不从左侧和底部退出,我在重新绘制时在坐标刷新测试y或x是

假设屏幕中心有一个多边形(假设是一个正方形,考虑二维世界),并且有一个从中心点重新绘制该多边形的函数。 每次按下键盘上的向上、向下、向左或向右键时,形状都会根据按下的键重新绘制(向上或向下将更新y坐标,向左和向右将更新坐标)。 考虑到你有: glutInitWindowSize(400400); 位置(400200)

我使用的是glMatrixMode(GL_MODELVIEW),如何防止形状从相机的视线中消失


PS:到目前为止,我只能防止不从左侧和底部退出,我在重新绘制时在坐标刷新测试y或x是否为负值(如果为负值,形状将在相同位置重新绘制),但是我找不到一种方法来处理窗口的右边缘和上边缘。

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


顺便说一句,这是学校作业吗?

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

阅读您对另一个答案的评论后,我有了一个想法。我不确定它是否合适,但它可能会有帮助

据我所知,你有一个玩家控制的飞机视图,当玩家在设定范围内移动飞机时,你确实希望飞机相对于玩家的视图移动,但你不希望它退出视图。我的假设是,当飞行器向前飞行时,整个视图都在移动(这可能是错误的)

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

你应该能够跟上飞机与中心的距离,首先知道它最初是居中的,同时也知道你对它做了什么转换。您可以更新变换矩阵,以跟上应用于飞机的移动,每次更新后,您可以计算将相机移回相机视图中心的反向操作,然后将该矩阵乘以标量1/2,并以此变换整个场景。如果你不想让相机沿着飞机的方向旋转,那么你就不需要在矩阵中加入旋转来跟上这个方向。每次更新(在我的示例中为1/2)时,您希望移动多少摄影机取决于您。我选择1/2是因为您应用的零件和为下次更新保存的零件是相同的

我已经很久没有使用openGL了,但我记得我能够从引擎中读取矩阵,但这很容易让你自己跟上


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

事实上,这是一个CG分配项目,涉及到用飞机创建游戏,我必须确保玩家的飞机不会离开屏幕。问题是,屏幕可以调整大小,所以我真的不知道如何获取这些值来进行比较(如果您有任何示例使用固定大小的窗口并将对象保留在其中,这将是一个良好的开端)我的问题在某种程度上与这个问题相似,但asnwer提供的答案并不完整(问题海报中也有说明)。除非我以错误的方式进行测试,这可能是答案,但是,我使用的是standart相机,因此,我不太确定它的剪裁限制到底是什么。您可以尝试使用glFrustum()或gluPerspective()函数设置这些属性:)您正在查找zNear和zFar剪裁平面。zNear必须大于0供参考。快乐编码!似乎这就是我的窍门(尝试了一些glFrustum),我可以找到方法来达到相机的极限。非常感谢您的回答这也是一个非常有用的提示!从来没有想过(尽管这是有道理的)。我会把这个记在我的书上