thanhle wrote:There's a post by an author call feelthat.
I saw a few weeks back, he did transparent even for animated mesh.
I think he fixed other issues he found as well.
Actually there's also lot of posts on the related issue if you search the forum.
http://irrlicht.sourceforge.net/forum/v ... hp?t=31400
Regards
thanh
Thanks for the note, I did check his code and he is using "EMT_TRANSPARENT_ALPHA_CHANNEL" just like me in the following code below, but I set the alpha to zero and still the texture doesn't allow it to be transparent? I've tried other enumerators too, if you look you'll notice several, here's all of them
Code: Select all
video::EMT_TRANSPARENT_ALPHA_CHANNEL
video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF
video::EMT_TRANSPARENT_VERTEX_ALPHA
video::EMT_TRANSPARENT_ALPHA_CHANNEL
Code: Select all
#include <irrlicht.h>
using namespace irr;
class MyEventReceiver : public IEventReceiver
{
public:
struct SMouseState
{
core::position2di Position;
bool LeftButtonDown;
SMouseState() : LeftButtonDown(false) { }
} MouseState;
virtual bool OnEvent(const SEvent& event)
{
if (event.EventType == irr::EET_KEY_INPUT_EVENT)
KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown;
if(event.EventType == EET_MOUSE_INPUT_EVENT)
{
switch(event.MouseInput.Event)
{
case EMIE_LMOUSE_PRESSED_DOWN:
MouseState.LeftButtonDown = true;
break;
case EMIE_LMOUSE_LEFT_UP:
MouseState.LeftButtonDown = false;
break;
case EMIE_MOUSE_MOVED:
MouseState.Position.X = event.MouseInput.X;
MouseState.Position.Y = event.MouseInput.Y;
break;
default:
break;
}
}
return false;
}
// This is used to check whether a key is being held down
virtual bool IsKeyDown(EKEY_CODE keyCode) const
{
return KeyIsDown[keyCode];
}
const SMouseState & GetMouseState(void) const
{
return MouseState;
}
MyEventReceiver()
{
for (u32 i=0; i<KEY_KEY_CODES_COUNT; ++i)
KeyIsDown[i] = false;
}
private:
// We use this array to store the current state of each key
bool KeyIsDown[KEY_KEY_CODES_COUNT];
};
MyEventReceiver receiver;
IrrlichtDevice* device = 0;
const int SCRX = 640;
const int SCRY = 480;
const float radius = 5.0f;
int main()
{
device = createDevice( irr::video::EDT_OPENGL, core::dimension2d<u32>( SCRX, SCRY), 16, false, false, false, &receiver);
if (device == 0)
return 1;
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, true);
scene::ICameraSceneNode* cam = smgr->addCameraSceneNodeFPS( 0, 50.0f, 0.01f, -1, 0, 0, false, 0.0f, false, true);
device->getCursorControl()->setVisible(false);
scene::IMeshSceneNode* sphere = smgr->addSphereSceneNode(radius, 32, 0, -1, core::vector3df(0, 0, 0), core::vector3df(0, 0, 0), core::vector3df(1.0f, 1.0f, 1.0f));
sphere->setMaterialFlag(video::EMF_LIGHTING, false);
sphere->setMaterialTexture( 0, driver->getTexture("graph.jpg"));
//sphere->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL);
//sphere->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
//sphere->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);
sphere->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL);
scene::IMeshManipulator* mesh = smgr->getMeshManipulator();
mesh->setVertexColorAlpha(sphere->getMesh(), 0);
cam->setPosition( core::vector3df( 0, 0,-15));
cam->setTarget( core::vector3df( 0.0f, 0.0f, 0.0f));
int lastFPS = -1;
while(device->run())
if (device->isWindowActive())
{
driver->beginScene(true, true, video::SColor( 255, 0, 0, 0));
smgr->drawAll();
driver->endScene();
int fps = driver->getFPS();
if (lastFPS != fps)
{
core::stringw str = L"Irrlicht Text Node [";
str += driver->getName();
str += "] FPS:";
str += fps;
device->setWindowCaption(str.c_str());
lastFPS = fps;
}
device->sleep(50);
}
device->drop();
return 0;
}