Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
如何在OpenGL中获取物体空间坐标系中的近裁剪平面坐标_Opengl_Transformation_Clipping_Plane - Fatal编程技术网

如何在OpenGL中获取物体空间坐标系中的近裁剪平面坐标

如何在OpenGL中获取物体空间坐标系中的近裁剪平面坐标,opengl,transformation,clipping,plane,Opengl,Transformation,Clipping,Plane,我正在渲染一个有8个顶点的立方体。当我旋转或靠近立方体时,一些顶点可能会被近剪裁平面剪裁。然而,出于某种原因,在我的问题中,我需要找到立方体边缘与近剪裁平面的交点。我知道分数可能会有所不同。所以我的想法是得到近剪裁平面(可能在眼睛空间-但是如何做?)并对矩阵进行一些逆计算,以获得立方体对象空间中的坐标,然后我可以找到交点并解决我的问题。但这里的问题是: 如何获取近剪裁平面每个角的坐标?(或平面方程系数) 如何返回到对象空间 测试: 为了测试我是否能正确获得坐标,我尝试了以下方法: 我试图做的是得

我正在渲染一个有8个顶点的立方体。当我旋转或靠近立方体时,一些顶点可能会被近剪裁平面剪裁。然而,出于某种原因,在我的问题中,我需要找到立方体边缘与近剪裁平面的交点。我知道分数可能会有所不同。所以我的想法是得到近剪裁平面(可能在眼睛空间-但是如何做?)并对矩阵进行一些逆计算,以获得立方体对象空间中的坐标,然后我可以找到交点并解决我的问题。但这里的问题是:

  • 如何获取近剪裁平面每个角的坐标?(或平面方程系数)
  • 如何返回到对象空间
  • 测试:

    为了测试我是否能正确获得坐标,我尝试了以下方法: 我试图做的是得到MVM(模型视图矩阵)和PM(投影矩阵)的倒数。试着想象一下,近剪裁平面有V1=(-1,-1,-1,1),V2=(1,-1,1),V3=(1,1,-1,1)和V4=(-1,1,-1,1)坐标。所以我想如果我对四个顶点中的每一个都这样做:

    V1=IMVM*(IPM*V1)

    V2=IMVM*(IPM*V2)

    V3=IMVM*(IPM*V3)

    V4=IMVM*(IPM*V4)

    其中,IMVM是模型视图矩阵的逆,IPM是投影矩阵的逆。
    然后,当我用当前加载的矩阵渲染这四个点时(我刚刚使用了矩阵的倒数),我应该在屏幕前得到一个站立的窗台正方形,因为我的逆乘法应该被openGL当前加载的矩阵的乘法所取消。但由于某种原因,它不起作用,我尝试了转置和正常。我注意到了成为专栏主修等,但它似乎不起作用,我没有得到一个静止的suqare(代表我的近剪裁平面),而是得到一个不断移动和跳跃的平面

    看来我在这个论坛上的所有问题都将由我自己来回答!首先,经过思考,我意识到我们不需要投影矩阵的逆。我们在摄影机空间中指定点,并将它们带回对象空间,我们只需要modelview矩阵的逆矩阵

    和往常一样,我的向量矩阵乘法计算中有一个逻辑错误。当我用在线矩阵计算器再次检查时,我意识到我的第一个元素是正确的,但其余的元素是错误的。我突然想到,我将结果存储在与之相乘的同一个矩阵中,并因此改变了原始矩阵。所以我只是为结果添加了一个新的矩阵,一切都很好。基本上,我指定了一个点,然后将它乘以模型视图矩阵的倒数,得到对象空间坐标中的点