Irrlicht code snippets

Tuesday, October 6, 2009

WRITE IMAGE TO FILE:

Code:

IImage* image = Device.driver->createScreenShot();

if (image)
{
Device.driver->writeImageToFile(image, "c:\\images\\dump.jpeg");
Device.driver->writeImageToFile(image, "c:\\images\\dump.png");
Device.driver->writeImageToFile(image, "c:\\images\\dump.bmp");
Device.driver->writeImageToFile(image, "c:\\images\\dump.tga");
Device.driver->writeImageToFile(image, "c:\\images\\dump.jpg");
image->drop();
}

LOAD IMAGE (256X256) FROM FILE, CHANGE PIXEL AND SAVE:
Code:

video::ITexture * image1 = driver->getTexture("d:\\x\\map.bmp");
//driver->makeColorKeyTexture(image1, core::position2d(0,0));
u8 * ff=(u8 *)image1->lock();
IImage* im = driver->createImageFromData(image1->getColorFormat(), dimension2d(256,256), ff);
im->setPixel(100,100,SColor(255,255,0,0));
driver->writeImageToFile(im,"D:\\x\\map.bmp");
im->drop();

CHANGE CAPTION FUNCTION:
Code:

void showCaptionVar(std::string txt)
{
std::string gio1=txt;
char gio2[512];
strcpy_s(gio2, gio1.c_str());
core::stringw gio3 = gio2;
device->setWindowCaption(gio3.c_str());
}

EVENTS:
Code:

class mvm:public IEventReceiver
{
public:
bool OnEvent(const SEvent &e)
{
static bool pwheel=false;
if (e.EventType==EEVENT_TYPE::EET_MOUSE_INPUT_EVENT)
{
if (e.MouseInput.Wheel==-1)
{
}else if (e.MouseInput.Wheel==1)
{
}
if (e.MouseInput.Event==irr::EMIE_RMOUSE_PRESSED_DOWN)
{
mox=e.MouseInput.X;
moy=e.MouseInput.Y;
}
if (e.MouseInput.Event==irr::EMIE_RMOUSE_LEFT_UP)
{
}
if (e.MouseInput.Event==irr::EMIE_MOUSE_MOVED)
{
}
}
if(e.MouseInput.Wheel)
{
if (pwheel==false)
{
//middle button down event
pwheel=true;
}else{
//middle button up event
pwheel=false;
}
}
if (e.EventType==irr::EEVENT_TYPE::EET_GUI_EVENT)
{
s32 id = e.GUIEvent.Caller->getID();
switch (e.GUIEvent.EventType)
{
case gui::EGUI_EVENT_TYPE::EGET_BUTTON_CLICKED:
{
if (id==2)
{

}
break;
}
case gui::EGUI_EVENT_TYPE::EGET_ELEMENT_FOCUSED
{
if (id==2)
{
//gui::
z=z+10;
}
break;
}
}
}
if (e.EventType==EET_KEY_INPUT_EVENT)
{
switch (e.KeyInput.Key)
{
case KEY_KEY_W:
{
wasd[0]=e.KeyInput.PressedDown;
break;
}
case KEY_ESCAPE:
{
device->closeDevice();
break;
}
return true;
}
return false;
}
return false;
}
};

BASIC VARIABLES:
Code:

#include "irrlicht.h"
#include
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#endif

IrrlichtDevice * device;
video::IVideoDriver * driver;
scene::ISceneManager * smgr;
scene::ICameraSceneNode * cam;

irr::SIrrlichtCreationParameters pars;
pars.EventReceiver=&receiver;
pars.AntiAlias=true;
pars.Fullscreen=true;
pars.DriverType=video::EDT_DIRECT3D9;
pars.WindowSize=core::dimension2d(1024,768);
pars.Bits=32;
device = createDeviceEx(pars);
driver = device->getVideoDriver();
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);

smgr = device->getSceneManager();
cam= smgr->addCameraSceneNode();
cam->setFarValue(50000.0f);

COLLISION DETECTION WITH BOUNDING BOXES
Code:

