C 如何将Glorth变换为剪裁平面?

C 如何将Glorth变换为剪裁平面?,c,opengl,geometry,opentk,clipping,C,Opengl,Geometry,Opentk,Clipping,我已经创建了一个OpenGL应用程序,其中我使用glOrtho()定义了一个查看卷。然后我使用gluLookAt()来变换所有的点。 问题是——只要我这样做,所有的点都会从剪裁平面上掉下来,因为它“落在后面”。而我最终得到了一个黑屏 如何更改查看体积,使其在通过gluLookAt()转换对象后仍然紧贴对象 这里有一些代码可以帮助更好地说明我的问题: Vector3d eyePos = new Vector3d(0.25, 0.25, 0.6); Vector3d point = new Vect

我已经创建了一个OpenGL应用程序,其中我使用glOrtho()定义了一个查看卷。然后我使用gluLookAt()来变换所有的点。 问题是——只要我这样做,所有的点都会从剪裁平面上掉下来,因为它“落在后面”。而我最终得到了一个黑屏

如何更改查看体积,使其在通过gluLookAt()转换对象后仍然紧贴对象

这里有一些代码可以帮助更好地说明我的问题:

Vector3d eyePos = new Vector3d(0.25, 0.25, 0.6);
Vector3d point = new Vector3d(0, 0, 0.001);            
Vector3d up = new Vector3d(0, 1,0);            
Matrix4d mat = Matrix4d.LookAt(eyePos, point, up);

GL.Viewport(0, 0, glControl1.Width, glControl1.Height);

GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();  
GL.Ortho(0, 1, 0, 1, 0, 1);

GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();  

GL.LoadMatrix(ref mat);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.Enable(EnableCap.DepthTest);
GL.DepthMask(true);
GL.ClearDepth(1.0);
GL.Color3(Color.Yellow);
GL.Begin(PrimitiveType.Triangles);
GL.Vertex3(0.2, 0.3, 0.01);
GL.Vertex3(0, 0.600, 0.01);
GL.Vertex3(0.600, 0.600, 0.01);
GL.Color3(Color.Blue);
GL.Vertex3(0, 0.6, 0.01);
GL.Vertex3(0.2, 0.3, 0.01);
GL.Vertex3(0.7, 0.5, 0.03);
GL.Color3(Color.Red);
GL.Vertex3(0.100, 0.000, 0.01);
GL.Vertex3(0, 0.0, 0.01);
GL.Vertex3(0.600, 0.600, 0.03);

GL.End();
glControl1.SwapBuffers();

我想对我的问题做一个更简洁的修改,那就是如何通过注视矩阵来变换两点?(“mat”在我的代码中)

好的,我明白你的问题了

将相机位置设置为(0.25,0.25,0.6),要查看视图方向的点为(-0.25,-0.25,-0.599)(必须归一化)。正如我在下面的评论中提到的,您正在视图方向的右上角绘制一个立方体。 因此,两个点(0.25,0.25,0.6)(相机位置)和由相机位置和视图方向定义的点,上方向向量和右方向向量(查看)定义屏幕上显示的物体的立方体(两个点定义立方体内的对角线)。不幸的是,您的所有点都不在此多维数据集中


也许是你把摄像机的位置和你想看的点弄混了?这两个值的更改应该可以解决您的问题。代码的其余部分似乎是正确的。唯一需要做的是检查点是否在投影的剪辑空间内。检查点位置的另一个解决方案是使用键盘输入等来动态移动相机。

看起来您需要更改相机位置(glLookAt)。也许我们可以将图像附加到更好地理解您想要的内容。@Unick-我已经添加了我正在使用的代码,如果我不加载lookat矩阵,我正在使用的坐标可以正常工作。加载lookat矩阵后,消隐平面不会随着其余坐标的变化而变化,它们都会从消隐中消失。是否可以发布一行代码,在其中使用gluLookAt()函数设置ModelViewMatrix?你用正交投影做的是在相机位置的右上角画一个立方体,沿观察方向的尺寸为1。哦,等等。我刚刚看到了顶部的线条。如果我在修改投影矩阵之前加载lookat矩阵,这些点就在观察体积内了。知道为什么吗?我不确定,但我也不知道投影矩阵的标准值。更好地了解这一点的一种可能性是安装blender并使用此参数创建场景。你可以在那里找到答案。周一,如果您需要更多帮助,我可以告诉您更多信息。将近平面设置为
0
可能会导致另一个错误。这可能会导致除零错误,并可能导致您的问题。但通常情况下,这应该只发生在透视投影中。尝试将其设置为
0.01
或类似设置,以避免此问题。