jPCT-AE - a 3d engine for Android > Support

No success with importing 3ds into Project

(1/2) > >>

higgs:
Hi,
im an absolute beginner with jpct-ae and now trying to import a .3ds file, which i made in blender (its already got a texture).

I was reading in this forum for quite some time and in the API of jpct but didnt succeed to get it work.

I already managed to get my app run, showing a cube, that can be turned by touch, now i just want to replace this cube by my .3ds file.

I read a comment somewhere in this forum, that the .3ds file should be in res/raw folder, is this correct?
And what code do i have to use to import the .3ds?

Till now, my code looks like this (excerpt)


--- Code: ---[...]
Texture texture = new Texture(BitmapHelper.rescale(BitmapHelper.convert(masterContext.getResources().getDrawable(R.drawable.ic_launcher)), 64, 64));
TextureManager.getInstance().addTexture("ic_launcher", texture);
cube = Primitives.getCube(10);
cube.calcTextureWrapSpherical();
cube.setTexture("ic_launcher");
cube.strip();
cube.build();
world.addObject(cube);
[...]
--- End code ---

I tried to load the file via the loadModel-method from the API:


--- Code: ---private Object3D loadModel(String filename, float scale) throws IOException {

InputStream stream = mContext.getAssets().open("cube.3ds");
     Object3D[] model = Loader.load3DS(stream, scale);
     Object3D o3d = new Object3D(0);
     Object3D temp = null;
     for (int i = 0; i < model.length; i++) {
         temp = model[i];
         temp.setCenter(SimpleVector.ORIGIN);
         temp.rotateX((float)( -.5*Math.PI));
         temp.rotateMesh();
         temp.setRotationMatrix(new Matrix());
         o3d = Object3D.mergeObjects(o3d, temp);
         o3d.build();
     }
     return o3d;
 }

--- End code ---

I have no clue, if this is the right approach.
   
My .3ds file is very small, I think like 1KB (its just a cube also), so it should work without renaming it to .mp3.

Thanks for the help.

Yerst:
This is what you need to load a .3ds file (in res/raw):


--- Code: ---Object3D model = Object3D.mergeAll(Loader.load3DS(res.openRawResource(R.raw.model), scale));
world.addObject(model);

--- End code ---
It it has a Texture:
Textures aren't packed in a .3ds file. You need to save the Texture (as a .png for example) and copy it in the assets or res/raw.
This should work then:

--- Code: ---TextureManager tm = TextureManager.getInstance();
Object3D model = Object3D.mergeAll(Loader.load3DS(res.openRawResource(R.raw.model), scale));
tm.addTexture("model_texture",new Texture(res.openRawResource(R.raw.model_texture)));
model.setTexture("model_texture");
world.addObject(model);

--- End code ---

higgs:
Thanks for the quick reply.
This code seems to work but I got the problem that res cannot be resolved. I tried to define it with

--- Code: ---Resources res = getResources();
--- End code ---

right before the Loader and importing


--- Code: ---import android.content.res.Resources;
--- End code ---

Then he suggests to create a method "getRessource". I dont think, that this is the right way.

Is there anything I forgot to import? Whats to do?

Thanks again.

Yerst:
sry, i forgot about the resources.
You need the application context to get the resources.
You can get the application Context by calling this.getApplicationContext() in your (Main)Activity.
I hand over the Context to every class where i need it, not only the Resources, because they cannont access the assets folder.
To get the Resources do the following just call
--- Code: ---Resources res = context.getResources()
--- End code ---
in your class.

P.S.: If you didn't already know, just press Strg+Shift+O and eclipse will import everything you need.

higgs:
Hi,
sorry for the late reply, but I dont get it managed.

I tried to get the Context by writing this.getApplicationContext(), but I just get a proposal to built a so called method.
My MyRenderer - method is looking like this:

--- Code: ---public MyRenderer(JPCTAESkeletonActivity master, Context context) {

this.masterActivity=master;
this.masterContext=context;

 }

--- End code ---

I hope this is the right method.

Also, the "res"-fault disappears, putting  "Resources res = context.getResources();" in front of my import-code. Only fault left is that "context" cant be resolved. Any last ideas how to fix it?
Thanks a lot.

Navigation

[0] Message Index

[#] Next page

Go to full version