2012-04-26 84 views
0

我有一個2007年的MacBook Pro與ATI radeon X1600顯卡。我正在嘗試使用多重採樣功能獲得抗鋸齒功能。在opengl 2.1中使用多重採樣進行抗混疊?

使用GlView,這是我手頭的資料顯示:

渲染信息是:

渲染:ATI的Radeon X1600的OpenGL EngineVendor:ATI技術Inc.Memory:128 MBVersion:2.1 ATI-7.0.52Device:MacBookPro2,2Shading語言版本:1.20

我查了擴展信息的arb_multisample和它說: 「晉升爲核心功能,在OpenGL 1.3」,它是正確的,然後假設 那在我的代碼我可以簡單地說(因爲我是基於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上下文。 – 2012-04-26 12:28:20

+0

用實際代碼更新了問題。 capi-define-interface部分是帶有opengl窗格的窗口被創建的地方。其餘部分是啓用多重採樣然後渲染網格。對不起,我沒有發佈實際的代碼,並提供了我使用lisp的事實。 – 2012-04-26 12:40:45

+0

我不知道lisp或Lispworks,但我認爲在創建OpenGL窗格時,必須將更多參數添加到配置列表中。在引擎蓋下,這一切都取決於選擇支持多重採樣的適當像素格式。這個[示例](http://www.opengl.org/wiki/Multisampling)適用於Windows,但它解釋了多重採樣如何取決於像素格式。 – 2012-04-26 13:11:16