如何使用opengl在Gambas3中绘制一条线

时间:2014-12-13 08:07:47

标签: opengl gambas

我在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区域中划线?更具体地说,我想首先在视口中绘制轴。请帮忙。

1 个答案:

答案 0 :(得分:0)

您的顶点很可能在屏幕之外。如果未设置投影,则可见坐标范围为[-1,-1]至[1,1]。

也许混淆来自对gl.Viewport的调用,但这并没有改变可见区域。通常,在应用所有转换和投影后,您会得到所谓的标准化设备坐标(NDC)。这些坐标范围从[-1,-1,-1]到[1,1,1]。在这个空间中,现在剪切发生并抛弃有效范围之外的所有内容。现在,视口变换将应用于NDC以获取最终像素坐标。

在您的情况下,您可以做两件事:您可以在NDC中指定您的行(每个轴上为-1 - 1),或者您可以使用orthographic projection

另一个一般评论:如果对使用的OpenGL版本没有限制,你绝对不应该使用固定功能管道(使用glBegin / ...绘图),因为这种方法已被弃用。您可能想要寻找OpenGL> 3.2核心配置文件教程。