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

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

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

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

生成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;
}