void MinimapEyeshot::loadMinimapMask() { if(!m_pMinimapMask) { m_pMinimapMask = getRenderEngine()->getRenderSystem()->getTextureManager()->createTextureFromFile("data\\Maps\\MinimapMask.raw",FO_POINT,FO_POINT,FO_NONE,TAM_CLAMP_TO_EDGE,TAM_CLAMP_TO_EDGE); } }
void GroundEyeshot::drawTileLine() { int nViewTopX = m_Eyeshot.getViewTopX(); int nViewTopY = m_Eyeshot.getViewTopY(); xs::Point ktl(nViewTopX / 64,nViewTopY / 32); int col = m_Eyeshot.getViewWidth() / 64 + 2; int row = m_Eyeshot.getViewHeight() / 32 + 2; int w = col * 64; int h = col * 32; IRenderEngine *pRenderEngine = getRenderEngine(); IRenderSystem *pRenderSystem = pRenderEngine->getRenderSystem(); ColorValue color = pRenderSystem->getColor(); pRenderSystem->beginPrimitive(PT_LINES); // 绿色 pRenderSystem->setColor(ColorValue(0,0.48f,0)); int x = -(nViewTopX - ktl.x * 64); int y = -(nViewTopY - ktl.y * 32) - h + 16; for(int i = 0; i < col; i++) { xs::Point ptFrom (x,y); xs::Point ptTo (x + w, y + h); pRenderSystem->sendVertex(Vector3(ptFrom.x,ptFrom.y,-0.998)); pRenderSystem->sendVertex(Vector3(ptTo.x,ptTo.y,-0.998)); y += 32; } for(int i = 0; i < row; i++) { xs::Point ptFrom (x,y); xs::Point ptTo (x + w, y + h); pRenderSystem->sendVertex(Vector3(ptFrom.x,ptFrom.y,-0.998)); pRenderSystem->sendVertex(Vector3(ptTo.x,ptTo.y,-0.998)); ptFrom.x = x; ptFrom.y = y; ptTo.x = x + w; ptTo.y = y - h; pRenderSystem->sendVertex(Vector3(ptFrom.x,ptFrom.y,-0.998)); pRenderSystem->sendVertex(Vector3(ptTo.x,ptTo.y,-0.998)); y += 32; } for(int i = 0; i < col; i++) { xs::Point ptFrom (x,y); xs::Point ptTo (x + w, y - h); pRenderSystem->sendVertex(Vector3(ptFrom.x,ptFrom.y,-0.998)); pRenderSystem->sendVertex(Vector3(ptTo.x,ptTo.y,-0.998)); y += 32; } pRenderSystem->endPrimitive(); pRenderSystem->setColor(color); }
ITexture* MinimapTile::loadResource() { const std::string& path = m_pParent->getPath(); char filename[MAX_PATH]; sprintf(filename,"%s\\%d_%d.dds",path.c_str(),m_ptCoord.x,m_ptCoord.y); m_pParent->loadMinimapMask(); return getRenderEngine()->getRenderSystem()->getTextureManager()->createTextureFromFile(filename,FO_LINEAR,FO_LINEAR,FO_NONE,TAM_CLAMP_TO_EDGE,TAM_CLAMP_TO_EDGE); }
ModelInstance::~ModelInstance() { STLDeleteSequence(m_vRibbonSystem); STLDeleteSequence(m_vParticleSystem); STLDeleteSequence(m_vMmParticleSystem); STLDeleteSequence(m_subModels); IModelManager *pModelManager = getRenderEngine()->getModelManager(); pModelManager->releaseModel(m_pModel); }
void GroundEyeshot::setDefaultTexture(const char* szFileName) { m_defaultTexture = szFileName; if(m_pDefaultTexture) { m_pDefaultTexture->release(); } m_pDefaultTexture = getRenderEngine()->getRenderSystem()->getTextureManager()->createTextureFromFile(szFileName,FO_POINT,FO_POINT,FO_NONE,TAM_WRAP,TAM_WRAP); }
void CClientGameEngine::update(float elapsedTime) { m_inputEngine->onFrame(elapsedTime); getRenderEngine()->onFrame(elapsedTime); m_syncTime += elapsedTime; if(m_syncTime >= 0.25f) { boost::shared_ptr<CEvent> syncHero(new CHeroSyncEvent()); getEventEngine()->newEvent(syncHero); m_syncTime = 0; } }
void Material::initialize() { ITextureManager *pTextureManager = getRenderEngine()->getRenderSystem()->getTextureManager(); size_t size = m_vLayers.size(); for(size_t i = 0;i < size;i++) { MaterialLayer& layer = m_vLayers[i]; if(!layer.m_szTexture.empty()) { layer.m_pTexture = pTextureManager->createTextureFromFile(layer.m_szTexture,FO_LINEAR,FO_LINEAR,FO_LINEAR); } } }
EdgeblurPostEffect::EdgeblurPostEffect() { EffectMacro macro; macro.name = "MAX_BONE_NUM"; macro.define = "59"; if(postEffect == 0) { //Shader postEffect = getRenderEngine()->getRenderSystem()->getEffectFileManager()->getEffectFile(_T("Shader\\Edgeblur.fx"),¯o, 1); if (!postEffect) { MERRORLN(_T("加载Edgeblur全屏后处理Shader失败!!")); } } resetBlendFactor(); enableMask = PEM_BLUR; enabled = true; }
// 设置远景贴图; // @param szFileName 贴图文件名; void GroundEyeshot::SetDistanceTexture(const char* szFileName) { if (szFileName == NULL) { ASSERT(false); return; } m_strDistanceTextureFileName = szFileName; if(m_pDistanceTexture != NULL) { m_pDistanceTexture->release(); m_pDistanceTexture = NULL; } if (!m_strDistanceTextureFileName.empty()) { m_pDistanceTexture = getRenderEngine()->getRenderSystem()->getTextureManager()->createTextureFromFile(m_strDistanceTextureFileName, FO_POINT, FO_POINT, FO_NONE,TAM_WRAP, TAM_WRAP); ASSERT(m_pDistanceTexture != NULL); } }
void SubModelInstance::setTexture(int layer,const char* szName) { Assert(layer >= 0 && layer < m_mtlOrigin.numLayers()); MaterialLayer *pLayer = m_mtl.getLayer(layer); const std::string& textureName = pLayer->m_szTexture; if(StringHelper::casecmp(textureName,szName) == 0)return; safeRelease(pLayer->m_pTexture); pLayer->m_szTexture = ""; if(!szName)return; IRenderEngine *pRenderEngine = getRenderEngine(); IRenderSystem *pRenderSystem = pRenderEngine->getRenderSystem(); ITextureManager *pTextureManager = pRenderSystem->getTextureManager(); pLayer->m_pTexture = pTextureManager->createTextureFromFile(szName,FO_LINEAR,FO_LINEAR,FO_LINEAR); if(pLayer->m_pTexture) { pLayer->m_szTexture = szName; } }
bool ModelInstance::setModel(const char* modelName,ModelNode *pNode) { IModelManager *pModelManager = getRenderEngine()->getModelManager(); IModel *pModel = pModelManager->loadModel(modelName); if(!pModel)return false; m_pModel = pModel; m_pNode = pNode; //设置buffer m_pIB = m_pModel->getIndexBuffer(); m_pVBTexcoord = m_pModel->getTexcoordBuffer(); m_pVBBlendWeight = m_pModel->getBlendWeightBuffer(); m_pBlendShaderProgram = m_pModel->getBlendShaderProgram();//需要再构造SubModelInstance前设置 m_needDrawShadow = m_pModel->needDrawShadow(); //创建子mesh uint numSubModels = m_pModel->getNumSubModels(); for(uint i = 0;i < numSubModels;i++) { ISubModel *pSubModel = m_pModel->getSubModel(i); SubModelInstance *pSubModelInstance = new SubModelInstance(this,pSubModel, i); m_subModels.push_back(pSubModelInstance); m_vBlendIndices.push_back( m_pModel->getBlendIndicesBuffer(i));//保存骨骼混合的索引buffer } //创建骨骼树 if( !m_skeleton.create(m_pModel->getCoreSkeletion() ) ) { return false; } //uint numBones = m_pModel->numBones(); //for(uint i = 0;i < numBones;i++) //{ // BoneData *pData = m_pModel->getBone(i); // Bone *pBone = m_skeleton.createBone(m_pNode); // loadBone(pBone,pData); //} ////骨骼树形结构构建 //for(size_t i = 0;i < numBones;i++) //{ // BoneData *pBone = m_pModel->getBone(i); // if(pBone->parentId != -1) // { // for(size_t j = 0;j < numBones;j++) // { // BoneData *pParent = m_pModel->getBone(j); // if(pBone->parentId == pParent->objectId) // { // m_skeleton.getBone(i)->setParent(m_skeleton.getBone(j)); // break; // } // } // } // m_skeleton.getBone(i)->setPrecomputeMatrix(pBone->precomputeMtx); //} //ParticleSystem size_t size = m_pModel->numParticleSystem(); for(size_t j = 0;j < size;j++) { ParticleSystem *pParticleSystem = new ParticleSystem; pParticleSystem->m_pData = m_pModel->getParticleSystemData(j); pParticleSystem->m_pBone = m_skeleton.getBone(pParticleSystem->m_pData->boneObjectId); pParticleSystem->m_pNode = m_pNode; m_vParticleSystem.push_back(pParticleSystem); } //RibbonSystem size = m_pModel->numRibbonSystem(); for(size_t j = 0;j < size;j++) { RibbonSystem *pRibbonSystem = new RibbonSystem; pRibbonSystem->m_pData = m_pModel->getRibbonSystemData(j); pRibbonSystem->m_pBone = m_skeleton.getBone(pRibbonSystem->m_pData->boneObjectId); pRibbonSystem->m_pNode = m_pNode; m_vRibbonSystem.push_back(pRibbonSystem); } //MmParticleSystem size = m_pModel->numMmParticleSystem(); for(size_t j = 0;j < size;j++) { MmParticleSystem *pMmPs = new MmParticleSystem; pMmPs->m_pData = m_pModel->getMmParticleSystem(j); pMmPs->m_pNode = m_pNode; pMmPs->m_pBone = m_skeleton.getBone(pMmPs->m_pData->bone); m_vMmParticleSystem.push_back(pMmPs); } if(m_pModel->getAnimationCount()) setCurrentAnimation(pModel->getAnimation(0)->getName()); return true; }