3DS Files, textures and importing into Isadora.

  • Tech Staff

    How to create a 3D model in 3DS max, add a texture and then import it into isadora.

    The main step here is the texture that you add in the 3ds max software MUST be in the same location as the exported 3ds model.

    In this case, my image called PP.png was on my desktop (bad practice I know!) I used this in 3ds max as a bmp texture file and then exported the .3ds file to my desktop also.

    Then, when you import into Isadora, Isadora automatically finds the file (PP.png) on my desktop. 

    Note: You do not need to import the texture file. 

    Also: If you moved the referenced texture file AFTER the export, it does not work.

    I hope this helps. 

    Apologies for the rough and ready screen record. 

  • It's a puzzle for me. I never got into 3D Model creation and do not want to. I checked various software but it's all too alien. 

    I used the only model i have that actually works, the cube in the Isadora examples. It comes as a .3ds file with "some texture files" in the same folder and allows to use the texture input of the 3D Player in Isadora. This works even after moving the entire folder. Perfect, once understood that the cube is somewhere odd in the 3D space and requires a z-translation > -30 to be in view.

    Could you publish a small set of similar, very simple 3D models to be enjoyed by the community ? I need a cylinder, a ball if it's possible to spread a video texure on that and optionally a heart, a star and an egg. 

    I am glad to pay for this effort (or make a donation to your favourite charity (unless I cannot agree to it's politics)) and wish that the result is shared.

    Thanks for considering



  • Tech Staff


    Hi. Thanks for the nice message. I can easily create these shapes (or similar) and use the cubecl texture on all the 3D models. That way; all shapes will work like the cube but the cube texture will look awful on any other shape. But it should work. 

    I will attempt this asap for you. 

  • Tech Staff

    This is what I have so far.

    A cube, cylinder and an egg.

    Download the three files and the black gloss texture and keep them in the same folder.


  • @skulpture

    many thanks. works perfectly. I owe you one. name it ! 

    btw forgot to ask for a cone-shape ... a cone and a cylinder should make a nice 3D arrow !


    I am working on something that uses a ultra-short-throw (0.25) video-projection to the inside of a cylinder. My guess is that projecting onto a 3D virtual cylinder will do the necessary anamorphism to correct for the distortion of the projection. Will see that later today.



  • Tech Staff

    I have added a cone into the folder for you.

  • Beta Platinum

    @skulpture said:

    cube, cylinder and an egg

     There are a number of more complex shapes as textured 3D files prepared for use in Isadora linked to a previous forum thread: https://community.troikatronix...

    best wishes


  • Tech Staff

    @bonemap said:

    @skulpture said:
    cube, cylinder and an egg
     There are a number of more complex shapes as textured 3D files prepared for use in Isadora linked to a previous forum thread: https://community.troikatronix...
    best wishes

     Ah yes thank you @bonemap I have added them to my folder so people can download then also.

  • 3D heaven on the way !!!

  • Tech Staff

    @hairi said:

    3D heaven on the way !!!

     Have fun - please share your results. Would love to see them!

  • I will asap. (i'm on a holiday for a week). Meanwhile I developed a little GLSL actor that is similar to Matte++ but more flexible. It allows to move and zoom the image projected on the 3D model. Just copy and paste the code in the attached file into a GLSL actor. 




  • do not know if attachments work. here's the code:

    uniform sampler2D iChannel0;
    uniform vec3 iResolution;
    uniform float iTime; // ISADORA_FLOAT_PARAM(src_zoom_x, xz, 0., 10., 1.0, "source image zoom horizontal");
    uniform float src_zoom_x;
    // ISADORA_FLOAT_PARAM(src_zoom_y, yz, 0., 10., 1.0, "source image zoom vertical");
    uniform float src_zoom_y; // ISADORA_FLOAT_PARAM(src_scroll_x, xp, -10., 10., -0.0, "source image scroll horizontal");
    uniform float src_scroll_x;
    // ISADORA_FLOAT_PARAM(src_scroll_y, yp, -10., 10., -0.0, "source image scroll vertical");
    uniform float src_scroll_y; // ISADORA_FLOAT_PARAM(dst_zoom_x, xs, 0., 10., 1.0, "destination image zoom horizontal");
    uniform float dst_zoom_x;
    // ISADORA_FLOAT_PARAM(dst_zoom_y, ys, 0., 10., 1.0, "destination image zoom vertical");
    uniform float dst_zoom_y; // ISADORA_FLOAT_PARAM(dst_pos_x, xpo, -10., 10., 0.0, "destination image position horizontal");
    uniform float dst_pos_x;
    // ISADORA_FLOAT_PARAM(dst_pos_y, ypo, -10., 10., 0.0, "destination image position vertical");
    uniform float dst_pos_y; // ISADORA_INT_PARAM(mask, msk, 0, 1, 0, "mask source image repeats");
    uniform int mask;
    // ISADORA_FLOAT_PARAM(blur, blr, 0., 10., 0.0, "blur mask");
    uniform float blur; // ISADORA_FLOAT_PARAM(transp_thres, tt, 0., 1., 0.0, "black to transparent thresh");
    uniform float transp_thres; void main(void) {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    vec2 stretch = 1.0 / vec2(dst_zoom_x,dst_zoom_y);
    vec2 zoom = 1.0 / vec2(src_zoom_x,src_zoom_y);
    vec2 pan = (stretch - vec2(1.0)) / -2.0; // compensation for stretching
    vec2 pan2 = (zoom - vec2(1.0)) / -2.0; // compensation for stretching

    vec4 image = texture2D(iChannel0, (uv 
    * zoom
    + pan2)
    * stretch
    + pan
    + vec2(src_scroll_x,src_scroll_y) 
    + (vec2(dst_pos_x,-dst_pos_y) * -stretch)

    image.a = step(transp_thres,length(image.rgb));
    if(mask > 0){

    float left = (1.0-(dst_zoom_x)) / 2.0;
    float right = 1.0 - left;
    float bottom = (1.0-(dst_zoom_y)) / 2.0;
    float top = 1.0 - bottom;

    left = left + dst_pos_x;
    right = right + dst_pos_x;
    top = top - dst_pos_y;
    bottom = bottom - dst_pos_y;

    float blurr = max(blur / 10.0,1.0 / iResolution.x); // size of one pixel image = image*smoothstep(left,left+blurr,uv.x);
    image = image*smoothstep(right,right-blurr,uv.x);
    image = image*smoothstep(bottom,bottom+blurr,uv.y);
    image = image*smoothstep(top,top-blurr,uv.y);

    gl_FragColor = image;

  • @hairi

    At risk of not adding substance to the conversation, it just made me happy to see someone sharing GLSL code. Highlike. ;-)

    Best Wishes,