我想創建三次貝塞爾補丁時遇到的一點點麻煩搞清楚我搞亂了計算。我在一個2D數組中有16個控制點,我希望網格有400個點,每個點以.05爲增量分隔。三次Bezier實施
控制點以20爲增量(所以P0,0在(0,0,0)和P3,3是在(60,0,60)。該網格將是在xz平面上與Ÿ眼下協調所有0
我有給出了x和z相同的值上的每一個點的情況如下:
float Bezier3(int j, float k)
{
switch(j) {
case 0:
return (1 - k) * (1 - k) * (1 - k);
break;
case 1:
return 3*k*((1 - k) * (1 - k));
break;
case 2:
return 3 * (k * k) * (1 - k);
break;
case 3:
return k * k * k;
break;
}
}
void CalcBezier()
{
float u;
float v;
for (int i = 0; i < 20; i++) {
u = 0;
v = 0;
for (int j = 0; j < 20; j++) {
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
grid[i][j].x += control[x][y].x * Bezier3(x, u) * Bezier3(y, v);
grid[i][j].y += control[x][y].y * Bezier3(x, u) * Bezier3(y, v);
grid[i][j].z += control[x][y].z * Bezier3(x, u) * Bezier3(y, v);
}
}
u+=.05;
v+=.05;
}
}
}
我並不確切知道我要去的地方錯了,我想。走縱列通過網格和計算每個貝塞爾點。
我也試圖提取所得網作爲一個三角形網格:
void bezier_plane()
{
CalcBezier();
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(grid[i][j].x, grid[i][j].y, grid[i][j].z);
glVertex3f(grid[i][j+1].x, grid[i][j+1].y, grid[i][j+1].z);
glVertex3f(grid[i+1][j].x, grid[i+1][j].y, grid[i+1][j].z);
glVertex3f(grid[i+1][j+1].x, grid[i+1][j+1].y, grid[i+1][j+1].z);
glEnd();
}
}
}
情況下2不會返回它的值在'Bezier3' – 2013-04-23 18:48:08
對不起這是一個錯字。編輯修復它。 – Kinru 2013-04-23 18:49:13
您是否在此函數之外清除了網格零點? – 2013-04-23 18:57:58