我正在使用Open GLES 2.0构建我的GLSurfaceView变体,我想画直线,所以我用下面的代码画线(其他所有东西都已经设置好了)
GLES20.glDrawArrays(GL_LINES,offset,no_of_coordinates)
我在上面的代码行中遇到的问题是这些行不平滑,相反,它看起来有很多中断。看起来好像是曲折的小线条排列在一起。您可以在下面看到
然后我读了此内容(https://www.codeproject.com/Articles/199525/Drawing-nearly-perfect-D-line-segments-in-OpenGL)并添加了以下代码
glHint(GL_LINES, GL_NICEST);
但是仍然没有任何改变。您能指导我如何获得平滑的直线吗?
答案 0 :(得分:1)
您需要向渲染器提供一个EGLConfigChooser
实例,并使用4xMSAA(用于抗锯齿的4个多样本)对其进行定义。
这是您的操作方式:
首先,使用所需的定义定义一个类:
class MyConfigChooser implements WLGLSurfaceView.EGLConfigChooser {
@Override
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
int attribs[] = {
EGL10.EGL_LEVEL, 0,
EGL10.EGL_RENDERABLE_TYPE, 4,
EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER,
EGL10.EGL_RED_SIZE, 8,
EGL10.EGL_GREEN_SIZE, 8,
EGL10.EGL_BLUE_SIZE, 8,
EGL10.EGL_ALPHA_SIZE, 8,
EGL10.EGL_DEPTH_SIZE, 16,
EGL10.EGL_SAMPLE_BUFFERS, 1,
EGL10.EGL_SAMPLES, 4, // This is for 4x MSAA.
EGL10.EGL_NONE
};
EGLConfig[] configs = new EGLConfig[1];
int[] configCounts = new int[1];
egl.eglChooseConfig(display, attribs, configs, 1, configCounts);
if (configCounts[0] == 0) {
Log.i("OGLES20", "Config with 4MSAA failed");
// Failed! Error handling.
return null;
} else {
Log.i("OGLES20", "Config with 4MSAA succeeded");
return configs[0];
}
}
}
接下来,在您的表面视图中,添加以下调用:
mySufaceView.setEGLConfigChooser(new MyConfigChooser());
这应该为您提供很好的抗锯齿功能,但是折衷会影响性能,尽管当今大多数设备都应该能够在不大幅下降的情况下进行管理。
希望这会有所帮助。