2011-01-10 137 views
1

私は最近、C#で単純なゲームにOpenTKを使用し始めました。しかし、私は多くのことを試してみましたが、ポイントのような基本的な図形を描くことはできません。それを把握していない。OpenTK(OpenGL)はほとんどのプリミティブを描画しません

私の描画ルーチンは現在、次のようになります。

public static void RenderLoop(object Sender, OpenTK.FrameEventArgs Fea) 
{ 
    OpenTK.Graphics.OpenGL.GL.Clear(OpenTK.Graphics.OpenGL.ClearBufferMask.ColorBufferBit | OpenTK.Graphics.OpenGL.ClearBufferMask.DepthBufferBit); 

    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.PointSmooth); 
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.Blend); 
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.DepthTest); 
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.CullFace); 

    OpenTK.Graphics.OpenGL.GL.Begin(OpenTK.Graphics.OpenGL.BeginMode.Points); 
    OpenTK.Graphics.OpenGL.GL.Color3(1f, 1f, 1f); 
    OpenTK.Graphics.OpenGL.GL.Vertex2(50, 50); 
    OpenTK.Graphics.OpenGL.GL.End(); 


    OpenTK.Graphics.GraphicsContext.CurrentContext.SwapBuffers(); 
} 

と初期化はこれです:私はマーカスが暗示するような問題があると思い

public static bool Init() 
    { 
     try 
     { 
      //1200,850 

      GameWnd = new GameWindow(1200, 850, new GraphicsMode(new ColorFormat(32), 0), "OpenTK - OpenGL Renderer", GameWindowFlags.Default, DisplayDevice.Default,3,0,GraphicsContextFlags.Default); 

      GL.Disable(EnableCap.DepthTest); //Disable Z-Buffer, 2D Rendering 
      GL.Disable(EnableCap.CullFace); 
      GL.Enable(EnableCap.Texture2D); 
      GL.Enable(EnableCap.Blend); 
      GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); 
      GL.PixelStore(PixelStoreParameter.UnpackAlignment, 1); 
      GL.RenderMode(RenderingMode.Render); 

      GL.MatrixMode(MatrixMode.Projection); 

      return true; 
     } 
     catch (Exception ex) 
     { 
      ErrorHandler.Err(ex, "Renderer has failed to initialize"); 
      return false; 
     } 
    } 
+0

投影行列とモデルビュー行列の設定はどのように見えますか? (あなたが持っていると仮定して) – Macke

+0

@Marcus Lindblom自分の投稿にinitコードを追加しました。 (私は2Dを私は任意の3D機能を使用するつもりはない) – Mervin

+0

なぜテクスチャを有効にしていますが、どのテクスチャ座標を渡さないのですか? – genpfault

答えて

2

。便利な何かに投影行列を設定しているわけではありません(そして、何かにモデルビュー行列を設定していない)。アイデンティティとして残す場合、(50,50)はビューウィンドウの外になります。 glOrthoとglFrustumのOpenTKマッピングを調べることをお勧めします。

ビューポートの幅が高さであるとすると、次の例では(0、0)が左上、(a、b)が右のピクセル、bのピクセルが下からそこ:

glOrthof(0, width, height, 0, 1, 10); 

それは(10の深さで遠)ビューアから1の深さでニアクリップ面を置きますが、あなたはおそらくも、初期化時にこのような何かをしたいと思います:

glMatrixMode(GL_MODELVIEW); 
glTranslatef(0.0f, 0.0f, -5.5f); 

2dで指定した今後のジオメトリをすべて正確にhalにするには2つのクリッププレーンの間を移動します。

+0

それは今、助けていただきありがとうございます! – Mervin

関連する問題