我在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中drAw openGl区域中的线路?更具体地说,我想从绘制视口中的轴开始。请帮帮忙。
发布于 2014-12-13 19:25:49
您的顶点很可能位于屏幕之外。如果未设置投影,则可见坐标范围为-1、-1到1,1。
也许混淆来自对gl.Viewport的调用,但这不会改变可见区域。通常,在应用所有变换和投影之后,将得到所谓的归一化设备坐标(NDC)。这些坐标的范围从-1,-1,-1到1,1,1。在这个空间中,现在发生裁剪,并丢弃有效范围之外的所有内容。现在将视口变换应用于NDC,以获得最终像素坐标。
在您的例子中,您可以做两件事:您可以在NDC中指定您的行(每个轴上为-1-1),或者您可以使用orthographic projection。
另一个通用评论:如果对使用的OpenGL版本没有限制,你绝对不应该使用固定的函数管道(用glBegin/...绘制)因为这个方法已经被弃用了。您可能需要查找OpenGL > 3.2核心配置文件教程。
https://stackoverflow.com/questions/27456831
复制相似问题