Рисование совершенно прямых линий в OpenGLES android
Я использую 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);
Но все равно ничего не изменилось. Можете ли вы указать мне, как получить плавные прямые линии?
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());
Это должно дать вам очень хорошее сглаживание, но компромисс является ударом по производительности, хотя большинство современных устройств должно иметь возможность управлять без значительного падения.
Надеюсь это поможет.