bool collision(ISceneNode* one, ISceneNode* two) {
aabbox3d b1, b2;

b1 = one->getBoundingBox ();
b2 = two->getBoundingBox ();

one->getRelativeTransformation().transformBoxEx( b1 );
two->getRelativeTransformation().transformBoxEx( b2 );
return b1.intersectsWithBox( b2 );
}
//OTHER WAY
//bool collision(ISceneNode* one, ISceneNode* two) {
//if(one->getTransformedBoundingBox().intersectsWithBox(two->getTransformedBoundingBox())) {
//return (one->getTransformedBoundingBox().intersectsWithBox(two->getTransformedBoundingBox()));
//}
//return false;
//}

SHOW BOUNDING BOX (debugging)
Code:

node->setDebugDataVisible(scene::EDS_BBOX);

MOVE NODE
Code:

core::vector3df v=node->getPosition();
v.X+=1.0f;
node->setPosition(vector3df(v));

TEXTURES
Code:

irr::video::ITexture * texture[1];
texture[0]=driver->getTexture("c:/x/0.bmp");
texture[1]=driver->getTexture("c:/x/1.bmp");
node->setMaterialTexture(0,texture[0]);
node->setMaterialTexture(1,texture[1]);
node->setMaterialFlag(EMF_LIGHTING, false);
node->setMaterialType(video::EMT_REFLECTION_2_LAYER);

REMOVE CONSOLE WINDOW
Code:

#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
int main()
{
return 0;
}

ATTACH TO BONE (Add Child to Joint)
Code:

ISceneNode * bone=node->getJointNode("Bone1");
bone->addChild(node2);

CREATE BILLBOARD
Code:

IBillboardSceneNode * bill = smgr->addBillboardSceneNode();
bill->setMaterialType(EMT_TRANSPARENT_ADD_COLOR );
bill->setMaterialTexture(0, driver->getTexture("c:/x/b1.bmp"));
bill->setMaterialFlag(video::EMF_LIGHTING, false);
bill->setSize(dimension2d(10.0f, 10.0f));
bill->setPosition(vector3df(1.0f, 0.0f, 110.0f));

ADD ANIMATOR
Code:

irr::scene::ISceneNodeAnimator * anim = smgr->createFlyCircleAnimator (core::vector3df(0,55,110),5.0f, 0.01,core::vector3df(1,0,1));
bill->addAnimator(anim);
anim->drop();

ADD LIGHT
Code:

scene::ILightSceneNode* nodeLight = smgr->addLightSceneNode(0, core::vector3df(100, 100, 100),
video::SColorf(1.0f,1.0f,1.0f,1.0f),
20000.0f);
video::SLight light;
light.Direction = core::vector3df(100, 100, 0);
light.Type = video::ELT_DIRECTIONAL;
light.AmbientColor = video::SColorf(0.3f,0.3f,0.3f,1);
light.SpecularColor= video::SColorf(0.4f,0.4f,0.4f,1);
light.DiffuseColor = video::SColorf(1.0f,1.0f,1.0f,1);
light.CastShadows = false;

nodeLight->setLightData(light);

CREATE A PARTICLE SYSTEM
Code:

// create a particle system
scene::IParticleSystemSceneNode* ps = smgr->addParticleSystemSceneNode(false);

scene::IParticleEmitter* em = ps->createBoxEmitter(
core::aabbox3d(-7,0,-7,7,1,7), // emitter size
core::vector3df(0.0f,-0.06f,0.0f), // initial direction
10,100, // emit rate
video::SColor(0,0,0,255), // darkest color
video::SColor(0,255,255,255), // brightest color
80,20000,0, // min and max age, angle
core::dimension2df(5.f,5.f), // min size
core::dimension2df(20.f,20.f)); // max size

ps->setEmitter(em); // this grabs the emitter
em->drop(); // so we can drop it here without deleting it

scene::IParticleAffector* paf = ps->createFadeOutParticleAffector();

ps->addAffector(paf); // same goes for the affector
paf->drop();

ps->setPosition(core::vector3df(10,450,0));
ps->setScale(core::vector3df(100,100,100));
ps->setMaterialFlag(video::EMF_LIGHTING, false);
ps->setMaterialFlag(video::EMF_ZWRITE_ENABLE, false);
ps->setMaterialTexture(0, driver->getTexture("c:/x/b1.bmp"));
ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);

