0

gb.opengl および gb.opengl.glu というコンポーネントを使用して Gambas にプロジェクトを作成しました。

NeHe チュートリアルに従って、次のコードを作成しました: (glArea1 は opegl アプリケーションのフォーム コンポーネントです)。

Public Sub GLArea1_Open()

  gl.ClearDepth(100.0)
  Gl.ClearColor(20, 40, 20, 0.70)
  Gl.DepthFunc(Gl.LESS)             ' The type of depth test to do
  Gl.Enable(Gl.DEPTH_TEST)          ' Enables depth testing

End

Public Sub GLArea1_Draw()


  gl.Clear(gl.COLOR_BUFFER_BIT Or gl.DEPTH_BUFFER_BIT)    
  ' Clear The Screen And The Depth Buffer

  gl.Viewport(0, 0, GLArea1.Width, GLArea1.Height)
  gl.MatrixMode(Gl.PROJECTION)
  gl.LoadIdentity()           'Reset The Projection Matrix

  gL.Translatef(0, GLArea1.Width / 2, 0)
  gl.LineWidth(1.0)
  gl.begin(gl.LINES)
  gl.Color3f(1.0, 1.0, 0.2)
  gl.Vertex3f(0, GLArea1.Height / 2, 0)
  gl.Vertex3f(GLArea1.Width / 2, GLArea1.Height / 2, 0)

 gl.End()


End

このコードで線が描画されると思いますが、画面は空白のままです。ソースアーカイブが添付されています: http://www.filedropper.com/glline-001tar

gambas 3 で openGl 領域に線を引くにはどうすればよいですか? より具体的には、ビューポートで軸を描画することから始めたいと思います。助けてください。

4

1 に答える 1

0

頂点はおそらく画面の外にあります。投影が設定されていない場合、可視座標範囲は [-1,-1] から [1,1] です。

混乱は gl.Viewport の呼び出しに起因する可能性がありますが、これは可視領域を変更しません。一般に、Normalized Device Coordinates (NDC) と呼ばれるすべての変換と投影を適用した後に得られます。これらの座標の範囲は [-1,-1,-1] から [1,1,1] までです。このスペースでクリッピングが発生し、有効な範囲外のものはすべて破棄されます。その後、ビューポート変換が NDC に適用され、最終的なピクセル座標が取得されます。

あなたの場合、あなたは2つのことをすることができます.NDC(各軸で-1 - 1)で線を指定するか、正投影を使用することができます.

もう 1 つの一般的なコメント: 使用する OpenGL のバージョンに制限がない場合、固定関数パイプライン (glBegin/... で描画) は使用しないでください。このメソッドは廃止されているためです。OpenGL > 3.2 Core Profile のチュートリアルを探してみてください。

于 2014-12-13T11:25:49.487 に答える