Adrian Bedeau
2008-07-17 00:04:25 UTC
Hi,
I wrote a program that uses lib3ds to create a cube and write it to a 3ds
file. Each face of the cube is made up of two triangles. I could open the
file fine in some viewers but i got the error "improper file format" when
opening the file in 3ds Max. My code is below. If anyone has an idea of what
I might have done wrong, please help me out.
Thank you,
Adrian
//------------------------------------------------------------------------------------------------------------------------writer.cpp-------------------------------------
#include <lib3ds/file.h>
#include <lib3ds/camera.h>
#include <lib3ds/mesh.h>
#include <lib3ds/node.h>
#include <lib3ds/material.h>
#include <lib3ds/matrix.h>
#include <lib3ds/vector.h>
#include <lib3ds/light.h>
int _tmain(int argc, _TCHAR* argv[])
{
//create file object
Lib3dsFile * file = lib3ds_file_new();
//node
Lib3dsNode* node = lib3ds_node_new_object();
strcpy(node->name, "node0");
node->parent_id = LIB3DS_NO_PARENT;
lib3ds_file_insert_node(file, node);
//mesh
Lib3dsMesh *mesh = lib3ds_mesh_new("mesh0");
lib3ds_mesh_new_face_list(mesh, 12);
//create the face object
Lib3dsFace* face = new Lib3dsFace[12];
mesh->faces = 12;
int n = 0;
for(unsigned int i = 0; i < mesh->faces; i++)
{
face[i].points[0] = n++;
face[i].points[1] = n++;
face[i].points[2] = n++;
}
mesh->faceL = face;
lib3ds_mesh_new_point_list(mesh,36);
Lib3dsVector * vertices = new Lib3dsVector[ 3];
Lib3dsVector v1 = {0.0f, 0.0f, 0.0f};
Lib3dsVector v2 = {1.0f, 0.0f, 0.0f};
Lib3dsVector v3 = {1.0f, 0.0f, 1.0f};
Lib3dsVector v4 = {0.0f, 0.0f, 1.0f};
Lib3dsVector v5 = {0.0f, 1.0f, 0.0f};
Lib3dsVector v6 = {1.0f, 1.0f, 0.0f};
Lib3dsVector v7 = {1.0f, 1.0f, 1.0f};
Lib3dsVector v8 = {0.0f, 1.0f, 1.0f};
int pIndex = 0;
//face1
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v2, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v3, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v4, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v3, sizeof(Lib3dsVector));
//face2
memcpy(mesh->pointL[pIndex++].pos, &v5, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v6, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v5, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v8, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
//face3
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v4, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v8, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v5, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v8, sizeof(Lib3dsVector));
//face4
memcpy(mesh->pointL[pIndex++].pos, &v2, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v3, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v2, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v6, sizeof(Lib3dsVector));
//face5
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v5, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v6, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v2, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v6, sizeof(Lib3dsVector));
//face 6
memcpy(mesh->pointL[pIndex++].pos, &v4, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v8, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v4, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v3, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
lib3ds_file_insert_mesh(file, mesh);
lib3ds_file_save(file, "C:\\temp\\cube.3ds");
return 0;
}
I wrote a program that uses lib3ds to create a cube and write it to a 3ds
file. Each face of the cube is made up of two triangles. I could open the
file fine in some viewers but i got the error "improper file format" when
opening the file in 3ds Max. My code is below. If anyone has an idea of what
I might have done wrong, please help me out.
Thank you,
Adrian
//------------------------------------------------------------------------------------------------------------------------writer.cpp-------------------------------------
#include <lib3ds/file.h>
#include <lib3ds/camera.h>
#include <lib3ds/mesh.h>
#include <lib3ds/node.h>
#include <lib3ds/material.h>
#include <lib3ds/matrix.h>
#include <lib3ds/vector.h>
#include <lib3ds/light.h>
int _tmain(int argc, _TCHAR* argv[])
{
//create file object
Lib3dsFile * file = lib3ds_file_new();
//node
Lib3dsNode* node = lib3ds_node_new_object();
strcpy(node->name, "node0");
node->parent_id = LIB3DS_NO_PARENT;
lib3ds_file_insert_node(file, node);
//mesh
Lib3dsMesh *mesh = lib3ds_mesh_new("mesh0");
lib3ds_mesh_new_face_list(mesh, 12);
//create the face object
Lib3dsFace* face = new Lib3dsFace[12];
mesh->faces = 12;
int n = 0;
for(unsigned int i = 0; i < mesh->faces; i++)
{
face[i].points[0] = n++;
face[i].points[1] = n++;
face[i].points[2] = n++;
}
mesh->faceL = face;
lib3ds_mesh_new_point_list(mesh,36);
Lib3dsVector * vertices = new Lib3dsVector[ 3];
Lib3dsVector v1 = {0.0f, 0.0f, 0.0f};
Lib3dsVector v2 = {1.0f, 0.0f, 0.0f};
Lib3dsVector v3 = {1.0f, 0.0f, 1.0f};
Lib3dsVector v4 = {0.0f, 0.0f, 1.0f};
Lib3dsVector v5 = {0.0f, 1.0f, 0.0f};
Lib3dsVector v6 = {1.0f, 1.0f, 0.0f};
Lib3dsVector v7 = {1.0f, 1.0f, 1.0f};
Lib3dsVector v8 = {0.0f, 1.0f, 1.0f};
int pIndex = 0;
//face1
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v2, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v3, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v4, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v3, sizeof(Lib3dsVector));
//face2
memcpy(mesh->pointL[pIndex++].pos, &v5, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v6, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v5, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v8, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
//face3
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v4, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v8, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v5, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v8, sizeof(Lib3dsVector));
//face4
memcpy(mesh->pointL[pIndex++].pos, &v2, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v3, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v2, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v6, sizeof(Lib3dsVector));
//face5
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v5, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v6, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v1, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v2, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v6, sizeof(Lib3dsVector));
//face 6
memcpy(mesh->pointL[pIndex++].pos, &v4, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v8, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v4, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v3, sizeof(Lib3dsVector));
memcpy(mesh->pointL[pIndex++].pos, &v7, sizeof(Lib3dsVector));
lib3ds_file_insert_mesh(file, mesh);
lib3ds_file_save(file, "C:\\temp\\cube.3ds");
return 0;
}