У меня есть Macbook от 2007 года с графической картой ATI Radeon X1600. Я пытаюсь получить сглаживание, используя функцию мультисэмплирования.Сглаживание с мультисэмплингом в opengl 2.1?
Использование GlView, это информация, которая у меня есть под рукой:
Информация рендерер:
Renderer: ATI Radeon X1600 OpenGL EngineVendor: ATI Technologies Inc.Memory: 128 MBVersion: 2,1 ATI-7.0.52Device: языковая версия MacBookPro2,2Shading: 1,20
Я проверил информацию расширения для arb_multisample, и он говорит: «Назначен основной функцией в OpenGL 1.3», это то правильно считать, что в моем коде I можно просто сказать (как я на OpenGL 2.1):
glEnable(GL_MULTISAMPLE)
В моем коде приложения, у меня есть структура данных, которая имеет следующую информацию: вершины, индексы и текстуры, которые я затем рендериться с помощью glDrawElements и т. д. Также все представляют собой треугольные сетки.
код выглядит примерно так:
(capi:define-interface stad-viewer (capi:interface)
((double-buffered-p :initform t :initarg :double-buffered-p :accessor double-
buffered-p))
(:panes
(canvas opengl:opengl-pane
:configuration (list :rgba t :depth t :depth-buffer 32 :double-buffered t)
:min-width 1440
:min-height 900
:message "Stadium demo"
:drawing-mode :quality
:reader canvas
:resize-callback 'resize-stad-canvas
:display-callback 'redisplay-stad-canvas))
(:layouts
(main capi:column-layout '(canvas)))
(:default-initargs :auto-menus NIL :title "Stadium Viewer"))
;;; enable multisampling
(opengl:gl-enable opengl:*gl-multisample*)
(opengl:gl-sample-coverage 0.70 opengl:*gl-false*)
;;; some more opengl commands....
;;; rendering meshes
(dolist (wfmesh *wfmeshes*)
(format t " ------ PREPARING MESH ---- ~A ~% " (mesh-name wfmesh))
(multiple-value-bind (vertices indices)
(prepare-mesh wfmesh)
(let* ((gl-vertices (gl-vertexes vertices))
(gl-indices (gl-indexes indices)))
(if *texture-ids*
(multiple-value-bind (texture-id found)
(gethash (mesh-name wfmesh) *texture-ids*)
(when found
(opengl:gl-bind-texture opengl:*gl-texture-2d* texture-id)
(opengl:gl-tex-coord-pointer 2 opengl:*gl-float* 0
(gl-texels (mesh-vertices wfmesh)
1.0 t)))))
(opengl:gl-vertex-pointer 3 opengl:*gl-float* 0 gl-vertices)
(opengl:gl-draw-elements opengl:*gl-triangles*
(length indices)
opengl:*gl-unsigned-int*
gl-indices))))
Кроме того, я позволил мультисамплинг, как указано выше. However this is what I get:
Неровные края отчетливо видны.
Так что мои вопросы:
- Это мое понимание того, что мультисэмплинг особенность ядра правильно?
- Нужно ли просто работать с мультисэмплингом и вызовом кода чертежа или сделать несколько шагов для работы мультисэмплинга?
Фактически я использую Lispworks с их интерфейсом ffi для opengl. Инструмент Lispworks GUI (CAPI) имеет определенную панель opengl. Поэтому из того, о чем вы упоминаете, я полагаю, что мне нужно выяснить, как создать контекст opengl с буферами выборки. –
Обновлен вопрос с фактическим кодом. часть capi-define-interface - это окно, в котором создается окно с панелью opengl. остальное - это то, что позволяет мультисэмплинг, а затем рендеринг сеток. Извините, я не опубликовал фактический код и не сообщил, что я использую lisp. –
Я не знаю lisp или Lispworks, но я думаю, вам придется добавить дополнительные параметры в свой список конфигурации при создании панели OpenGL. Под капотом все зависит от выбора подходящего формата пикселей, который поддерживает мультисэмплинг. Этот [пример] (http://www.opengl.org/wiki/Multisampling) предназначен для Windows, но он объясняет, как мультисэмплинг зависит от формата пикселя. –