2012-04-26 2 views
0

У меня есть 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:

Неровные края отчетливо видны.

Так что мои вопросы:

  1. Это мое понимание того, что мультисэмплинг особенность ядра правильно?
  2. Нужно ли просто работать с мультисэмплингом и вызовом кода чертежа или сделать несколько шагов для работы мультисэмплинга?

ответ

3

Вы используете Cocoa NSOpenGLView? Потому что тогда вы можете просто включить мультисэмплинг в Interface Builder. В любом случае вы должны создать свой контекст визуализации специально с помощью буферов с образцами. В любом случае glEnable (GL_MULTISAMPLE) недостаточно. Чтобы получить более конкретную помощь, вам нужно указать, как вы создаете окно/представление OpenGL.

+0

Фактически я использую Lispworks с их интерфейсом ffi для opengl. Инструмент Lispworks GUI (CAPI) имеет определенную панель opengl. Поэтому из того, о чем вы упоминаете, я полагаю, что мне нужно выяснить, как создать контекст opengl с буферами выборки. –

+0

Обновлен вопрос с фактическим кодом. часть capi-define-interface - это окно, в котором создается окно с панелью opengl. остальное - это то, что позволяет мультисэмплинг, а затем рендеринг сеток. Извините, я не опубликовал фактический код и не сообщил, что я использую lisp. –

+0

Я не знаю lisp или Lispworks, но я думаю, вам придется добавить дополнительные параметры в свой список конфигурации при создании панели OpenGL. Под капотом все зависит от выбора подходящего формата пикселей, который поддерживает мультисэмплинг. Этот [пример] (http://www.opengl.org/wiki/Multisampling) предназначен для Windows, но он объясняет, как мультисэмплинг зависит от формата пикселя. –

 Смежные вопросы

  • Нет связанных вопросов^_^