three.js中的webgl_lines_sphere例子使用線段渲染出3d球體,效果十分有趣。
渲染過程比較簡單,先構造出單位球體上(unit sphere)的點,隨後將點再對應半徑上隨機伸縮座標,每個半徑上相鄰的這兩個點構成線段,為線段指定色彩後即可渲染出基本的lines sphere(線段球體)。
這裡,我們模仿webgl_lines_sphere例子,使用c++和opengl es 3.0獲得了如下的渲染效果,ios版本實現原始碼可以從github上獲取。
這一過程的關鍵在於使用線段代替頂點形成球形幾何體資料。首先,我們使用隨機數分別產生範圍為[-1..1]的
vectorcreatelinesspheregeometry(float r)
return vertices;
}
webgl_lines_sphere例子中進行了多重(9層)球體繪製,並且讓內層的球體隨時間縮放變換,同時進行逆時針旋轉,外側的球體則只進行順時針旋轉。還有,內外側球體的色彩和透明度也進行對應的設定。整體的展示效果比較有趣。部分**如下:
struct renderingparameter;
//球體的初始大小,色彩和透明度資訊
vectorparameters = , , , , ,
, , , };
//球體的初始化過程**
shared_ptrgeometry;
vectorlinespherevertices = createlinesspheregeometry(300.0);
geometry.reset(new geometry(&linespherevertices[0],(int)linespherevertices.size()));
maincamera.reset(new perspectivecamera());
maincamera->updateporjectonmatrix();
cvec3 translationvec = cvec3(0,0,-550);
for(size_t i=0;ils = make_shared(linesspheremodel(geometry,******shaderstate));
renderingparameter para=parameters[i];
//每個球體的初始大小
ls->scale = cvec3(para.scale,para.scale,para.scale);
originalscale[i]=para.scale;
ls->position = translationvec;
//每個球體的色彩
cvec3 lcolor = hexstringtorgb(para.color);
ls->linecolor = lcolor;
//每個球體的初始選擇角度(圍繞y軸)
float angley = rand()/(rand_max/180.0);
ls->rotation = cvec3(0,angley,0);
lsmodels.push_back(ls);
}//每次繪製時球體的運動設定
//全域性變數,在每幀繪製時增加固定數量
delta+=0.1;
for(int i=0;ilsmodel = lsmodels[i];
//設定內外圈球體的旋轉角度
int factor = i<4?(i+1):-(i+1);
long rotationy = delta*(factor);
lsmodel->rotation = cvec3(0,rotationy,0);
//對內圈球體在特定範圍內以正弦方式迴圈縮放
if (i < 5)
lsmodel->setperspectivecamera(maincamera);
lsmodel->updatematrixworld();
lsmodel->render();
}
已知線段上某點與起點的距離,求該點的座標
目錄在實際進行空間幾何計算的時候,很難確定直線的方向向量,一般都是知道線段的起點 o 和終點 e 那麼顯然方向向量為 d e o 這時,根據射線的向量方程,線段上某一點p為 p o td t frac 其中mod d 是向量的模,也就是線段的長度。具體的c 實現 如下 include using n...
求座標軸上的點與點之間的距離
定義一種型別 point,用於描述座標軸上的點。共同特徵 橫座標x,縱座標y 求當前點到原點 0,0 的距離?計算當前點到p1點的距離?返回兩點間p1,p2的距離?public class point public point int a public point int x,int y 返回當前點...
C 實現座標軸及其上的點。
公司在用devexpress包,為了實現乙個類似座標的圖表,發現用devexpress比較困難,首先,其x y軸的大小是自動的,如何設定成固定值,必須在 設計時 而 執行時 無法更改。搞了很長一段時間都沒實現,無奈之下,自己畫乙個。實現起來還是挺難的,首先對座標值的計算,允許小於1和特別大的值,這時...