Мое java-приложение использует jogl для создания поверхностей с наложенной сеткой.Линии сетки сглаживаются.Однако в Windows сглаживание является полным мусором, если я не добавлю небольшое альфа-значение на поверхность.Вот скриншоты одной и той же сцены на всех трех платформах:
Mac OS X:
Ubuntu 11.10:
Windows 7:
Windows 7 с альфа = 0,01:
Основная процедура длясоздайте это следующим образом:
gl.glPushAttrib( GL.GL_ALL_ATTRIB_BITS );
gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPolygonOffset(1.0f, 1.0f);
drawSurface(gl);
gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPopAttrib();
gl.glDisable( GL.GL_LIGHTING );
gl.glDepthFunc(GL.GL_LEQUAL);
float[] c = {0, 0, 0, 0.5f};
gl.glColor4fv(c, 0);//the alpha here gets overridden if one is specified for the surface (which is why the Windows-with-alpha produces a darker grid)
drawGrid(gl);
gl.glDepthFunc(GL.GL_LESS);
gl.glEnable( GL.GL_LIGHTING );
Метод drawSurface () также выполняет следующие действия перед созданием полигонов для поверхности (используя примитивы GL_TRIANGLE_STRIP):
gl.glPushAttrib(GL.GL_LIGHTING_BIT);
gl.glColorMaterial(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE);
gl.glEnable(GL.GL_COLOR_MATERIAL);
DrawGrid ()Метод устанавливает сглаживание следующим образом:
gl.glEnable(GL.GL_BLEND);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL.GL_LINE_SMOOTH);
gl.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST);
Сама сетка создается с использованием GL_LINE_STRIPs
Я прочитал документацию OpenGL относительно сглаживания строки а также опробовал пример смещения многоугольника здесь .
Что касается аппаратного обеспечения, у меня установлена двойная загрузка IBM ThinkPad (64-разрядный четырехъядерный процессор) с интегрированной картой nVidia 3100M и Intel Core2 Duo iMac с ATI Radeon.Поскольку Ubuntu и Windows работают на одном и том же оборудовании, я знаю, что это не может быть аппаратной проблемой.
Я ищу предложения по улучшению сглаживания линий сетки в Windows.