CREATE WATER (addWaterSurfaceSceneNode)
Code:

IAnimatedMesh* plane = smgr->addHillPlaneMesh("floor", // Name of mesh
core::dimension2d(1,1), // Size of a tile of the mesh.
core::dimension2d(100,100), //tileCount - Specifies how much tiles there will be. If you specifiy for example that a tile has the size (10.0f, 10.0f) and the tileCount is (10,10), than you get a field of 100 tiles which has the dimension 100.0fx100.0f.
0, //material
0, //hillheight
core::dimension2d(10,10), //countHills
core::dimension2d(100,100)); // texturerepeat

ISceneNode* sea = smgr->addWaterSurfaceSceneNode(plane->getMesh(0), 2.0f, 350.0f, 8.0f,0,-1,vector3df(0,0,0),vector3df(10,0,0),vector3df(1,1,1));
sea->setMaterialTexture(0, driver->getTexture("c:/x/sand.png"));
sea->setMaterialTexture(1, driver->getTexture("c:/x/water.png"));
sea->setMaterialFlag(EMF_LIGHTING, true);
sea->setMaterialType(video::EMT_REFLECTION_2_LAYER);

GET DISTANCE BETWEEN NODES (addWaterSurfaceSceneNode)
Code:

ISceneNode* one;
ISceneNode* two;
one->getAbsolutePosition().getDistanceFrom(two->getAbsolutePosition());

NODE ANIMATION
Code:

myNode->setFrameLoop(1,15);
myNode->setAnimationSpeed(25);

CREATE FOG
Code:
driver->setFog(SColor(0,0, 0, 0),true, 150,220,0.01,false, false);
node->setMaterialFlag(video::EMF_FOG_ENABLE, true);

CREATE GUI ELEMENT
Code:
irr::gui::IGUIEnvironment *ige=smgr->getGUIEnvironment();

irr::gui::IGUIMeshViewer * gm=ige->addMeshViewer(rect(0,0,100,100),0,-1,0);
scene::IAnimatedMesh * mesh=smgr->getMesh("c:/x/cube.x");
gm->setMesh(mesh);

irr::gui::IGUIEditBox * txt=ige->addEditBox(L"giorgi",core::rect(150,150,300,200),true,0,-1);

GET NODE AT SCREEN 2D POSITION №1
Code:
scene::ISceneNode *node = smgr->getSceneCollisionManager()-> getSceneNodeFromScreenCoordinatesBB(position2d(mox,moy),0x1,false);

GET NODE AT SCREEN 2D POSITION №2
Code:
core::line3d line;
line=smgr->getSceneCollisionManager()->getRayFromScreenCoordinates(position2d(mox,moy),cam);
scene::ISceneNode *nodeline = smgr->getSceneCollisionManager()->getSceneNodeFromRayBB(line,0x1,false);

GET NODE AT SCREEN 2D POSITION №3 (exact selection without bounding box)
Code:
int idd=0;
int curid=0;
scene::ITriangleSelector * sel[100];

void gio::add()
{
idd++;
scene::IAnimatedMesh * mesha=smgr->getMesh("c:/x/apple/apple.x");
scene::IAnimatedMeshSceneNode *nd=smgr->addAnimatedMeshSceneNode(mesha,0,idd,core::vector3df(xx, yy, zz));
sel[idd] = smgr->createOctTreeTriangleSelector(mesha, nd, 128);
//If you wish to select animated node you can use:
//sel[idd] = smgr->createTriangleSelectorFromBoundingBox(nd);
nd->setTriangleSelector(sel[idd]);
}
core::line3d line;
core::vector3df intersection;
core::triangle3df tri;
line=smgr->getSceneCollisionManager()->getRayFromScreenCoordinates(position2d(mox,moy),cam);

int k=0;
for(k=0; k<=idd; k++)
{
if (smgr->getSceneCollisionManager()->getCollisionPoint(line, sel[k], intersection, tri))
{
curid=k;
break;
}
}
scene::IAnimatedMeshSceneNode *curnode=smgr->getSceneNodeFromId(curid);

