opengl實現bezier、b曲線和曲面,16個控制點的4*4bezier塊;最後可以看到茶壺teapot的實現

1、你的工程可能還不能跑起來,一般的錯誤按照網頁修改就可以了

可是還是會有個bug  。Error6error C2039: 'exit' : is not a member of '`global namespace,

解決方法,a這是編譯器的問題,有時候看人品,所以可以換一個低版本的編譯器  b直接把sstdlib中的using ::exit;直接隱掉;

                c添加#include“windows.h”中,放在這個cpp的第一行,

接着調試過去之後,就可以按照bug提示添加.h和.cpp。

教你在vc中命令行調試;打開vc,project->propreties之後;


 

在command Arguments 輸入命令行即可;

2,添加完之後,現在可以畫線了實現paint函數;

畫線的步驟,我是這樣做的,在spline裏實現畫點,在curve中實現畫直線,在對應的bspline或bezierspline中實現畫曲線;這是一個繼承關係,C++的多態性質,你知道的;當然你還可以直接在bspline或bezierspline中直接實現paint();這個過程你還要考慮在那保存點和點的數量最好在spline類裏面實現;

畫線還是比較簡單的,就是實現一個paint函數,可能你已經做出來四個控制點的曲線,那麼多個控制點的,也就簡單了

3實現Bezier曲線和BSplines曲線之間的轉換

 Q(t) = Gbezier  Bbezier   T = Gbspline  Bbspline   T

例如;bezier 轉b

這主要根據同樣的曲線,去求另外同樣曲線的控制點,這就要矩陣的運算了(T可以約去了,你知道吧,不知道看看線代)

Gbezier  bezier控制點矩陣 ;

而 Bbezier 、 Bbspline  是已經知道的;

那麼你就可以求Gbspline ( b控制點矩陣了吧)

這簡單的矩陣運算你會的

求的了控制點,畫線你會吧,1中做過了。至於>4個控制點的,自己弄去吧

3,爲了添加刪除點,接着實現moveControlPoint(...), addControlPoint(...) 和 deleteControlPoint(...)函數來完成曲線編輯器

這比較簡單,不說了

4旋轉曲面實現,這時你需要實現OutputTriangles(...),在哪裏實現,在對應的曲線,這裏你會使用到TriangleNet類

裏面的參數什麼意思呢?這個是個問題,我也糾結了,不過我糾結了,你就不用糾結了;呵呵

 _u_tess代表了旋轉的次數( -revolution_tessellation) ; _v_tess,旋轉面的分割的個數(-curve_tessellation <n>,這裏-curve_tessellation <n>的值可以直接使用嗎?當然是不可以的,你要思考,算了我告訴你吧;比如是bezier,7個點控制的,那樣就可以畫2條bezier曲線,如果-curve_tessellation <n>=4,那樣 _v_tess= ((7/4)+1)*4;你懂了吧)

5實現4*4的Bezier塊,這個有了第四步的經驗你就很好做了,先給你個公式;

  

 

公式都給了,會求點了吧

P代表了控制點,有了這個公式u、v都是從0到1變化的,怎麼變和-patch_tessellation <n>有關的,假如-patch_tessellation <n>=4,那就是bezier分爲4段,就是要5個點,這樣就會計算出25個點了。

這些工作都做完了,好了你就可以看到teapot了,這是mit,圖形學作業8。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章