请教,如何自动建立三维管线模型?

苏门答腊 2013-06-07 05:14:26
当给定管线的起始点坐标,中间的弯曲点坐标,弯曲角度、终点坐标等参数,能够生成一个三角面组成的三维管道模型。
D3D里只提供了圆柱形,不能设置弯曲点,U型管等。
如果有相关计算算法提供最好,非常感谢!
...全文
609 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
I'm Daniel Du 2013-07-14
  • 打赏
  • 举报
回复
引用 5 楼 zjl1234567 的回复:
我用VB做过这样的东西。画圆柱比较简单了,代码一搜一大堆。 圆柱之间的圆弧连接管段(就是管件中的弯头),是三维圆环的一部分。三维圆环可通过参数方程生成。 各个零件都会生成了,接下来就是通过平移和旋转变换按需要的方法接上就OK
牛B!
苏门答腊 2013-06-25
  • 打赏
  • 举报
回复
to jiangcaiyang123 谢谢你,画圆柱形我这边已经实现了。
苏门答腊 2013-06-24
  • 打赏
  • 举报
回复
引用 5 楼 zjl1234567 的回复:
我用VB做过这样的东西。画圆柱比较简单了,代码一搜一大堆。 圆柱之间的圆弧连接管段(就是管件中的弯头),是三维圆环的一部分。三维圆环可通过参数方程生成。 各个零件都会生成了,接下来就是通过平移和旋转变换按需要的方法接上就OK
请问,这个代码可否分享一下?或者指点我一下?另外,关于D3D的知识能否请教你呢?非常感谢!!
zjl1234567 2013-06-18
  • 打赏
  • 举报
回复
我用VB做过这样的东西。画圆柱比较简单了,代码一搜一大堆。
圆柱之间的圆弧连接管段(就是管件中的弯头),是三维圆环的一部分。三维圆环可通过参数方程生成。
各个零件都会生成了,接下来就是通过平移和旋转变换按需要的方法接上就OK

彩阳 2013-06-13
  • 打赏
  • 举报
回复
不知道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);
}
苏门答腊 2013-06-13
  • 打赏
  • 举报
回复
自己继续顶顶
芳草天 2013-06-07
  • 打赏
  • 举报
回复
自己动手丰衣足食啊。 我能想到的就是先描出轨迹,然后对轨迹进行缩放,偏移,生成围绕这个轨迹的顶点,然后把这些顶点连成面。
苏门答腊 2013-06-07
  • 打赏
  • 举报
回复
自己顶一下啊

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