SELECTOR - INTERSECTION POINT WITH 1) CAMERA VIEW - 2) MOUSE 2D COORDINATES
Code:
scene::IAnimatedMesh * ter = smgr->getMesh("c:/x/ter.3ds");
scene::ISceneNode * ternode=smgr->addOctTreeSceneNode(ter,0);
ternode->setMaterialFlag(video::EMF_LIGHTING,false);

scene::ITriangleSelector * selector = smgr->createOctTreeTriangleSelector(ter, ternode, 128);
ternode->setTriangleSelector(selector);


IBillboardSceneNode * bill = smgr->addBillboardSceneNode();
bill->setMaterialType(EMT_TRANSPARENT_ADD_COLOR );
bill->setMaterialTexture(0, driver->getTexture("c:/x/b1.bmp"));
bill->setMaterialFlag(video::EMF_LIGHTING, false);
bill->setSize(dimension2d(10.0f, 10.0f));
bill->setPosition(vector3df(1.0f, 0.0f, 110.0f));


core::line3d line;

//1) Intersection with camera:
line.start = cam->getPosition();
line.end = line.start + (cam->getTarget() - line.start).normalize() * 1000.0f;

//2) intersection with mousecoordinates:
//line=smgr->getSceneCollisionManager()->getRayFromScreenCoordinates(position2d(mox,moy),cam);



core::vector3df intersection;
core::triangle3df tri;

if (smgr->getSceneCollisionManager()->getCollisionPoint(line, selector, intersection, tri))
{
bill->setPosition(intersection);
}
Source: http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=34385

Read more...

2009 Sumatra earthquakes - The Big Picture - Boston.com

2009 Sumatra earthquakes - The Big Picture - Boston.com

Posted using ShareThis

Read more...

Altitude, the game

Sunday, October 4, 2009

Technorati Tags:

I found a really interesting game on the internet which is free, and can play multiplayer. The amazing thing is that it was developed using JAVA! this means you play it from the web browser or install (Windows, Mac, Linux).

 

 

If you are interested to try and play, here’s the link to start playing:

http://altitudegame.com/index.html

Read more...

Grand Theft Auto Precinct

Grand Theft Auto Precinct

Shared via AddThis

Read more...

Unique Living room PC case mod

 

Imagine having a living room for little people living inside your PC. :)

 

 

 

 

 

Source: http://forum.modding.ru/viewtopic.php?t=31539

Read more...

Bluetooth Watch with Caller ID Display

Saturday, October 3, 2009

A perfect companion for your cell phone

See who is calling or mute your phone's ringer!

Laziness is a virtue and something we aspire to whenever possible. Repetitive and demanding tasks that require a lot of work should be avoided at all costs. Instead, laziness should be inserted in the form of a program, or device, that performs the repetitive task for you.


Bluetooth Watch with Caller ID Display

Sure, you could look at your cell phone to see who is calling or push a button to mute the ringer and let them go to voicemail. But, instead, we think you should be as lazy as possible and use our Bluetooth Watch with Caller ID Display for these tasks. This watch keeps you connected in style by combining a vintage analog/digital watch design with Bluetooth Wireless technology. It notifies you when your phone rings with a discreet vibrating sensation and showing the caller's name and/or number on the bright OLED display. When an SMS/text message is received the watch will vibrate and the text alert icon will appear. You can mute your phone's ringer or reject a call by simply pushing a button on the watch.

Product Details

  • Displays caller name and/or number on screen (some phones only display number)
  • A text icon will appear when receiving text message (please note - this feature only works on some phones, mostly Sony Ericcson. This feature does NOT show the actual text message)
  • Mute your phone's ringer by pushing a button on the watch
  • Rechargeable battery with power save function
  • Bluetooth 2.0
  • 96x16 pixel OLED display
  • Leather band
  • Stainless steel case
  • Bluetooth pairing code "0000" (four zeroes)

Read more...

a game that deletes your desktop files

Friday, October 2, 2009

see here:
http://www.stfj.net/art/2009/loselose/


Read more...

backlink

Free Automatic Backlink

Followers

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP