js 線段上某點的座標 用線段繪製球體

2021-10-17 10:24:39 字數 2065 閱讀 3634

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和特別大的值,這時...