ODEè¬åº§22ïŒODEã§ããªãŽã³ãç°¡åã«è¡šç€ºããæ¹æ³

Archive3D.netããããŠã³ããŒããã3DSãã©ãŒãããã®ãããã¡ããããlib3dsã©ã€ãã©ãªã䜿ãããšã§ODEä»å±ã®drawstuffã§è¡šç€ºã§ããŸããã
æ©ããã®ã§ããïŒïŒæã§ããã忥ç ç©¶ã修士ç ç©¶ã«åãçµãã§ããæ¹ã¯ãå°»ã«ç«ãçãããã§ã¯ãªãã§ããããã
ããŠãODE (Open Dynamics EngineïŒè¬åº§ã®22åç®ã§ããODEã«ä»å±ããŠããïŒæ¬¡å ã°ã©ãã£ã¯ã¹ã©ã€ãã©ãªdrawstuffã§ã¯ïŒDã¢ãã«ã®ãã¡ã€ã«ãèªã¿èŸŒã¿ãŸãããã²ã³ãã®ããã¯Xãã¡ã€ã«ïŒãã®è¬ãè¬ãåŒã¶TVçªçµã§ã¯ãããŸãããæãæè¿ã¯Prison Breakã«å€¢äžã§ãã…ïŒãèªã¿èŸŒãX FileãLoaderãå ¬éããŠããŸãã ããã§ã¯ããäžã€ã®æšæºçãª3Dãã¡ã€ã«ã§ãã3DSãèªã¿èŸŒããµã³ãã«ããã°ã©ã ããã¹ãå ¬éããŸãã
3dsãã¡ã€ã«ãèªã¿èŸŒãã©ã€ãã©ãªãšããŠlib3dsã䜿ããŸããããã¯Jan Eric Kyprianidisãããéçºãããã®ã§LGPLã§å ¬éãããŠããŸããlib3dsã®ãŠã§ããµã€ãã¯ããã§ãã
ãŸããlib3dsãã€ã³ã¹ããŒã«ããŸããããæ¹æ³ã¯ODEãšåã㧠以äžã®èŠé ã§ããMSYS+MinGW+Windows Vistaç°å¢ã§åé¡ãªãã§ããŸããã
- ./configure
- make
- make install
åŸã¯ããã®ode3dsloader-0.0.tgzãã¡ã€ã«ã次ã®ãªã³ã¯ããããŠã³ããŒãããŠã
- 3DS Loader for Open Dynamics Engine 0.0 (2007-11-1)
ä»ãŸã§ã®ãµã³ãã«ããã°ã©ã ãšåãããã«å±éããmakeãå®è¡ããŠãã ããããã ãããã®ããã°ã©ã ã¯å®å šã§ã¯ãªããè€æ°ã®éšåã§æ§æãããã¢ãã«ã衚瀺ããããšãããšãšã©ãŒã«ãªããŸãããŸãããã¯ã¹ãã£ã衚瀺ã§ããŸããããã®ããã«ã¯drawstuffã®ãœãŒã¹ã倿Žããªããã°ãªããŸãããä»åŸã®å®¿é¡ãšããŸãã
ãªãã3dsãã¡ã€ã«ã衚瀺ããããã«ã¯ããã®ãã¡ã€ã«ãå¿ èŠã«ãªããŸããäžå³ã®ããã¡ããã¯Archive3D.netã®ããããããŠã³ããŒãããŸããã
以äžã«ãœãŒã¹ã³ãŒãã®äž»èŠéšåãæ²èŒããŸãã3dsãã¡ã€ã«ãèªã¿èŸŒã颿°ãload3dsModel()ã§ããèªã¿èŸŒã¿ãçµãããšé ç¹é åVertices[]ãšã€ã³ããã¯ã¹é åIndices[]ã«ããŒã¿ãæ ŒçŽãããã®ã§ãåŸã¯ODEä»å±ã®demoããã°ã©ã demo_moving_trimesh.cppãšåãããã«ããã°ã©ã ãããšããªãŽã³ããŒã¿ãæ±ãããšãã§ããŸãã
ã€ãŸããäžè¬ãŠãŒã¶ã¯load3dsModel()ãäžè¡å ¥ããã ãã§3dsãã¡ã€ã«ãèªã¿èŸŒãããšãã§ããŸããç°¡åã§ããã
ãŸã ããã¹ãå ¬éäžã§äžå®å šã§ããè€æ°ã®ãªããžã§ã¯ãã§æ§æããã3dsããŒã¿ã衚瀺ã§ããªããã°ãªããŸãããã³ã¡ã³ãé ããã°ãããããã§ãã
[code]
// main.cppããæç² by Kosei Demura 2007-11-1
//
#include
#include
#include "ode3dsloader.h"
extern int MeshCount;ã// ãªããžã§ã¯ãæ°
void makeModel()
{
static dReal weight = 10.0;
dReal x0 = 0, y0 = 0, z0 = 1.0;
dMass m;
// 3dsãã¡ã€ã«ãããŒããã颿°ãåŒæ°ã¯3dsãã¡ã€ã«å
load3dsModel("../models/rabbit.3DS");
TriData = (dTriMeshDataID *) malloc(MeshCount * sizeof(dTriMeshDataID));
model = (MyObject *) malloc (MeshCount * sizeof(MyObject));
for (int i = 0; i < MeshCount; i++) {
// rigid body
model[i].body = dBodyCreate(world);
dBodySetPosition(model[i].body, x0, y0, z0);
// for a trimesh object
TriData[i] = dGeomTriMeshDataCreate();
dGeomTriMeshDataBuildSingle(TriData[i], trimesh[i].vertices, 3 * sizeof(float), trimesh[i].vertexCount, trimesh[i].indices, trimesh[i].indexCount * 3, 3 * sizeof(int));
model[i].geom = dCreateTriMesh(space, TriData[i], 0, 0, 0);
// remember the meshâs dTriMeshDataID on its userdata for convenience.
dGeomSetData(model[i].geom, TriData[i]);
dMassSetTrimeshTotal(&m, weight, model[i].geom);
dGeomSetPosition(model[i].geom, -m.c[0], -m.c[1], -m.c[2]);
dMassTranslate(&m, -m.c[0], -m.c[1], -m.c[2]);
dGeomSetBody(model[i].geom, model[i].body);
dBodySetMass(model[i].body, &m);
dMatrix3 Rotation;
dRFromAxisAndAngle(Rotation, 0, 0, 1, -M_PI/4);
dBodySetRotation(model[i].body, Rotation);
}
}
[/code]
[code]
// ode3dsloader.cpp by Kosei Demura 2007-11-01
// 3dsãã©ãŒãããã§äœããããªããžã§ã¯ããèªã¿èŸŒãããã°ã©ã
// ãã®ãã¡ã€ã«ã§load3dsModel()颿°ãå®è£
ããŠããã
// TodoïŒïŒã€ã®3Dã¢ãã«ãè€æ°ã®ãªããžã§ã¯ãã§æ§æãããŠãããšãšã©ãŒã«ãªãã
// lib3dsã©ã€ãã©ãªãå¿
èŠhttp://lib3ds.sourceforge.net/
#include "ode3dsloader.h"
#define BASE_LENGTH 1.0 // ã¡ãã·ã¥ã¢ãã«ã®ããŠã³ãã£ã³ã°ããã¯ã¹ã®æå€§é·ã[m]
#define MAX_OBJECTS 1000 // ãªããžã§ã¯ãã®æ°
typedef struct
{
float *vertices;
unsigned int vertexCount;
int *indices;
unsigned int indexCount;
} MyTrimesh;
extern MyTrimesh *trimesh;
dReal MIN_X = dInfinity, MAX_X = - dInfinity;
dReal MIN_Y = dInfinity, MAX_Y = - dInfinity;
dReal MIN_Z = dInfinity, MAX_Z = - dInfinity;
dReal ADJUST;
Lib3dsFile *file=0;
int MeshCount = 0;
int vCount[MAX_OBJECTS], iCount[MAX_OBJECTS];
void calModel(Lib3dsMesh *mesh, int *points, int *faces)
{
*points = mesh->points;
*faces = mesh->faces;
}
int meshDump(int no, Lib3dsMesh *mesh)
{
if (mesh->points == 0) return 0;
for (int i=0; i< (int) mesh->points; i++) {
trimesh[no].vertices[3*i] = mesh->pointL[i].pos[0];
trimesh[no].vertices[3*i+1] = mesh->pointL[i].pos[1];
trimesh[no].vertices[3*i+2] = mesh->pointL[i].pos[2];
if (MIN_X > mesh->pointL[i].pos[0]) MIN_X = mesh->pointL[i].pos[0];
if (MIN_Y > mesh->pointL[i].pos[1]) MIN_Y = mesh->pointL[i].pos[1];
if (MIN_Z > mesh->pointL[i].pos[2]) MIN_Z = mesh->pointL[i].pos[2];
if (MAX_X < mesh->pointL[i].pos[0]) MAX_X = mesh->pointL[i].pos[0];
if (MAX_Y < mesh->pointL[i].pos[1]) MAX_Y = mesh->pointL[i].pos[1];
if (MAX_Z < mesh->pointL[i].pos[2]) MAX_Z = mesh->pointL[i].pos[2];
}
for (int i=0; i< (int) mesh->faces; i++) {
trimesh[no].indices[3*i] = mesh->faceL[i].points[0];
trimesh[no].indices[3*i+1] = mesh->faceL[i].points[1];
trimesh[no].indices[3*i+2] = mesh->faceL[i].points[2];
}
return 1;
}
// ãã©ã€ã¡ãã·ã¥ããŒã¿ã®ãµã€ãºå€æŽ
int normalize(int no, Lib3dsMesh *mesh)
{
if (mesh->points == 0) return 0;
for (int i=0; i< (int) mesh->points; i++) {
trimesh[no].vertices[3*i] ã*= (dReal) ADJUST;
trimesh[no].vertices[3*i+1] *= (dReal) ADJUST;
trimesh[no].vertices[3*i+2] *= (dReal) ADJUST;
}
return 1;
}
void load3dsModel(const char *filename)
{
int points, faces, no;
Lib3dsMesh *p;
file = lib3ds_file_load(filename);
if (!file) {
puts("3dsplayer: Error: Loading 3DS file failed.\n");
exit(1);
}
for (p=file->meshes; p!=0; p=p->next) {
calModel(p, &points, &faces);
if (points == 0) continue;
MeshCount++;
}
trimesh = (MyTrimesh *) malloc(MeshCount * sizeof(MyTrimesh));
no = 0;
for (p=file->meshes; p!=0; p=p->next) {
calModel(p, &points, &faces);
if (points == 0) continue;
vCount[no] = points;
iCount[no] = faces;
trimesh[no].vertices = (float *) malloc(vCount[no] * sizeof(float) * 3);
trimesh[no].indices = (int *) malloc(iCount[no] * sizeof(int) * 3);
trimesh[no].vertexCount = vCount[no];
trimesh[no].indexCount = iCount[no];
no++;
}
no = 0;
for (p=file->meshes; p!=0; p=p->next) {
if (meshDump(no, p)) no++;
}
dReal maxLength;
if (MAX_X - MIN_X >= MAX_Y - MIN_Y) {
if (MAX_X - MIN_X >= MAX_Z - MIN_Z) maxLength = MAX_X - MIN_X;
else maxLength = MAX_Z - MIN_Z;
}
else {
if (MAX_Y - MIN_Y >= MAX_Z - MIN_Z) maxLength = MAX_Y - MIN_Y;
else maxLength = MAX_Z - MIN_Z;
}
ADJUST = BASE_LENGTH / maxLength;
no = 0;
for (p=file->meshes; p!=0; p=p->next) {
if (normalize(no, p)) no++;
}
}
[/code]
[code]
// ode3dsloader.h
#include
#include
// for lib3ds
#include #include #include #include #include #include #include #include #include
void load3dsModel(const char *filename);
[/code]
ç¶ã…
koboããïŒ
ãã¹ããããã®ã§ïŒãããã®3dsãã¡ã€ã«ãç§ã«éã£ãŠé ããŸãããïŒ
ã¡ãŒã«ã¢ãã¬ã¹ã¯Profileã«ããŽãªã«ãããŸãïŒ
ã§ã
koboããïŒ
ã³ã¡ã³ãããããšãããããŸãïŒ
çŸåšïŒããã«ãããžã£ãã³ãªãŒãã³ã§åã蟌ãã§ããŸãïŒåçã¯ãŽãŒã«ãŠã£ãŒã¯æãã«ãªããšæããŸãïŒ
ãã¿ãŸããïŒ
ã§ã
æ¬ãè²·ããéåžžã«è峿·±ããå匷ãããŠé ããŠãããŸãã
3DSã®ãã¡ã€ã«ãèªã¿ãã§è¡šç€ºãããããšããŠãããŸãããããŸããããŸããã
lib3dsã®ã©ã€ãã©ãªã䜿ãããšããŠããŸãã
ã©ã€ãã©ãªã®çµã¿èŸŒã¿ãããµã³ãã«ã®ããã°ã©ã ã¯ããŸããã£ãã®ã§ããã
å ¬éãããŠããode3dsloader-0.0.tgzãã¡ã€ã«ã ãšãããããèªã¿èŸŒããŸããã
ã©ããããããã®ãïŒæããŠé ããªãã§ããããïŒïŒ
çç¶ãšããŠã¯ã
ode3dsloader.cppãã®ä»¥äžã®å Žæã§
84è¡ç®
for (p=file->meshes; p!=0; p=p->next) {
calModel(p, &points, &faces);
if (points == 0) continue;
MeshCount++;
}
file->meshesã0ã«ãªããMeshCountã®ã«ãŠã³ãã¢ããã0ã§
é²ãã§ããªãããã§ãã
ãã¡ã€ã«ã®èªã¿èŸŒã¿ã¯ã
puts(“3dsplayer: Error: Loading 3DS file failed.\n”);
ã«ã¯ãªããªãã®ã§ãèªã¿èŸŒããŠãããšæãããŸãã
ãæå°é ããã°å¹žãã§ãã
lib3ds-examples.tgzã詊ããŠã¿ãŸãããäžèšã®ãšãããšãªã£ãŠããŸããŸãããmsysã®ãããããã®ãã£ã¬ã¯ããªæ§æãšäž»èŠã©ã€ãã©ãªã®ã¡ã¢æžãããã£ããã¡ãŒã«ã«æ·»ä»ããŠããã ããŸãã§ãããã?
$ make
g++ -Wall -fno-exceptions -fno-rtti -g -DWIN32 -c 3dsplay.c -L/lib -L/usr/lib -L../lib -L../../drawstuff/src -L/usr/local/lib -I/include -I/usr/include -I../include -I. -I../../include -I/usr/local/include
In file included from ../../include/lib3ds/types.h:51,
from ../../include/lib3ds/background.h:27,
from ../../include/lib3ds/file.h:27,
from 3dsplay.c:27:
../include/stdint.h:24:20: stddef.h: No such file or directory
In file included from ../../include/lib3ds/types.h:78,
from ../../include/lib3ds/background.h:27,
from ../../include/lib3ds/file.h:27,
from 3dsplay.c:27:
../include/stdio.h:28:20: stdarg.h: No such file or directory
In file included from ../../include/lib3ds/types.h:78,
from ../../include/lib3ds/background.h:27,
from ../../include/lib3ds/file.h:27,
from 3dsplay.c:27:
../include/stdio.h:191: error: `size_t’ has not been declared
../include/stdio.h:191: error: ISO C++ forbids declaration of `parameter’ with no type
../include/stdio.h:202: error: `size_t’ has not been declared
ãã«ãã³ããã
ãã£ã¬ã¯ããªæ§æå šäœãšã¯ãmsysã®ããããã£ã¬ã¯ããªããã§ããïŒãããã§ã/home/ãŠãŒã¶å/src/ode-0.9ããã§ããããïŒ
ã§ã
ãã«ãã³ããã
3dsplay.cã¯ãã®ãŸãŸã§ã¯ãšã©ãŒã«ãªãã®ã§ããœãŒã¹ã倿Žããå¿ èŠããããŸããCèšèªã®ãœãŒã¹ã³ãŒããg++ãšããC++ã®ã³ã³ãã€ã©ãŒã§ã³ã³ãã€ã«ããŠããã®ãåå ã®äžã€ã§ãããgccã§ã³ã³ãã€ã«ããŠããšã©ãŒã¯æ®ããŸãã
ããã¯ãdemura.netã®ãµã³ãã«ããã°ã©ã ãVisual C++ã§ãã³ã³ãã€ã«ã§ããããã«ããããã§ããC++ã®æ¹ãCããåãã§ãã¯ãå³ããã§ãããã
ãªããã³ã³ãã€ã«ã§ããããã«ãããã¡ã€ã«äžåŒããŸãšããŠä»¥äžã«çœ®ããŸããã®ã§ã²ããããŠãã ãããmakeããŠãã ãããhttp://demura.net/archives/images/ode/lib3ds-examples.tgz
ã§ã
ããããããŸããããã£ã¬ã¯ããªæ§æå šäœãã¯ãŒããªã©ã«è²Œãä»ããŠéã£ãŠããã ããŸãã§ãããã?
æåãã確èªããªãããŸãã
ã©ã€ãã©ãªã®äœçœ®ãåå ãªã®ãincludeã®äœçœ®ãæªãã®ããšæããmakeã§æå®ããŠãããã©ã«ãã®ãã¡ã€ã«ãèªåã®ãã£ã¬ã¯ããªã«ã³ããŒãããããŠæ§åãèŠãŠããŸãããäž»ã ã£ãææãåŸãããŠããŸããã
èªåã®ãã£ã¬ã¯ããªãšããã®ã¯/msys/1.0/home/username/src/ode-0.9/mytestããã§ãã
ç°å¢èªäœããã¡ããã¡ãã«ãªã£ãŠãããšæããMinGW,Msysãããã¥ã¢ã«ã§è§£åãå±éãmake installããªãããŸãããè ã«èœã¡ãªãã®ããMinGW,Msysãdownloadãããšãã«åæã«ããŠã³ããŒããããå§çž®ãã¡ã€ã«ãã€ã³ã¹ããŒã«ããã»ããããã®ããšæããã€ã³ã¹ããŒã«ããŸãããå 容ã¯å€ãããªãããã§ãããåé¡ãªããšããããŸããã
ã³ã¡ã³ãããã ããã°ããããããŸãã
ä¿®æ£ããã®ã§ãã3dsplay.exeã¯ãŸã ã§ããŠããŸãããode3rdloader rabbit.3dsãåããŸãã
æãå ¥ããŸãããã³ã¡ã³ãããã ãããã
$make
$ g++ -Wall -fno-exceptions -fno-rtti -g -DWIN32 -c 3dsplay.c -L/lib -L/usr/li
b -L../lib -L../../drawstuff/src -L/usr/local/lib -I/include -I/usr/include -I
../include -I. -I../../include -I/usr/local/include
3dsplay.c: In function `void toggle_bool(int, int, void*)’:
3dsplay.c:178: error: invalid conversion from `void*’ to `int*’
3dsplay.c: In function `void render_node(Lib3dsNode*)’:
3dsplay.c:479: error: invalid conversion from `void*’ to `float (*)[3]‘
3dsplay.c:515: error: invalid conversion from `void*’ to `Player_texture*’
3dsplay.c:540: warning: unused variable ‘upload_format’
3dsplay.c: In function `void display()’:
3dsplay.c:790: error: expected unqualified-id before ‘,’ token
3dsplay.c:790: error: expected unqualified-id before ‘,’ token
3dsplay.c:834: error: expected primary-expression before ‘=’ token
3dsplay.c:835: error: expected primary-expression before ‘=’ token
3dsplay.c:858: error: expected primary-expression before ‘<=’ token
3dsplay.c:858: error: expected primary-expression before ‘=’ token
3dsplay.c:858: error: invalid type argument of `unary *’
3dsplay.c:860: error: expected primary-expression before ‘,’ token
3dsplay.c:860: error: expected primary-expression before ‘)’ token
3dsplay.c: In function `void create_icons()’:
ãã«ãã³ããã
ã»ãã¬ãŒã¿ãšã©ãŒã¯makefileã®äžã§TABãå ¥ã£ãŠããªãããã§ãã
TABãšããã®ã¯ããŒããŒãã®TABããŒã®ããšã§ãã
ç§ãåããŠãã®ãšã©ãŒã«åºäŒã£ããšãã¯æå³äžæã§ããã
ãã®ãŠã§ããµã€ãã®æ§è³ªäžã§ãã«ããã¢ã³ãããŒã¹ãã§TABãã³ããŒã§ããªãã®ã§ãšã©ãŒã«ãªããŸãã
以åã®ã³ã¡ã³ãã®makefileã§TABããããå Žæã«[TAB]ãšæžããŸããã®ã§ã³ããŒããŠããTABãå ¥ããŠãã ããã
ããããªããã°ããŸã質åãé¡ãããŸãã
ã§ã
msys/1.0/home/username/src/lib3ds-1.3.0/example/3dsplay.c
ãæ²èŒã®makeæã§å®è¡ããããšmakefileãšããŠã»ãŒãããŠãmsysã§makeããã
ã»ãã¬ãŒã¿ãšã©ãŒãèµ·ãã£ãŠããŸããŸãããå šè§åè§å€æã¯å®äºããŠãåã³äžèšã®
ã¡ãã»ãŒãžãã§ãŸããã
$ make
makefile:14: *** missing separator. Stop.
ãã«ãã³ããã
è£è¶³ããŸãã
3dsplay.cã®ã³ã³ãã€ã«ã«ã¯makefileã䜿ã£ãŠãã ããã
ãŸãã3dsplay.cã¯glutã䜿ã£ãŠããã®ã§glutãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
glutã®ã€ã³ã¹ããŒã«æ³ã¯
http://www-sens.sys.es.osaka-u.ac.jp/wakate/tutorial/group3/glui/glui3.html
ã®èšäºã®Windows XP, MinGWã®gccãåèã«ãªããŸãã
# makefile
CC = g++ -Wall -fno-exceptions -fno-rtti -g -DWIN32
TARGET = 3dsplay
OBJS = 3dsplay.o
SOURCE = 3dsplay.c
HEADER =
WINDRES = windres
LIBS = -L/lib -L/usr/lib -L../lib -L../../drawstuff/src -L/usr/local/lib
INDS = -I/include -I/usr/include -I../include -I. -I../../include -I/usr/local/include
OPTS = -lstdc++ -lcomctl32 -lkernel32 -luser32 -lgdi32 -lopengl32 -lglu32 -lglut32 -lwinmm -lm -l3ds
$(TARGET):$(OBJS) $(RESOURCE_FILE) $(HEADER)
[TAB] $(CC) -mwindows -o $@ $(OBJS) $(LIBS) $(INDS) $(OPTS)
$(OBJS): $(SOURCE) $(HEADER)
[TAB] $(CC) -c $(SOURCE) $(LIBS) $(INDS)
clean:
[TAB] rm $(TARGET) $(OBJS) *.*~ *~ *.exe *.*.stackdump
ãã«ãã³ããã
é ããrabbit.3DSãode3dsloader-0.0ã§å®è¡ãããšããåé¡ãªãã§ããŸããã
rabbit3DSã®ãã¹ã®æå®ãæªããšæãããŸãã
rabbit3DSãmain.cppãšåããã£ã¬ã¯ããªã«çœ®ããŠãmain.cppã®makeModelã®170è¡ç®ã«ããè¡ã以äžã®ããã«èšå®ããŠè©ŠããŠãã ããã
load3dsModel(“./rabbit.3DS”);
ãŸãã¯ãlib3dsã©ã€ãã©ãªãæ£ããã€ã³ã¹ããŒã«ãããŠããªãå¯èœæ§ããããŸãã
lib3ds-1.3.0/examples/3dsplay.exeãããŸãå®è¡ã§ããŸããïŒ
ã§ã
ãã«ãã³ããã
makeã§ããªãã£ãåå ãæããŠé ããŸããïŒ
ãŸãã衚瀺ã«äœ¿çšãã3dsãã¡ã€ã«ãã¡ãŒã«ã«æ·»ä»ããŠç§ã«éã£ãŠãã ããã
ã¡ãŒã«ã¢ãã¬ã¹ã¯ããã²ãŒã·ã§ã³ããŒã®Profileã«èšèŒããŠããŸãã
ã§ã
make ã¯æ£åžžã«çµäºãã¿ãŒã²ãããã§ããŸãããããããèå¿ã®ããŒã¿ãå ¥ããŠãäžèšã®ãšã©ãŒãçºçããŠããŸããŸããrabbit ããŒã¿ã¯home/usernale/modelã®äžã«ãããŸãã
home/username/src/ode-0.9/mytest/ode3dsloader-0.0
$ 3dsloader ../model/rabbit.3DS
3dsplayer: Error: Loading 3DS file failed.
ode3dsloaderã®ãœãŒã¹ãã¡ã€ã«ãåæããã°ããããšæããŸããããã¡ã€ã«ã®åœ¢åŒã®åé¡ã ã£ããããããŸãããç³ãèš³ãããŸãããããæå°ããã ãããã
ãã«ãã³ããã
ãã¹ãéã£ãŠããã°ã©ãã§ãè¯ããšæããŸããããã®ODEè¬åº§ã§ã¯c:ï¿¥msysï¿¥1.0ï¿¥homeï¿¥ãŠãŒã¶åï¿¥srcï¿¥ode-0.9ãšããŠããŸãã
æ¬è¬åº§ã§äœ¿çšããŠããmakefileã¯å Žæã«äŸåããŸããããã¯drawstuffã®ãªãœãŒã¹ãã¡ã€ã«resources.rcãçžå¯Ÿãã¹ã§æå®ããŠããããã§ãã
ãå§ãã¯ä»¥äžã®ãã£ã¬ã¯ããªãäœããããã§å±éããŠãã ããã
/home/ãŠãŒã¶å/src/ode-0.9/myprog/
å±éãããšæ¬¡ã®ããã«ãªããŸãã
/home/ãŠãŒã¶å/src/ode-0.9/myprog/ode3dsloader-0.0/{ode3dsloader-0.0.cpp, ode3dsloader-0.0.h, …}
ãªããæ¬è¬åº§ã®ãµã³ãã«ããã°ã©ã ãåé¡ãªãmake䞊ã³ã«å®è¡ã§ããå Žåã¯ããã®åé¡ãªãmakefileãšå ¥ãæ¿ããŠãmakefileã®ãã¡ã€ã«åãæžãçŽãmakeããŠãã ããã
ODE-0.9ã¯ã©ã®ãã£ã¬ã¯ããªã«ããã¹ãã§ãããã?
msysã®home/*****ã®äžã§ããã®ã§ãããã? ããããŒãšãminGWã®ããã§ãããã?
ODEãã€ã³ã¹ããŒã«ããéã«make install ã§ããªããVisualC++2005ã§èšå®ããŸãããä»ã®odeã®sanple prpogramãå®è¡ããŠç¹èªå°ã¯ãããŸããã§ããã
http://demura.net/archives/9ode/lecture/ode22.htmlã«åŸãããã«ãode/pde.h,drawatuff/drawstuffãç§»åããŠããšã©ãŒãåé¿ããŠãããããã®ãšã©ãŒã«ééããŸããã
ODEãã€ã³ã¹ããŒã«ããéã«make installã§ã/usr/local/include/odeã«odeã®ããããã¡ã€ã«çŸ€ã/usr/local/libã«libode.a, libode.dllãã€ã³ã¹ããŒã«ãããŠããŸããïŒã«å¯ŸããŠã¯ãODEã¯make InstallããŠããŸããããããã£ãŠãèšè¿°ã®ãã£ã¬ã¯ããªã«ãã¡ã€ã«ãå ¥ã£ãŠããŸãããode-srcããã€ã³ã¹ããŒã«ãããã»ããããããã§ããã
ãŸããä»ã®ãµã³ãã«ããã°ã©ã ã¯MinGWã§åé¡ãªãã³ã³ãã€ã«ã§ããã®ã§ããããïŒããããŸããã
ode-0.9ãã€ã³ã¹ããŒã«ããéã,sysã§ã€ã³ã¹ããŒã«ã¯ããŠããŸããã
ãã«ãã³ããããã¹ãããŠé ãããããšãããããŸãã
ç§ã®ç°å¢ãMSYS1.0.10+ MinGW5.1.3+Windows Vista Businessã§ã¯åé¡ãªãmakeã§ããŸãããã¡ãªã¿ã«make 3.79.1ãgcc3.4.2ã§ãã
ODEãã€ã³ã¹ããŒã«ããéã«make installã§ã/usr/local/include/odeã«odeã®ããããã¡ã€ã«çŸ€ã/usr/local/libã«libode.a, libode.dllãã€ã³ã¹ããŒã«ãããŠããŸããïŒ
ãŸããä»ã®ãµã³ãã«ããã°ã©ã ã¯MinGWã§åé¡ãªãã³ã³ãã€ã«ã§ããã®ã§ããããïŒ
ode3dsloader-0.0ãmakeãããšããäžèšã®ãšã©ãŒãçºçããŠããŸããŸããããã¯ã¹ã©ãã·ã¥ã/ã ãšããã®ã§ãããã©ããã£ãŠè§£æ±ºãããããã®ããæå°ããã ããã°ãšæã£ãŠããŸããç°å¢ã¯MinGW+MSYS+WinX PPro SP2
ã§ãããããããé¡ãããŸãã
c:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -lode