Dice and collsion

If you are a new Irrlicht Engine user, and have a newbie-question, this is the forum for you. You may also post general programming questions here.
The_Glitch
Competition winner
Posts: 523
Joined: Tue Jan 15, 2013 6:36 pm

Re: Dice and collsion

Post by The_Glitch »

Not really, give it a shot or just try your object format which I don't suggest or look into Irrlicht's other formats.
CuteAlien
Admin
Posts: 9687
Joined: Mon Mar 06, 2006 2:25 pm
Location: Tübingen, Germany
Contact:

Re: Dice and collsion

Post by CuteAlien »

Asimov wrote: Strangely when I use the following line on an obj it crashes.

Code: Select all

((scene::ISkinnedMesh*)mesh)->convertMeshToTangents();
You cast a static mesh to scene::ISkinnedMesh* - that can't work as it's not of that class.
Also depending on your setting you don't need that line at all. In the last obj you exported the loader already could do (and did) that conversion.

About scaling - it should always use the same factor, so figure it out once (I think in Blender it's 100x as I remember the obj exporter had a button to increase obj files by that value - no idea why...).
IRC: #irrlicht on irc.libera.chat
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
Asimov
Posts: 246
Joined: Thu Dec 04, 2014 7:41 pm
Contact:

Re: Dice and collsion

Post by Asimov »

Hi CuteAlien,
Also depending on your setting you don't need that line at all. In the last obj you exported the loader already could do (and did) that conversion.
See the problem is that the normalmaps are not showing correctly in obj, even after I rename them, and after I rename them so that they do show, I get very dark walls.
Which is one of the reasons I started to use x files, plus I needed animation for some objects.

Anyway I tried to export my whole scene as an x file instead, unfortunately it goes wrong. Even though the hand grenade was perfect, if I export the whoe scene, every gets piled in the middle instead of being in it's correct location. Also I had to scale it to 0.2 before I could get the room down to this size. I think it is dark because it is blocking the light, because the light is in the middle of the room.

Hmm I wonder if I attach all the object together if it will. Going to give it a try now.

Grr just when you think you are getting somewhere.
Image
Asimov
Posts: 246
Joined: Thu Dec 04, 2014 7:41 pm
Contact:

Re: Dice and collsion

Post by Asimov »

Hi,

Well I attached everthing together in max and re exported it.
Now I have found the right scale by scaling it to 0.1f,0.1,f0.1f and it seems spot on.

Now here is the problem. The colours are not right. The fireplace seems too bright and the walls are too dark.
I am not sure if it is my light settings or not, but it was fine when it was an obj.

Here is my light settings, and it situated above the table.
smgr->setAmbientLight(SColor(255, 180, 180, 180));

Code: Select all

 
    ILightSceneNode* mySpotLight = smgr->addLightSceneNode();
    mySpotLight->setPosition(vector3df(0.0f, 145.0f, 0.0f));
    mySpotLight->setRotation(vector3df(-90.0f, 0.0f, 0.0f));
     SLight spotLightData;
    spotLightData.Type = ELT_SPOT;
    spotLightData.OuterCone = 300;
    spotLightData.InnerCone = 100;
    mySpotLight->setLightData(spotLightData);
 
My other question is this. Is there any way to make a light brighter to dimmer, and can you scale a light?

In the picture attached, the left one is the obj, and the right one is the x file.
Image
Asimov
Posts: 246
Joined: Thu Dec 04, 2014 7:41 pm
Contact:

Re: Dice and collsion

Post by Asimov »

Hi,

Well I have been at this for hours. I can't understand why there is a purple shade in the texture. It is almost as if it is showing the normalmap as well as the diffuse in this occasion, but it doesn't do this on the grenade.

Ok here is another problem.
I cannot see the normalmap working on the floor until I add the line

Code: Select all

lightData.CastShadows = false;
Which is stupid because I lose the shadows then. Normally a normalmap works better with shadows.
Here is the full code. Obviously I do want shadows, but I can only see the normalmap if I turn them off, but I can clearly see the map working fine on the wall.

Code: Select all

smgr->setAmbientLight(SColor(255, 255, 255, 255));
    ILightSceneNode* Light = smgr->addLightSceneNode();
    Light->setPosition(vector3df(0.0f, 200.0f, 0.0f));
  //  Light->setRadius(150);
 
     SLight lightData;
    lightData.DiffuseColor = SColor(255, 255, 255, 255);
    lightData.CastShadows = false;
    Light->setLightData(lightData);
Image
Asimov
Posts: 246
Joined: Thu Dec 04, 2014 7:41 pm
Contact:

Re: Dice and collsion

Post by Asimov »

Hi all,

I believe I have solved my purple colour problem. You see even though my room is one x file it is comprised of various meshes.
Apparently you have to add the normalmap code to each individual mesh inside the x file.
eg

Code: Select all

((scene::ISkinnedMesh*)mesh)->convertMeshToTangents();
 
//walls
    scene::IMeshBuffer* walls = mesh->getMeshBuffer(0);
   if (walls)
   {
       video::SMaterial& mt = walls->getMaterial();
       mt.MaterialType = video::EMT_NORMAL_MAP_SOLID;
   }
//fire
    scene::IMeshBuffer* fire = mesh->getMeshBuffer(5);
   if (fire)
   {
       video::SMaterial& mt = fire->getMaterial();
       mt.MaterialType = video::EMT_NORMAL_MAP_SOLID;
   }
   //1= table
   //2= board
 
//logs
   scene::IMeshBuffer* logs = mesh->getMeshBuffer(3);
   if (logs)
   {
       video::SMaterial& mt = logs->getMaterial();
       mt.MaterialType = video::EMT_NORMAL_MAP_SOLID;
   }
// floor
   scene::IMeshBuffer* floor = mesh->getMeshBuffer(4);
   if (floor)
   {
       video::SMaterial& mt = floor->getMaterial();
       mt.MaterialType = video::EMT_NORMAL_MAP_SOLID;
   }
I am glad I worked this out on my own.
What really annoys me though. No matter what I do I cannot make the door receive light. It is like the door is constantly lit up, wheras the walls are darker.
Now I am happy with the light, but if I wanted to make the room brighter, how do I make the light brighter?
Image
hendu
Posts: 2600
Joined: Sat Dec 18, 2010 12:53 pm

Re: Dice and collsion

Post by hendu »

Lights don't really have a "strength". Their apparent strength is determined by the distance and the color at the center. So increase the radius for a stronger light.
Asimov
Posts: 246
Joined: Thu Dec 04, 2014 7:41 pm
Contact:

Re: Dice and collsion

Post by Asimov »

Hi Hendu,
Lights don't really have a "strength". Their apparent strength is determined by the distance and the color at the center. So increase the radius for a stronger light.

Code: Select all

 Light->setRadius(2000);
Well I tried different settings on the light from 10 to 2000, and the light does not change in brightness at all.

Strange in all modelling programs you can give a light a strength, and yet in irrlicht you cannot.

BTW got my door to look right by sticking this code in

Code: Select all

 // door
   scene::IMeshBuffer* door = mesh->getMeshBuffer(1);
   if (door)
   {
       video::SMaterial& mt = door->getMaterial();
     mt.MaterialType= video::EMT_PARALLAX_MAP_SOLID;
   }
mongoose7
Posts: 1227
Joined: Wed Apr 06, 2011 12:13 pm

Re: Dice and collsion

Post by mongoose7 »

Try changing the attenuation *after* setting the radius.
Asimov
Posts: 246
Joined: Thu Dec 04, 2014 7:41 pm
Contact:

Re: Dice and collsion

Post by Asimov »

Hi Mongoose,
Try changing the attenuation *after* setting the radius.
Do you know something. It seems no matter what light settings I change the light always remains the same. I am happy with the way the light looks, but in the interests of learning I want it to change, but nothing I do changes the way the light looks. It pretty much looks like it does in the picture in my previous post.

Ok I didn't know how to do this attenuation thing, so I tried it two ways

Code: Select all

  smgr->setAmbientLight(SColor(255, 255, 255, 255));
    ILightSceneNode* Light = smgr->addLightSceneNode();
    Light->setPosition(vector3df(0.0f, 200.0f, 0.0f));
  Light->setRadius(200);
  Light->getLightData().Attenuation = vector3df(0,150,0);
 
     SLight lightData;
    lightData.Type= ELT_POINT;
    Light->setLightData(lightData);
and I tried

Code: Select all

  smgr->setAmbientLight(SColor(255, 255, 255, 255));
    ILightSceneNode* Light = smgr->addLightSceneNode();
    Light->setPosition(vector3df(0.0f, 200.0f, 0.0f));
  Light->setRadius(200);
  
     SLight lightData;
    lightData.Attenuation = vector3df(0, 255, 0);
    lightData.Type= ELT_POINT;
    Light->setLightData(lightData);
I am not sure why some setting have to be in the SLight struct and some work directly on the light node. I am learning from peoples posts who might or might not know what they are talking about LOL.
Anyway to cut a long story short. Nothing I do seem to change the way the light works. It always looks the same.
mongoose7
Posts: 1227
Joined: Wed Apr 06, 2011 12:13 pm

Re: Dice and collsion

Post by mongoose7 »

Try setting the attenuation last, after Light->setLightData(lightData). Try setting the attenuation to (1., 0.001, 0.). Your scene is very big so I think you need a small linear attenuation value. Remember, you can always Google it. For example, http://www.glprogramming.com/red/chapter05.html
Asimov
Posts: 246
Joined: Thu Dec 04, 2014 7:41 pm
Contact:

Re: Dice and collsion

Post by Asimov »

Hi Mongoose,

Will try it when I get home, but that page is for OpenGL and not directx, which is what I am using.
Asimov
Posts: 246
Joined: Thu Dec 04, 2014 7:41 pm
Contact:

Re: Dice and collsion

Post by Asimov »

Hi mongoose,

Well thanks I now have a brighter room, but it wasn't to do with attenuation, but because of what you said I tried something else. I put the scale at the end, and then I thought it was the attenuation making the room brighter, but it wasn't. It was the scale. I have put various values in attenuation and it changes nothing, but changing the scale does. So now I have a brighter room.

Code: Select all

 smgr->setAmbientLight(SColor(255, 255, 255, 255));
    ILightSceneNode* Light = smgr->addLightSceneNode();
    Light->setPosition(vector3df(0.0f, 200.0f, 0.0f));
    SLight lightData;
    lightData.Type= ELT_POINT;
    Light->setLightData(lightData);
    Light->setRadius(200);
   // Light->getLightData().Attenuation = vector3df(255,150,0);
attenuation is commented out because it did nothing.
Image

Now I have a new problem. I changed my houses over to x files instead of obj, and now if I set light as true, they are coming out white instead of green. If I set light to false they are green. This one is really wierd.
Post Reply