【问题标题】:How to set OpenGL Orthographic Projection to fill screen with a rectangle when rotated如何设置OpenGL正交投影以在旋转时用矩形填充屏幕
【发布时间】: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


    【解决方案1】:

    想发帖,这样没有人会在我身上浪费任何时间!我已经解决了。上面的代码运行良好。问题是进行渲染的窗口位置正确,但高度不正确,太大,因此窗口的实际底部(浅蓝色区域)位于主应用程序窗口之外。

    谢谢, 米奇。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多