0

我在 Gambas 中创建了一个项目,其中包含以下组件:gb.opengl 和 gb.opengl.glu。

按照 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 的调用,但这不会改变可见区域。通常,您会在应用所有所谓的标准化设备坐标 (NDC) 的变换和投影后得到。这些坐标范围从 [-1,-1,-1] 到 [1,1,1]。在这个空间中,现在发生裁剪并丢弃有效范围之外的所有内容。视口变换现在应用于 NDC 以获得最终的像素坐标。

在您的情况下,您可以做两件事:您可以在 NDC 中指定您的线(每个轴上为-1 - 1),或者您可以使用正交投影

另一个一般性评论:如果对使用的 OpenGL 版本没有限制,则绝对不应再使用固定功能管道(使用 glBegin/... 绘图),因为不推荐使用此方法。您可能想查找 OpenGL > 3.2 Core Profile 教程。

于 2014-12-13T11:25:49.487 回答