我在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区域中划线?更具体地说,我想首先在视口中绘制轴。请帮忙。
答案 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核心配置文件教程。