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。