Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// 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;
Advertisement
Add Comment
Please, Sign In to add comment