2014-12-13 110 views
0

我已经在Gambas中创建了一个包含组件gb.opengl和gb.opengl.glu的项目。如何在Gambas3中使用opengl绘制一条线

以下讷河教程,我有以下代码:(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区域中删除行?更具体地说,我想先在视口中绘制轴。请帮忙。

回答

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核心配置文件教程。

+0

嗨,谢谢你的答案。我试着改变线坐标到[1/2,0,0]到[-1/2,-1/2,0],但这不起作用。我没有看到一种方法来将投影改为GB3中的正字法,无论是通过检查元素还是维基。你能告诉我该怎么做吗? – Sean 2014-12-13 14:43:58