/// loadModelObject(String objectName);
/*
* This was made for something like Game Maker 7 and you'll want to adapt it to use vertex
* buffers and stuff instead of d3d.
*
* Also, the last time I used this was in 2014 so I have no idea how well it works . . .
* . . . if it works at all.
*/
/*
* This is a little bit obsolete because .gmmod is much simpler to import.
*/
/*
scr_load_model_obj(model_file);
argument0: Path to the obj file (.obj)
returns: 3D model
Make sure that the imported model only consists of triangles!
*/
var file;
file = file_text_open_read(argument0+".obj");
var v_listX,v_listY,v_listZ,vt_listX,vt_listY,vn_listX,vn_listY,vn_listZ, _r, g, b;
var matFileName,matFile;
matFileName = argument0+".mtl"; //directory of the material file
var vertexColor;
vertexColor = c_white;
v_listX = ds_list_create();
v_listY = ds_list_create();
v_listZ = ds_list_create();
vt_listX = ds_list_create();
vt_listY = ds_list_create();
vt_listZ = ds_list_create();
vn_listX = ds_list_create();
vn_listY = ds_list_create();
vn_listZ = ds_list_create();
var model;
model = d3d_model_create();
d3d_model_primitive_begin(model,pr_trianglelist);
var zeile,nx,ny,nz,tx,ty,sx,vx,vy,vz;
while (!file_text_eof(file)){
zeile = file_text_read_string(file);
if (string_char_at(zeile,1) != '#'){ //if the first character is not a comment
switch (string_char_at(zeile,1)){
case 'v':
switch (string_char_at(zeile,2)){
case 'n':
zeile=string_delete(zeile,1,string_pos(" ",zeile));
nx=real(string_copy(zeile,1,string_pos(" ",zeile)));
zeile=string_delete(zeile,1,string_pos(" ",zeile));
ny=-1*real(string_copy(zeile,1,string_pos(" ",zeile)));
zeile=string_delete(zeile,1,string_pos(" ",zeile));
nz=real(string_copy(zeile,1,string_length(zeile)));
ds_list_add(vn_listX,nx);
ds_list_add(vn_listY,ny);
ds_list_add(vn_listZ,nz);
break;
case 't':
zeile=string_delete(zeile,1,string_pos(" ",zeile));
tx=real(string_copy(zeile,1,string_pos(" ",zeile)));
zeile=string_delete(zeile,1,string_pos(" ",zeile));
ty=1-real(string_copy(zeile,1,string_length(zeile)));
ds_list_add(vt_listX,tx);
ds_list_add(vt_listY,ty);
break;
default:
zeile=string_delete(zeile,1,string_pos(" ",zeile));
vx=real(string_copy(zeile,1,string_pos(" ",zeile)));
zeile=string_delete(zeile,1,string_pos(" ",zeile));
vy=real(string_copy(zeile,1,string_pos(" ",zeile)))*-1;
zeile=string_delete(zeile,1,string_pos(" ",zeile));
vz=real(string_copy(zeile,1,string_length(zeile)));
ds_list_add(v_listX,vx);
ds_list_add(v_listY,vy);
ds_list_add(v_listZ,vz);
break;
}
break;
case 's':
zeile=string_delete(zeile,1,string_pos(" ",zeile));
sx=string(string_copy(zeile,1,string_pos(" ",zeile)));
if (sx != "off"){
}
break;
case 'u':
if(string_copy(zeile,2,5) == "semtl"){
var vertexColorName,matFile;
zeile=string_delete(zeile,1,string_pos(" ",zeile));
vertexColorName=string(string_copy(zeile,1,string_length(zeile))); //Materialname in modelfile
matFile = file_text_open_read(matFileName);
while (file_text_eof(matFile)==false){
zeile = file_text_read_string(matFile);
if (string_char_at(zeile,1) != '#'){ //if not comment
switch (string_char_at(zeile,1)){
case 'n':
if(string_copy(zeile,2,5) == "ewmtl"){
zeile=string_delete(zeile,1,string_pos(" ",zeile));
vertexColorNameMat=string(string_copy(zeile,1,string_length(zeile))); //Colorname in Materialfile
}
break;
case 'K':
switch (string_char_at(zeile,2)){
case 'd':
if (vertexColorName == vertexColorNameMat){//if colorname in modelfile and materialfile are equal
zeile=string_delete(zeile,1,string_pos(" ",zeile));
_r=256*real(string_copy(zeile,1,string_pos(" ",zeile)));
zeile=string_delete(zeile,1,string_pos(" ",zeile));
g=256*real(string_copy(zeile,1,string_pos(" ",zeile)));
zeile=string_delete(zeile,1,string_pos(" ",zeile));
b=256*real(string_copy(zeile,1,string_length(zeile)));
vertexColor = make_color_rgb(_r,g,b);
}
break;
}
break;
}
}
file_text_readln(matFile);
}
file_text_close(matFile);
//---------------------------------------------------------------------------------------------------
}
break;
case 'f':
var f;
zeile=string_delete(zeile,1,string_pos(" ",zeile));
f[0]=string(string_copy(zeile,1,string_pos(" ",zeile)));
zeile=string_delete(zeile,1,string_pos(" ",zeile));
f[2]=string(string_copy(zeile,1,string_pos(" ",zeile)));
zeile=string_delete(zeile,1,string_pos(" ",zeile));
f[1]=string(string_copy(zeile,1,string_length(zeile)));
var p,z,e1,e2,e3;
p=0;
repeat(3){
z = f[p];
z=string_delete(z,0,string_pos("/",z));
e1=real(string(string_copy(z,1,string_pos("/",z)-1)))-1;
z=string_delete(z,1,string_pos("/",z));
e2=real(string(string_copy(z,1,string_pos("/",z)-1)))-1;
z=string_delete(z,1,string_pos("/",z));
e3=real(string(string_copy(z,1,string_length(z))))-1;
p+=+1;
d3d_model_vertex_normal_texture_color(model,ds_list_find_value(v_listX,e1),ds_list_find_value(v_listY,e1),ds_list_find_value(v_listZ,e1),
ds_list_find_value(vn_listX,e3),ds_list_find_value(vn_listY,e3),ds_list_find_value(vn_listZ,e3),
ds_list_find_value(vt_listX,e2),ds_list_find_value(vt_listY,e2),vertexColor,1);
}
break;
}
}
file_text_readln(file);
}
file_text_close(file);
d3d_model_primitive_end(model);
//delete lists
ds_list_destroy(v_listX);
ds_list_destroy(v_listY);
ds_list_destroy(v_listZ);
ds_list_destroy(vt_listX);
ds_list_destroy(vt_listY);
ds_list_destroy(vn_listX);
ds_list_destroy(vn_listY);
ds_list_destroy(vn_listZ);
return model;
Comments
0 B
|👍
/👎
0 B
|👍
/👎