我在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;
}