/// 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;