我现在正在为2D设置正交设置,当我调整窗口大小时它会拉伸窗口中绘制的任何内容,是否有办法在窗口调整大小时显示黑条或至少维护内容的长宽比,所以它们根本不伸展。我已经尝试了一些我在这里看到的实现,但没有什么真正有用。
编辑:对不起,伙计们有点金发时刻 Protected Overrides Sub OnResize(ByVal e As EventArgs)
MyBase.OnResize(e)
GL.Viewport(0, 0, Width, Height)
GL.MatrixMode(MatrixMode.Projection)
GL.LoadIdentity()
GL.Ortho(-1.0, testvalue, testvalue , 1.0, 0.0, 4.0)
End Sub
此刻的测试值为5000,窗口大小为800x800
答案 0 :(得分:0)
ortho命令包括:以下参数:left,right,bottom,top,zNear,zFar进一步信息:http://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml
您需要将“宽度”插入右侧,将“高度”插入底部,并确保“宽度”和“高度”值反映新的窗口大小。
E.g:
GL.Viewport(0, 0, Width, Height)
GL.MatrixMode(MatrixMode.Projection)
GL.LoadIdentity()
GL.Ortho(0.0, Width, Height, 0.0, 1.0, 2.0)
由于你只在2D之后你的zNear和zFar可能非常小,所以只要确保在zNear和zFar之间渲染并且不要使用0.0作为你的zNear,我建议你的zNear使用0.1或更大。
答案 1 :(得分:0)
当您调整大小时,Windows会创建自己的消息泵来处理事件,绕过您的消息泵。有一些解决方法(hacks)可以在调整大小时进行渲染,包括在线程上运行更新/渲染。请注意,这是D3D和OpenGL的问题。
答案 2 :(得分:0)
我想出了我必须做的事情。我没有在Ortho部件上使用纵横比,而是在视口上使用它:
Dim ar As Single = Width/Height
GL.Viewport( 0, 0, 800 * ar, 800 * ar)
这可以防止所有拉伸,并且当宽度大于高度时,只需在右侧放置黑条。