從頭開始繪製乙個圓錐體

2021-06-27 15:00:43 字數 1432 閱讀 5785

opengl幫助庫glu裡有乙個物件叫做二次幾何體,可以用來給球體圓錐體建模,然而在opengles中不能使用glu庫,那麼我們只能自己寫方法替代它了,上次給球體建了模,這次應該給圓錐體建模了.

圓錐體是平面上的乙個圓以及它的所有切線和平面外一點確定的平面圍成的幾何體,圓被稱為底面,頂點被稱為尖端,定義聽上去有些複雜,那麼看圖:

嗯,懂了吧.其實它是一種特殊情況,如果尖端是乙個圓面的話那麼它就是乙個截頭圓錐體,頂面半徑為0的截頭圓錐體就是圓錐體了.

先來看下標頭檔案是怎麼定義的吧:

class cone ;
側面法線的計算方法,先取底面任意一點,求得圓心到該點的向量,然後沿著此向量把該截頭圓錐體劈開,如圖所示

然後把紅色的向量沿著它的方向平移到圓周上的點,如圖所示:

利用相似三角形即可求出紫色的法線n,具體**如下:

void cone::calculatesidenormal(float& x,float& y,float& z)
這邊的(x,y,z)就是法向量了,x和z都是圓周上那點的座標(x,z),y依靠相似三角形可以求出

接著是具體的建模**:

cone::cone(float rt,float rb,int m,float height) {

radiustop=rt;

radiusbottom=rb;

yheight=height;

vertnum=m*3*2+m*4;

topvertnum=m*3*2;

sidevertnum=m*4;

verts=new glfloat[vertnum*3];

norms=new glfloat[vertnum*3];

texcoords=new glfloat[vertnum*2];

float stepangz=pi2/m;

float angz=0.0;

int index=0;

int indexnorm=0;

int indextex=0;

for(int i=0;i和上次球體的**很像,紋理座標底面與頂面的變化程度一致以防貼圖分布不均勻.

這樣模型就建立完成了,渲染效果如下所示:

雜談與亂碼 關於從頭開始製作乙個網頁

雜談與亂碼,全是戲言。我已經有了最基本的html,css,js基礎。但都缺乏最基本的練習,屬於知道有什麼功能,每次用的時候,還要看說明手冊哪一種。但繼續死磕教材肯定長進頗慢。我想製作乙個較為成熟的網頁。靜態語言的學習已經使我學會了,要迭代式的發布產品。一開始就想要做到最好等於,一開始就做不下去。我遇...

從頭開始建立乙個簡單的神經網路

神經網路是深度學習和機器學習的乙個最基本的知識,其中有很多方面的知識,包括線性代數 概率論 導數等。如果跟著書看,不免感覺到枯燥。乙個好的方法就是一邊學習一邊自己實現,這樣更能夠加深自己的理解和印象。本 chat 結合 python 從頭開始教你建立乙個簡單的神經網路,包括神經網路基本原理,啟用函式...

沉思錄 所有一切從頭開始

業精於勤荒於嬉,行成於思毀於隨。這句話說得很有道理,一針見血的指出了我過去26年的最大失敗之處。高考報志願的時候馬馬虎虎的聽人家說這個說那個的,最後覺得自動控制這個專業名字好聽就報了上去,稀里糊塗的讀完了大學。接著大四考研受限制與本專業,覺得不需要費太多力氣就能考上研究生,於是跟隨大家一起上了。讀研...