Dimenticare icon

Ancient Game Maker Obj Importer

Dimenticare | PRO | 06/07/18 11:52:22 PM UTC | 0 ⭐ | 10581 👁️ | Never ⏰ | []
Game Maker |

0 B

|

None

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