首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何变换glOrtho剪裁平面?

如何变换glOrtho剪裁平面?
EN

Stack Overflow用户
提问于 2016-01-28 18:13:25
回答 1查看 366关注 0票数 0

我已经创建了一个OpenGL应用程序,其中使用glOrtho()定义了一个视频量。然后我使用gluLookAt()来转换所有点。问题是,一旦我这样做了,所有的点都会从剪裁平面上掉出来,因为它被“落在后面”了。最后我看到了一块黑屏。

如何更改查看体积,使其在对象被gluLookAt()变换后仍然紧贴对象?

以下是一些代码,可以帮助更好地说明我的问题:

代码语言:javascript
代码运行次数:0
运行
复制
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();

我想对我的问题的一个更简洁的修改是如何通过lookat矩阵转换两个点?(在我的代码中是“mat”)

EN

回答 1

Stack Overflow用户

发布于 2016-01-28 22:50:30

将相机位置设置为(0.25,0.25,0.6),观察观察方向的点为(-0.25,-0.25,-0.599) (必须进行标准化)。正如我在你的问题下面的评论中提到的,你在视图方向的右上角绘制了一个立方体。所以两个点(0.25,0.25,0.6) (相机位置)和由相机位置和你的观察方向定义的点,你的上方向向量和你的右向量(看看this)定义了屏幕上显示的东西的立方体(这两个点定义了立方体内的一条对角线)。不幸的是,你所有的点都不在这个立方体内。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35058528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档