请问,怎么自动建立三维管线模型
请教,如何自动建立三维管线模型?
当给定管线的起始点坐标,中间的弯曲点坐标,弯曲角度、终点坐标等参数,能够生成一个三角面组成的三维管道模型。
D3D里只提供了圆柱形,不能设置弯曲点,U型管等。
如果有相关计算算法提供最好,非常感谢!
------解决方案--------------------
不知道OpenGL的代码能不能看懂……
这里有freeglut源代码的一部分,讲述的是画圆柱形。
当给定管线的起始点坐标,中间的弯曲点坐标,弯曲角度、终点坐标等参数,能够生成一个三角面组成的三维管道模型。
D3D里只提供了圆柱形,不能设置弯曲点,U型管等。
如果有相关计算算法提供最好,非常感谢!
------解决方案--------------------
不知道OpenGL的代码能不能看懂……
这里有freeglut源代码的一部分,讲述的是画圆柱形。
/*
* Draws a solid cylinder
*/
void FGAPIENTRY glutSolidCylinder(GLdouble radius, GLdouble height, GLint slices, GLint stacks)
{
int i,j;
/* Step in z and radius as stacks are drawn. */
double z0,z1;
const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
/* Pre-computed circle */
double *sint,*cost;
FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidCylinder" );
fghCircleTable(&sint,&cost,-slices);
/* Cover the base and top */
glBegin(GL_TRIANGLE_FAN);
glNormal3d(0.0, 0.0, -1.0 );
glVertex3d(0.0, 0.0, 0.0 );
for (j=0; j<=slices; j++)
glVertex3d(cost[j]*radius, sint[j]*radius, 0.0);
glEnd();
glBegin(GL_TRIANGLE_FAN);
glNormal3d(0.0, 0.0, 1.0 );
glVertex3d(0.0, 0.0, height);
for (j=slices; j>=0; j--)
glVertex3d(cost[j]*radius, sint[j]*radius, height);
glEnd();
/* Do the stacks */
z0 = 0.0;
z1 = zStep;
for (i=1; i<=stacks; i++)
{
if (i==stacks)
z1 = height;
glBegin(GL_QUAD_STRIP);
for (j=0; j<=slices; j++ )
{
glNormal3d(cost[j], sint[j], 0.0 );
glVertex3d(cost[j]*radius, sint[j]*radius, z0 );
glVertex3d(cost[j]*radius, sint[j]*radius, z1 );
}
glEnd();
z0 = z1; z1 += zStep;
}
/* Release sin and cos tables */
free(sint);
free(cost);
}