qq_33317253
子丑乙卯
2017-07-16 03:16
采纳率: 11.1%
浏览 2.1k
已采纳

opengl 可以导出画的三维图形吗

我在opengl中画了一个三维机翼,想要将这个图形导出来,在CAD中二次加工,请问应该怎么做

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • qq_28249373
    shifenglv 2017-07-17 11:19
    已采纳

    关于assimp,我也是在向opengl导入模型的时候用,我没有用过它的导出功能,所以也不知道怎么用。不过,如果你要用于CAD等3D绘图软件进行浏览,你可将数据保存为STL格式的文件。这个STL文件你自己就可以写,很简单的,百度一下STL文件的文件结构,自己用C语言写一个STL文件,也不用花多少代码。而且这个STL文件可以被大多数3D软件打开,比如Solidwork。我之前也是这么做的。我也写了一些简单的源码,你可以看看。

    点赞 评论
  • qq_28249373
    shifenglv 2017-07-16 12:27

    OpenGL本身没有提供导出为其他格式的文件。要导出数据,要用到第三方的库,比如Assimp这个库,就具有将三维模型导入到OpenGL程序中,也可以从OpenGL将三维图形导出为obj格式、stl格式等好几种格式的文件。具体你可以查一下Assimp这个库的用法。

    点赞 评论
  • qq_28249373
    shifenglv 2017-07-17 11:23

    生成STL文件的代码。文件结构很简单,代码也是很短的。关于STL方面的问题,你可以问我。

     #include<stdio.h>
    
    //文件头,共84字节
    struct Head
    {
        char fileName[80];
        int  faceNum;
    };
    
    //点,三个float类型的,大小为12字节
    struct Point
    {
        float x;
        float y;
        float z;
    };
    
    //法线
    struct Normal
    {
        float i;
        float j;
        float k;
    };
    
    //三角面,由一个法线,三个点,和一个两字节的保留项,一共50字节
    struct Face
    {
         Normal normal;
         Point  p1;
         Point  p2;
         Point  p3;
         char  info[2];
    };
    
    int main()
    {
        Head head;
        printf("请输入零件名:");
        gets_s(head.fileName);
        head.faceNum = 4;//三角面的数目为四
        Face face1,face2,face3,face4;//四个面
    
        face1.normal = { 0,1,0 };
        face1.p1 = { 0,0,0 };
        face1.p2 = { 0,0,-100 };
        face1.p3 = { 100,0,0 };
        face1.info[0] = 0;
        face1.info[1] = 0;
    
        face2.normal = { -1,0,0 };
        face2.p1 = { 0,0,0 };
        face2.p2 = { 0,100,0 };
        face2.p3 = { 0,0,-100 };
        face2.info[0] = 0;
        face2.info[1] = 0;
    
        face3.normal = { 0,0,1 };
        face3.p1 = { 0,0,0 };
        face3.p2 = { 100,0,0 };
        face3.p3 = { 0,100,0 };
        face3.info[0] = 0;
        face3.info[1] = 0;
    
        face4.normal = { 1,1,-1 };
        face4.p1 = { 0,100,0 };
        face4.p2 = { 100,0,0 };
        face4.p3 = { 0,0,-100 };
        face4.info[0] = 0;
        face4.info[1] = 0;
    
        FILE *fp;
        errno_t err;
    
        err = fopen_s(&fp, "myStl.stl", "wb");
    
        if (err == 0)
        {
            fwrite(&head,84, 1, fp);
            fwrite(&face1, 50, 1, fp);
            fwrite(&face2, 50, 1, fp);
            fwrite(&face3, 50, 1, fp);
            fwrite(&face4, 50, 1, fp);
            printf("生成文件成功!");
            fclose(fp);
        }
        else
        {
            printf("无法创建文件");
        }
        return 0;
    }
    
    点赞 评论

相关推荐