3

ウィンドウのサイズを変更するときに NSOpenGLView を正しくサイズ変更しようとしましたが、説明できない奇妙な動作が続いています。次のようになります。

オリジナル(最初はどのように見えるか):

リサイズ後:

これは私のサイズ変更コードです:

- (void)reshape
{
    [super reshape];

    CGLLockContext([[self openGLContext] CGLContextObj]);

    NSRect viewRectPoints = [self bounds];

#if SUPPORT_RETINA_RESOLUTION

    NSRect viewRectPixels = [self convertRectToBacking:viewRectPoints];

#else //if !SUPPORT_RETINA_RESOLUTION

    NSRect viewRectPixels = viewRectPoints;

#endif // !SUPPORT_RETINA_RESOLUTION

    [self resizeWithWidth:viewRectPixels.size.width
                  AndHeight:viewRectPixels.size.height];

    CGLUnlockContext([[self openGLContext] CGLContextObj]);
}

- (void) resizeWithWidth:(GLuint)width AndHeight:(GLuint)height
{
    glViewport(0, 0, width, height);

    m_width = width;
    m_height = height;
}

私が使用しているのは、「glViewport(0, 0, m_width, m_height);」です。glDrawArrays() を呼び出すたびに;

誰でも助けることができますか?

4

2 に答える 2

1

ウィンドウのサイズを変更するときは、新しい寸法を反映するように射影行列も設定する必要があります。セットアップ/描画コードを投稿しませんでしたが、通常は次のようになります。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(...); // or glFrustum(), glOrtho(), gluOrtho2D(), ...
glMatrixMode(GL_MODELVIEW);
于 2015-04-04T16:39:15.647 に答える
0

NSOpenGLView真剣に、最近では、離れてCAOpenGLLayer直接移動することを検討したいかもしれません.

私はこのばかげたクラスであまりにも多くの問題を抱えてNSOpenGLViewおり、特にCAOpenGLLayerIMHO を使用すると、柔軟性と制御が向上します。
(そしてバグが少ない - NSOpenGLView10.9 以前のレイヤーでバックアップされたビュー階層で作業してみてください..)。

さらに、箱から出してすぐに、または少なくとも指先で (ビルトインCVDisplayLinkサポートのように) より多くの機能を利用できます。

ちょうど私の2c。

于 2015-08-28T18:29:21.330 に答える