gpt4 book ai didi

c - 如何变换 glOrtho 剪裁平面?

转载 作者:行者123 更新时间:2023-11-30 17:05:49 24 4
gpt4 key购买 nike

我创建了一个 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)(必须标准化)。正如我在您的问题下面的评论中提到的,您正在 View 方向的右上角绘制一个立方体。因此,两个点 (0.25, 0.25, 0.6)(相机位置)以及由相机位置和您的 View 方向定义的点、您的向上 vector 和您的向右 vector (看看 this )定义了屏幕上显示的东西(两个点定义立方体内的对角线)。不幸的是,您的所有点都不在这个立方体内。

您可能混淆了相机位置和您想要查看的点吗?更改两个值应该可以解决您的问题。您的其余代码似乎是正确的。您唯一要做的就是检查您的点是否在投影的剪辑空间内。检查您的点在哪里的另一种解决方案是使用,例如键盘输入,动态移动相机。

关于c - 如何变换 glOrtho 剪裁平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35058528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com