Human::Human() { m_pStateMachine = NULL; m_p2DSprite = NULL; IVideoDriver* pDriver = IrrDvc.GetDriver(); video::ITexture* pTexture = pDriver->getTexture(HUMAN_TEXTUREFILENAME); pTexture->grab(); //상속을 했을 경우 소멸자에서 drop를 호출 하는 데 여기서 개수를 맞춰주지 않으면 //onExit 에서 에러 발생 후 죽음. 일단 임시 방편으로 텍스쳐 생성하고 grab을 호출 했는데 //추후 상의 한 후 수정해야 함 }
math::SRay EditorScene::computePickingRay(u32 sx, u32 sy) { IVideoDriver* driver = mDevice->getVideoDriver(); sx = (static_cast<f32>(sx)) / BufferWndWidth * driver->getBackBufferWidth(); sy = (static_cast<f32>(sy)) / BufferWndHeight * driver->getBackBufferHeight(); math::SRay ray = mSceneManager->getPickingRay(sx, sy); return ray; }
/** The test loads a texture, renders it using draw2dimage, loads another texture and renders the first one again. Due to the texture cache this can lead to rendering of the second texture in second place. */ static bool runTestWithDriver(E_DRIVER_TYPE driverType) { IrrlichtDevice *device = createDevice( driverType, dimension2d<s32>(160, 120), 32); if (!device) return true; // Treat a failure to create a driver as benign; this saves a lot of #ifdefs IVideoDriver* driver = device->getVideoDriver(); ISceneManager * smgr = device->getSceneManager(); ITexture* tex1 = driver->getTexture("../media/wall.bmp"); (void)smgr->addCameraSceneNode(); driver->beginScene(true, true, SColor(255,100,101,140)); driver->draw2DImage(tex1, position2di(0,0)); driver->endScene(); driver->getTexture("../media/tools.png"); driver->beginScene(true, true, SColor(255,100,101,140)); driver->draw2DImage(tex1, position2di(0,0)); driver->endScene(); bool result = takeScreenshotAndCompareAgainstReference(driver, "-textureRenderStates.png", 100); device->drop(); return result; }
/** * ドライバの情報表示 */ void IrrlichtBase::showDriverInfo() { IVideoDriver *driver = device->getVideoDriver(); if (driver) { dimension2d<s32> size = driver->getScreenSize(); message_log("デバイス生成後のスクリーンサイズ:%d, %d", size.Width, size.Height); size = driver->getCurrentRenderTargetSize(); message_log("デバイス生成後のRenderTargetの:%d, %d", size.Width, size.Height); } }
bool ProcGameIntro::OnExit(IrrlichtDevice& device) { EntityMgr.Reset(true); // should I need to clear all texture here? IVideoDriver* pDriver = IrrDvc.GetDriver(); pDriver->removeAllTextures(); return true; }
/** Verify that two skinned animated mesh scene nodes can use different frames of the skinned mesh */ bool b3dAnimation(void) { // Use EDT_BURNINGSVIDEO since it is not dependent on (e.g.) OpenGL driver versions. IrrlichtDevice *device = createDevice( EDT_BURNINGSVIDEO, dimension2d<s32>(160, 120), 32); assert(device); if (!device) return false; IVideoDriver* driver = device->getVideoDriver(); ISceneManager * smgr = device->getSceneManager(); IAnimatedMesh* mesh = smgr->getMesh("../media/ninja.b3d"); IAnimatedMeshSceneNode* node1; IAnimatedMeshSceneNode* node2; assert(mesh); bool result = false; if(mesh) { node1 = smgr->addAnimatedMeshSceneNode(mesh); assert(node1); if(node1) { node1->setPosition(vector3df(-3, -3, 10)); node1->setMaterialFlag(EMF_LIGHTING, false); node1->setAnimationSpeed(0.f); } node2 = smgr->addAnimatedMeshSceneNode(mesh); assert(node2); if(node2) { node2->setPosition(vector3df(3, -3, 10)); node2->setMaterialFlag(EMF_LIGHTING, false); node2->setAnimationSpeed(0.f); node2->setCurrentFrame(62.f); } (void)smgr->addCameraSceneNode(); // Just jump to the last frame since that's all we're interested in. device->run(); driver->beginScene(true, true, SColor(255, 255, 255, 0)); smgr->drawAll(); driver->endScene(); result = takeScreenshotAndCompareAgainstReference(driver, "-b3dAnimation.png"); } device->drop(); return result; }
int main() { SDeviceContextSettings settings; settings.MultiSamplingCount = 4; settings.MultiSamplingQuality = 32; IApplication* device = createDevice(EDT_DIRECT3D11, 800, 600, EWS_NONE, true, settings); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->createSceneManager(); IMeshManager* meshManager = driver->getMeshManager(); IResourceGroupManager* resourceGroupManager = driver->getResourceGroupManager(); resourceGroupManager->init("Resources.cfg"); //resourceGroupManager->loadResourceGroup("General"); XMFLOAT3 vertices[4]; vertices[0] = XMFLOAT3(-10.0f, 0.0f, 10.0f); vertices[1] = XMFLOAT3(10.0f, 0.0f, 10.0f); vertices[2] = XMFLOAT3(-10.0f, 0.0f, -10.0f); vertices[3] = XMFLOAT3(10.0f, 0.0f, -10.0f); ISimpleMesh* mesh = meshManager->createSimpleMesh("pointlist", EVF_POSITION, vertices, NULL, 4, sizeof(XMFLOAT3), 0, math::SAxisAlignedBox(), false); IMeshNode* meshNode = smgr->addMeshNode(mesh, nullptr, nullptr); meshNode->setMaterialName("test/ts_material"); meshNode->setNeedCulling(false); ICameraNode* camera = smgr->addFpsCameraNode(1, nullptr, XMFLOAT3(0, 1.0f, -4.0f), XMFLOAT3(0, 1.0f, 0.0f)); char caption[200]; ITimer* timer = device->getTimer(); timer->reset(); while (device->run()) { const float clearColor[] = { 0.0f, 0.0f, 0.0f, 1.0f }; driver->beginScene(true, true, clearColor); float dt = timer->tick() * 0.001f; updateCamera(camera, dt); smgr->update(dt); smgr->drawAll(); driver->endScene(); sprintf(caption, "FPS:%f", getFps(dt)); device->setWindowCaption(caption); } device->drop(); return 0; }
TextureDialog::TextureDialog(EditorState *pstate, Node *pnode, CubeSide pface): Dialog(pstate), node(pnode), face(pface), lb(NULL), the_image(NULL), context(NULL) { IVideoDriver *driver = state->device->getVideoDriver(); IGUIEnvironment *guienv = state->device->getGUIEnvironment(); // Window and basic items win = guienv->addWindow(rect<s32>(340, 50, 340 + 74 * 3 + 10, 50 + 74 * 3 + 10), true, narrow_to_wide(std::string(getCubeSideName(face)) + " texture").c_str()); guienv->addButton(rect<s32>(155, 30, 74*3, 55), win, ETD_GUI_ID_APPLY, L"Apply", L"Apply this texture selection to the node face"); guienv->addButton(rect<s32>(155, 60, 74*3, 85), win, ETD_GUI_ID_IMPORT, L"Import", L"Import images from files"); guienv->addButton(rect<s32>(84, 60, 150, 85), win, ETD_GUI_ID_ACTIONS, L"Actions"); // Fill out listbox lb = guienv->addListBox(rect<s32>(10, 104, 74 * 3, 74 * 3), win, 502); Media *media = &state->project->media; std::map<std::string, Media::Image*>& images = media->getList(); int count = 1; lb->addItem(L""); lb->setSelected(0); for (std::map<std::string, Media::Image*>::const_iterator it = images.begin(); it != images.end(); ++it) { if (!it->second) { continue; } if (it->second->name == "default") { lb->addItem(L""); } else { lb->addItem(narrow_to_wide(it->second->name + " [used " + num_to_str(it->second->getHolders()) + " times]").c_str()); } if (it->second == node->getTexture(face)) lb->setSelected(count); count++; } Media::Image *image = node->getTexture(face); if (image) { the_image = driver->addTexture("tmpicon.png", image->get()); } // Context menu context = guienv->addContextMenu(rect<s32>(84, 85, 150, 180), win, ETD_GUI_ID_ACTIONS_CM); context->addItem(L"Export", ETD_GUI_ID_EXPORT); context->setCloseHandling(ECMC_HIDE); context->setVisible(false); context->setEventParent(win); }
void Editor::LoadScene() { IVideoDriver *driver = device->getVideoDriver(); ISceneManager *smgr = device->getSceneManager(); // Calculate Projection Matrix matrix4 projMat; irr::f32 orth_w = (float)(driver->getScreenSize().Width - 256) / (float)driver->getScreenSize().Height; orth_w = 3 * orth_w; projMat.buildProjectionMatrixOrthoLH(orth_w, 3, 1, 100); // Create target target = smgr->addEmptySceneNode(0, 200); target->setPosition(vector3df(0, 0, 0)); // Add rotational camera pivot = smgr->addEmptySceneNode(target, 199); camera[0] = smgr->addCameraSceneNode(NULL, vector3df(0, 0, -2), vector3df(0, 0, 0)); camera[0]->setParent(pivot); pivot->setRotation(vector3df(25, -45, 0)); // Add Topdown camera camera[1] = smgr->addCameraSceneNode(target, vector3df(0, 2, -0.01), vector3df(0, 0, 0)); camera[1]->setProjectionMatrix(projMat, true); // Add front camera camera[2] = smgr->addCameraSceneNode(target, vector3df(0, 0, -5), vector3df(0, 0, 0)); camera[2]->setProjectionMatrix(projMat, true); // Add side camera camera[3] = smgr->addCameraSceneNode(target, vector3df(5, 0, 0), vector3df(0, 0, 0)); camera[3]->setProjectionMatrix(projMat, true); // Add Light ILightSceneNode* light = smgr->addLightSceneNode(target, vector3df(25, 50, 0)); light->setLightType(ELT_POINT); light->setRadius(2000); // Add Plane IMeshSceneNode* plane = smgr->addCubeSceneNode(1, 0, -1, vector3df(0.5, -5.5, 0.5), vector3df(0, 0, 0), vector3df(10, 10, 10)); plane->setMaterialTexture(0, driver->getTexture("media/texture_terrain.png")); plane->setMaterialFlag(video::EMF_BILINEAR_FILTER, false); plane->getMaterial(0).getTextureMatrix(0).setTextureScale(10, 10); // Add sky box scene::IMeshSceneNode* skybox = smgr->addCubeSceneNode(50); skybox->setMaterialTexture(0, driver->getTexture("media/sky.jpg")); skybox->setMaterialFlag(video::EMF_BILINEAR_FILTER, false); skybox->setMaterialFlag(video::EMF_LIGHTING, false); smgr->getMeshManipulator()->flipSurfaces(skybox->getMesh()); state->plane_tri = smgr->createOctreeTriangleSelector(skybox->getMesh(), skybox); }
Car::Car(vector3df position, f64 radius, vector3df velocity, f64 maxSpeed, vector3df heading, f64 mass, vector3df scale, f64 turnRate, f64 maxForce) : MovingEntity(position, radius, velocity, maxSpeed, heading, mass, scale, turnRate, maxForce), m_pSceneNode(null), m_pStateMachine(null), m_p2DSprite(null), m_pCarPhaysics(null), m_pMesh(null) { // get ready state machine m_pStateMachine = new StateMachine<Car>(this); // start from nothing m_pStateMachine->ChangeState(IdleCar::Instance()); // get ready sprite ISceneManager* pSmgr = IrrDvc.GetSmgr(); IVideoDriver* pDriver = IrrDvc.GetDriver(); m_p2DSprite = pSmgr->addBillboardSceneNode(); m_p2DSprite->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL); video::ITexture* pTexture = pDriver->getTexture("Rsrc/car.tga"); // shkim, TODO. // why should I grap this texture here? as a result, get(+1)->grab(+1)->drop(-1) will give reference count as 1. // that means nobody know when I release texture after using at all. how do I figure it out? // answer is, keeping texture resource during Proc life time. it means loading texture at Proc initializing time and releasing them at Proc releasing time. // for doing that, need to use grab/drop pair after getTexture() pTexture->grab(); m_p2DSprite->setMaterialTexture(0, pTexture); m_p2DSprite->setMaterialFlag(video::EMF_LIGHTING, false); m_p2DSprite->setMaterialFlag(video::EMF_ZBUFFER, true); m_p2DSprite->setMaterialFlag(video::EMF_ZWRITE_ENABLE, true); m_p2DSprite->setSize(dimension2df(scale.X, scale.Y)); m_p2DSprite->setPosition(position); m_p2DSprite->setID(ID()); // get ready 3d scene node #ifdef DRAW_CAR_3D_MODEL // shkim, do not draw mode now m_pMesh = pSmgr->getMesh("Rsrc/cube.xml"); m_pSceneNode = pSmgr->addAnimatedMeshSceneNode(m_pMesh); m_pSceneNode->setPosition(vector3df(0.f, 0.f, 0.f)); m_pSceneNode->setRotation(vector3df(0.f, 0.f, 0.f)); m_pSceneNode->setScale(vector3df(4.f, 8.f, 1.f)); m_pSceneNode->setMaterialFlag(EMF_LIGHTING, false); #endif // DRAW_CAR_3D_MODEL // get ready physics model m_pCarPhaysics = new iforce2d_TopdownCar(&Box2dWld.GetWorld()); }
bool ProcTitle::OnExit(irr::IrrlichtDevice& device) { IGUIEnvironment* env = device.getGUIEnvironment(); env->clear(); // should I need to clear all texture here? IVideoDriver* pDriver = IrrDvc.GetDriver(); pDriver->removeAllTextures(); return true; }
DummyObject::DummyObject(vector3df position, double radius, vector3df velocity, double maxSpeed, vector3df heading, double mass, vector3df scale, double turnRate, double maxForce) : BasePlayer(position, radius, velocity, maxSpeed, heading, mass, scale, turnRate, maxForce, PLAYER_ROLE_CHASER) { m_pStateMachine = new StateMachine<DummyObject>(this); // start from idle state m_pStateMachine->SetCurrentState(IdleDummy::Instance()); // get ready sprite #if USE_BILL_BOARD_SPRITE ISceneManager* pSmgr = IrrDevice::GetInstance().GetSmgr(); m_p2DSprite = new BillBoard(pSmgr->getRootSceneNode(), pSmgr, 300); m_p2DSprite->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL); ITexture* pTexture = IrrDevice::GetInstance().GetDriver()->getTexture("Rsrc/hero.bmp"); m_p2DSprite->setMaterialTexture(0, pTexture); m_p2DSprite->setMaterialFlag(video::EMF_LIGHTING, false); m_p2DSprite->setMaterialFlag(video::EMF_ZBUFFER, false); m_p2DSprite->setPosition(position); m_p2DSprite->setID(0); m_p2DSprite->getMaterial(0).getTextureMatrix(0).setTextureScale(0.5f,0.5f); #else ISceneManager* pSmgr = IrrDvc.GetSmgr(); IVideoDriver* pDriver = IrrDvc.GetDriver(); m_p2DSprite = pSmgr->addBillboardSceneNode(); m_p2DSprite->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL); video::ITexture* pTexture = pDriver->getTexture("Rsrc/hero.tga"); pTexture->grab(); m_p2DSprite->setMaterialTexture(0, pTexture); m_p2DSprite->setMaterialFlag(video::EMF_LIGHTING, false); m_p2DSprite->setMaterialFlag(video::EMF_ZBUFFER, true); m_p2DSprite->setMaterialFlag(video::EMF_ZWRITE_ENABLE, true); m_p2DSprite->setSize(dimension2df(scale.X, scale.Y)); m_p2DSprite->setPosition(position); m_p2DSprite->setID(ID()); m_p2DSprite->getMaterial(0).getTextureMatrix(0).setTextureScale(0.5f,0.5f); m_initState = DUMMY_STATE_IDLECHASER; //patrol¿¡ »ç¿ëµÉ µ¥ÀÌŸ ÃßÈÄ ·¹º§ µðÀÚÀÎµÈ ½ºÅ©¸³Æ®¿¡ ÀÇÇØ ™VÆõǵµ·Ï ¼öÁ¤¿ä //ÇöÀç MoviingEntity ¿Í º¯¼ö ¿¬°áÀº ³ªÁß¿¡ AI Å×½ºÆ®¸¦ À§ÇØ Àӽ÷Π¸¸µê. m_fSpeed = 30.0f; m_bDirection=true; m_3dfStart = this->Pos()-vector3df(30.0f,0.0f,0.0f); m_3dfDest= this->Pos()+vector3df(30.0f,0.0f,0.0f); #endif }
void GUIForumPostItem::draw() { if ( !IsVisible ) return; IVideoDriver* pVideo = Environment->getVideoDriver(); SColor black(255, 0, 0, 0), darkBlue(255, 0, 0, 128); pVideo->draw2DRectangle( AbsoluteRect, black, black, darkBlue, darkBlue, &AbsoluteClippingRect ); IGUIElement::draw(); }
void CLightSceneNode::setVisible(bool isVisible) { ISceneNode::setVisible(isVisible); if (DriverLightIndex < 0) return; IVideoDriver* driver = SceneManager->getVideoDriver(); if (!driver) return; LightIsOn = isVisible; driver->turnLightOn((UINT32)DriverLightIndex, LightIsOn); }
// ---------------------------------------------------------------------------- ITexture* Terrain::createSplattingImg() { IVideoDriver* vd = Editor::getEditor()->getVideoDriver(); auto img = autoDropped( vd->createImage(ECF_A8R8G8B8, dimension2du(SPIMG_X, SPIMG_Y))); for (u32 i = 0; i < SPIMG_X; i++) for (u32 j = 0; j < SPIMG_Y; j++) img->setPixel(i, j, SColor(255, 0, 0, 0)); return vd->addTexture("splatt.png", img.get()); } // initSplattingImg
// ---------------------------------------------------------------------------- void CheckLineHandler::draw() { IVideoDriver* vd = Editor::getEditor()->getVideoDriver(); std::list<CheckLine>::iterator it = m_check_lines.begin(); while (it != m_check_lines.end() && it->active) { vd->draw3DLine(it->n1->getPosition(), it->n2->getPosition(), SColor(255, 255, 0, 0)); it++; } } // draw
void IrrlichtSimpleDevice::_setSize() { if (useRender) { TVPThrowExceptionMessage(L"can't change width/height when render mode"); } if (device) { IVideoDriver *driver = device->getVideoDriver(); if (driver) { driver->OnResize(dimension2d<s32>(width, height)); } } }
// removeAllTexture // free memory texture void CTextureManager::removeAllTexture() { IVideoDriver *driver = getIView()->getDriver(); std::vector<ITexture*>::iterator i = m_textureList.begin(), end = m_textureList.end(); while (i != end ) { printf("Remove Texture: %s\n", (*i)->getName().getPath().c_str() ); driver->removeTexture( (*i) ); i++; } m_textureList.clear(); }
//! Tests lightmaps under all drivers that support them static bool runTestWithDriver(E_DRIVER_TYPE driverType) { IrrlichtDevice *device = createDevice( driverType, dimension2d<u32>(160, 120), 32); if (!device) return true; // Treat a failure to create a driver as benign; this saves a lot of #ifdefs IVideoDriver* driver = device->getVideoDriver(); ISceneManager * smgr = device->getSceneManager(); logTestString("Testing driver %ls\n", driver->getName()); if (driver->getDriverAttributes().getAttributeAsInt("MaxTextures")<2) { device->closeDevice(); device->run(); device->drop(); return true; } stabilizeScreenBackground(driver); bool result = true; bool added = device->getFileSystem()->addFileArchive("../media/map-20kdm2.pk3"); assert_log(added); if(added) { ISceneNode * node = smgr->addOctreeSceneNode(smgr->getMesh("20kdm2.bsp")->getMesh(0), 0, -1, 1024); assert_log(node); if (node) { node->setMaterialFlag(EMF_LIGHTING, false); node->setPosition(core::vector3df(-1300,-820,-1249)); node->setScale(core::vector3df(1, 5, 1)); (void)smgr->addCameraSceneNode(0, core::vector3df(0,0,0), core::vector3df(40,100,30)); driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(255,255,255,0)); smgr->drawAll(); driver->endScene(); result = takeScreenshotAndCompareAgainstReference(driver, "-lightmaps.png", 96); } } device->closeDevice(); device->run(); device->drop(); return result; }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Lens Flare", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); IAnimatedMeshSceneNode* node2 = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node2->setMaterialFlag( EMF_LIGHTING, false ); node2->setMD2Animation( scene::EMAT_STAND ); node2->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); node2->setPosition( vector3df( 20.0f, 0.0f, 0.0f ) ); ICameraSceneNode* cam = smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); ISceneNode* sun = smgr->addSphereSceneNode( 50.0f, 16 ); sun->setPosition( vector3df( 0.0f, 50.0f, 1000.0f ) ); sun->setMaterialFlag( EMF_LIGHTING, false ); sun->setMaterialTexture( 0, driver->getTexture("sun.png") ); // Interesting stuff // As before, we make a renderer IPostProc* ppRenderer = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); // Now make a flare effect: // (render from, output size, sun scene node) // can also use a vector instead of a scene node - when using a scene node the position will follow node automatically CLensFlarePostProc* ppFlare1 = new CLensFlarePostProc( ppRenderer, dimension2di( 1024, 512 ), driver->getTexture("flare.png"), sun, 50.0f ); CLensFlarePostProc* ppFlare2 = new CLensFlarePostProc( ppFlare1, dimension2di( 1024, 512 ), driver->getTexture("flare.png"), vector3df( -2000.0f, 50.0f, 1000.0f ) ); ppFlare2->setQuality( PPQ_CRUDE ); // Setting the quality to crude avoids pixel checking, which is slow (expecially when more than one lens flare), so if you use >1 flare, set most of them to crude. // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { cam->setPosition( vector3df( -(device->getCursorControl( )->getPosition( ).X - 320.0f) * 0.1f, (device->getCursorControl( )->getPosition( ).Y - 240.0f) * 0.2f, -70.0f ) ); driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); ppFlare2->render( NULL ); guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } delete ppFlare1; delete ppFlare2; delete ppRenderer; // Back to boring stuff device->drop(); return 0; }
void pass(spNativeTexture srcTexture, const Rect& srcRect, spNativeTexture destTexture, const Rect& destRect, const Color& color) { IVideoDriver* driver = IVideoDriver::instance; const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(driver->getVertexDeclaration(vertexPCT2::FORMAT)); driver->setRenderTarget(destTexture); driver->clear(0); driver->setViewport(destRect); driver->setTexture(0, srcTexture); vertexPCT2 v[4]; RectF dst = srcRect.cast<RectF>() / Vector2((float)srcTexture->getWidth(), (float)srcTexture->getHeight()); fillQuadT(v, dst, RectF(-1, -1, 2, 2), AffineTransform::getIdentity(), color.rgba()); driver->draw(IVideoDriver::PT_TRIANGLE_STRIP, decl, v, sizeof(v)); driver->setTexture(0, 0); }
ISceneNode* MySceneManager::addRunWaySceneNode( const core::vector3df& position /*= core::vector3df( 0 )*/, f32 interval /*= 200*/, f32 width /*= 300*/, const core::vector3df& colorFrom /*= core::vector3df( 0, 63, 255 )*/, const core::vector3df& colorTo /*= core::vector3df( 255, 255, 0 )*/, s32 numOfArrows /*= 15 */ ) { MyIrrlichtEngine* pEngine = MyIrrlichtEngine::GetEngine(); ISceneManager* smgr = pEngine->GetSceneManager(); IVideoDriver* driver = pEngine->GetVideoDriver(); u32 TimeMs = pEngine->GetDevice()->getTimer()->getTime(); f32 delay = 100; // 跑道根节点 ISceneNode* runWay = smgr->addEmptySceneNode(); runWay->setPosition( position ); // 供复制的节点 ISceneNode* node = smgr->addMeshSceneNode( smgr->getMesh( "../media/UnitModel/UnitPlane.obj" ), runWay ); node->setScale( vector3df( 90, 176, 1 ) ); node->setRotation( vector3df( 0, 45, 0 ) ); node->setMaterialTexture( 0, driver->getTexture( "../media/UIResource/Game/arrow.png" ) ); node->setMaterialFlag( EMF_BACK_FACE_CULLING, false ); // 节点临时变量 ISceneNode* copy; // Shader SceneNodeShader shader; // 色彩偏移量 vector3df colorOffset = ( colorTo - colorFrom ) / (f32)numOfArrows; // 右跑道 for( int i=0; i<numOfArrows; i++ ) { copy = node->clone(); copy->setPosition( vector3df( width / 2.f, 0, interval * i ) ); RunWayBlink* ani = new RunWayBlink( (u32)(delay * i), (f32)i, colorFrom, colorOffset ); copy->addAnimator( ani ); ani->drop(); } node->setRotation( vector3df( 0, 45, 180 ) ); // 左跑道 for( int i=0; i<numOfArrows; i++ ) { copy = node->clone(); copy->setPosition( vector3df( -width / 2.f, 0, interval * i ) ); RunWayBlink* ani = new RunWayBlink( (u32)(delay * i), (f32)i, colorFrom, colorOffset ); copy->addAnimator( ani ); ani->drop(); } node->setVisible( false ); return runWay; //return CreateRunWay( position, interval, width, colorFrom, colorTo, numOfArrows ); }
Ztunnel::Ztunnel(vector3df position, double radius, irr::core::vector3df velocity, double maxSpeed, irr::core::vector3df heading, double mass, irr::core::vector3df scale, double turnRate, double maxForce, ZTUNNEL_TYPE initState, BlackBoard* pbb) : BasePlayer(position, radius, velocity, maxSpeed, heading, mass, scale, turnRate, maxForce) { m_pStateMachine = new StateMachine<Ztunnel>(this); // start from idle state m_pStateMachine->SetCurrentState(IdleZtunnel::Instance()); // get ready sprite ISceneManager* pSmgr = IrrDvc.GetSmgr(); IVideoDriver* pDriver = IrrDvc.GetDriver(); m_p2DSprite = pSmgr->addBillboardSceneNode(); m_p2DSprite->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL); video::ITexture* pTexture = pDriver->getTexture("Rsrc/z_tunnel2.tga"); pTexture->grab(); m_p2DSprite->setMaterialTexture(0, pTexture); m_p2DSprite->setMaterialFlag(video::EMF_LIGHTING, false); m_p2DSprite->setMaterialFlag(video::EMF_ZBUFFER, true); m_p2DSprite->setMaterialFlag(video::EMF_ZWRITE_ENABLE, true); //m_p2DSprite->setSize(dimension2df(scale.X, scale.Y)); m_p2DSprite->setPosition(position); m_p2DSprite->setID(ID()); // m_p2DSprite->getMaterial(0).getTextureMatrix(0).setTextureScale(0.5f,0.5f); m_State = initState; //create skill CreateBasicZSkill* pcreatebasicZskill = new CreateBasicZSkill("CreateBasicZ", this, 0.5);//name,baseplayer, prof skills.insert(pair<std::string,Skill*>(pcreatebasicZskill->getName(), pcreatebasicZskill)); //create mission m_pBlacBoard = pbb; Mission* pMissionCreateBasdiZ = new Mission("CreateBasicZ",1,1); m_pBlacBoard->addMission(pMissionCreateBasdiZ); Mission* pMissionAttackBuilding = new LocatableMission("AttackBuilding",2,1,vector2df(-75,-75)); m_pBlacBoard->addMission(pMissionAttackBuilding); }
static bool loadScene(void) { IrrlichtDevice *device = createDevice(video::EDT_BURNINGSVIDEO, core::dimension2du(160,120), 32); if (!device) return false; IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); // load scene from example, with correct relative path device->getFileSystem()->changeWorkingDirectoryTo("results"); smgr->loadScene("../../media/example.irr"); smgr->addCameraSceneNode(0, core::vector3df(0,0,-50)); device->getFileSystem()->changeWorkingDirectoryTo(".."); bool result = false; device->run(); device->getTimer()->setTime(666); // scene has animations and current scene seems to be saved at that time ... really - best result with just that number :-) if (driver->beginScene(true, true, video::SColor(0, 80, 80, 80))) { smgr->drawAll(); driver->endScene(); // we need to be very sloppy, because the animators will produce a different // start depending on the actual loading time. 97% seems to be safe, as removing // an object produces values around 95% result = takeScreenshotAndCompareAgainstReference(driver, "-loadScene.png", 97.4f); if (!result) logTestString("Rendering the loaded scene failed.\n"); } ISceneNode* node = smgr->getSceneNodeFromId(128); if (!node) result=false; else if (result) // only check if scene was correctly loaded { result &= (node->getChildren().size()==0); if (!result) logTestString("Node has an illegal child node.\n"); device->getSceneManager()->loadScene("results/scene2.irr", 0, node); result &= (node->getChildren().size()!=0); if (!result) logTestString("Loading second scene as child failed.\n"); } device->closeDevice(); device->run(); device->drop(); return result; }
/** Test the behaviour of makeColorKeyTexture() using both 16 bit (software) and 32 bit (Burning) textures, with the new behaviour and the legacy behaviour. */ static bool doTestWith(E_DRIVER_TYPE driverType, bool zeroTexels) { IrrlichtDevice *device = createDevice( driverType, dimension2d<u32>(160, 120), 32); if (!device) return false; IVideoDriver* driver = device->getVideoDriver(); ISceneManager * smgr = device->getSceneManager(); // Draw a cube background so that we can check that the keying is working. ISceneNode * cube = smgr->addCubeSceneNode(50.f, 0, -1, vector3df(0, 0, 60)); cube->setMaterialTexture(0, driver->getTexture("../media/wall.bmp")); cube->setMaterialFlag(video::EMF_LIGHTING, false); ITexture * Texture = device->getVideoDriver()->getTexture("../media/portal2.bmp"); device->getVideoDriver()->makeColorKeyTexture(Texture, position2d<s32>(64,64), zeroTexels); device->getVideoDriver()->makeColorKeyTexture(Texture, position2d<s32>(64,64), zeroTexels); (void)smgr->addCameraSceneNode(); driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, SColor(255,100,101,140)); smgr->drawAll(); driver->draw2DImage(Texture, position2di(40, 40), rect<s32>(0, 0, Texture->getSize().Width, Texture->getSize().Height), 0, SColor(255,255,255,255), true); driver->endScene(); char screenshotName[256]; (void)snprintf_irr(screenshotName, 256, "-makeColorKeyTexture-%s.png", zeroTexels? "old" : "new"); bool result = takeScreenshotAndCompareAgainstReference(driver, screenshotName); device->closeDevice(); device->run(); device->drop(); return result; }
int main() { IrrlichtDevice *device = createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640, 480), 16, false, false, false, 0); if (!device) return 1; device->setWindowCaption(L"Have a go here: Chapter 3"); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IAnimatedMesh* mesh = smgr->getMesh("/home/fuyajun/Documents/irrlicht-1.7.2/media/sydney.md2"); if (!mesh) { device->drop(); return 1; } IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh ); MyAnimationEndCallback animEndCallback; //连续动画 if (node) { node->setMaterialFlag(EMF_LIGHTING, false); node->setMD2Animation(scene::EMAT_STAND); node->setMaterialTexture( 0, driver->getTexture("/home/fuyajun/Documents/irrlicht-1.7.2/media/sydney.bmp") ); node->setLoopMode(false); node->setAnimationEndCallback(&animEndCallback); } smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); while(device->run()) { driver->beginScene(true, true, SColor(255,100,101,140)); smgr->drawAll(); driver->endScene(); } device->drop(); return 0; }
int main() { device = createDevice(EDT_OPENGL, dimension2d<u32>(screenWidth, screenHeight), 16, false, false, false, 0); if (!device) return 1; IVideoDriver* driver = device->getVideoDriver(); MyEventReceiver receiver; device->setEventReceiver(&receiver); image = driver->getTexture("/home/fuyajun/Documents/irrlicht-1.7.2/media/fireball.bmp"); position.set(0,0); direction.set(1,1); u32 then = device->getTimer()->getTime(); while (device->run()) { const u32 now = device->getTimer()->getTime(); const f32 deltaTime = (f32)(now - then); then = now; update(deltaTime); driver->beginScene(true, true, SColor(255,255,255,255)); driver->draw2DImage(image, position2d<s32>((s32)position.X, (s32)position.Y), rect<s32>(0, 0, 32, 32), 0, SColor(255, 255, 255, 255), true); driver->endScene(); core::stringw str = L"x: "; str += target.X; str += ", y: "; str += target.Y; str += ", posX: "; str += position.X; str += ", posY: "; str += position.Y; device->setWindowCaption(str.c_str()); } device->drop(); return 0; }
/** * Irrlicht描画処理 * @param destRect 描画先領域 * @param srcRect 描画元領域 * @param destDC 描画先DC * @return 描画された */ bool IrrlichtBase::show(irr::core::rect<irr::s32> *destRect, irr::core::rect<irr::s32> *srcRect, HDC destDC) { if (device) { // 時間を進める XXX tick を外部から与えられないか? device->getTimer()->tick(); IVideoDriver *driver = device->getVideoDriver(); // 描画開始 if (driver && driver->beginScene(true, true, irr::video::SColor(0,0,0,0))) { if ((eventMask & EMASK_BEFORE_SCENE)) { sendTJSEvent(L"onBeforeScene"); } /// シーンマネージャの描画 ISceneManager *smgr = device->getSceneManager(); if (smgr) { smgr->drawAll(); } if ((eventMask & EMASK_AFTER_SCENE)) { sendTJSEvent(L"onAfterScene"); } // 固有処理 update(driver); if ((eventMask & EMASK_BEFORE_GUI)) { sendTJSEvent(L"onBeforeGUI"); } // GUIの描画 IGUIEnvironment *gui = device->getGUIEnvironment(); if (gui) { gui->drawAll(); } if ((eventMask & EMASK_AFTER_GUI)) { sendTJSEvent(L"onAfterGUI"); } // 描画完了 driver->endScene(0, srcRect, destRect, destDC); return true; } } return false; };
NaviPlayer::~NaviPlayer() { delete m_pStateMachine; // remove this scene node from parent m_p2DSprite->remove(); // release texture resource IVideoDriver* pDriver = IrrDvc.GetDriver(); ITexture* pTexture = pDriver->getTexture("Rsrc/hero.tga"); if (pTexture) { pTexture->drop(); } }
DummyObject::~DummyObject() { delete m_pStateMachine; m_p2DSprite->remove(); // release texture resources IVideoDriver* pDriver = IrrDvc.GetDriver(); //ITexture* pTexture = pDriver->getTexture("Rsrc/bullet.tga"); ITexture* pTexture = pDriver->getTexture("Rsrc/z_tunnel2.tga"); if (pTexture) { pTexture->drop(); } }