【发布时间】:2020-03-02 12:28:28
【问题描述】:
谁能帮我解决以下问题?
简单地说:
我有一个由 4 个顶点 {x,y,z} 定义的矩形几何体,如下所示:
double[] vertices = new double[12] { -5, 3, 0, 5, 3, 0, 5, -3, 0, -5, -3, 0 };
我用以下内容绘制矩形:
GL.VertexPointer(3, VertexPointerType.Double, 0, vertices);
GL.DrawArrays(BeginMode.LineLoop, 0, vertices.Length / 3);
我正在使用正交投影,我的视口设置代码是:
int nWidth = ClientRectangle.Width;
int nHeight = ClientRectangle.Height;
GL.Viewport(0, 0, nWidth, nHeight);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
m_orthogonalProjectionTop = 3.05;
m_orthogonalProjectionLeft = -5.05;
m_orthogonalProjectionRight = 5.05;
m_orthogonalProjectionBottom = -3.05;
GL.Ortho(m_orthogonalProjectionLeft, m_orthogonalProjectionRight, m_orthogonalProjectionBottom, m_orthogonalProjectionTop, -1, 1);
这符合我的预期。矩形几乎填满了整个渲染窗口(在下面的屏幕截图中为浅蓝色):
(我之前发帖说我无法让这个初始行为起作用,previous post,这就是为什么这个问题我看起来很熟悉,但这部分现在已经解决了)。
现在,这是我的问题:
在我的渲染代码中,而不是仅仅调用我的渲染函数:
RenderRectangle();
我改为:
GL.PushMatrix();
GL.Rotate(270, 0.0, 0.0, 1.0);
RenderRectangle();
GL.PopMatrix();
我修改了我的视口,而不是:
GL.Ortho(m_orthogonalProjectionLeft, m_orthogonalProjectionRight, m_orthogonalProjectionBottom, m_orthogonalProjectionTop, -1, 1);
我现在有:
GL.Ortho(m_orthogonalProjectionBottom, m_orthogonalProjectionTop, m_orthogonalProjectionLeft, m_orthogonalProjectionRight, -1, 1);
(所以我已经交换了视口的 x 和 y 范围)
然后我会期望我的矩形仍然几乎填满屏幕。我实际看到的是,矩形的顶部很好,它看起来就在窗口的顶部附近,左右两侧也很好,但是矩形的底部刚好在屏幕外(通过设置底部视口有点负面我可以看到它,但它的可见性随窗口大小而变化。
这是一个截图,你可以看到矩形的底部偏离了浅蓝色区域的底部:
谁能告诉我我做错了什么?
谢谢, 米奇。
【问题讨论】:
标签: c# opengl graphics opentk orthographic