void CRenderer::ProcessNode(CNode* node) { std::vector<CNode*> *vec = node->GetNodeVector(); //Обновляем нод, рендерим сущности //Log("Node is updated\n"); glTranslatef(node->GetPosX(), node->GetPosY(), node->GetPosZ()); for(int i = 0; i < node->GetObjVector()->size(); i++) { if(node->GetObjVector()->at(i)->GetType()==OBJECT_ENTITY) { //TO DO: //Берем шейдер, соотвутствующий сущности и активируем его //----- CMaterial* mat; CShader* sh; if((mat = ((CEntity*)node->GetObjVector()->at(i))->GetMaterial())!=0) { if((sh = mat->GetShader())!=0) { if(sh->IsCompiled()) { glUseProgram(sh->GetProgramId()); } } } DrawMesh(((CEntity*)node->GetObjVector()->at(i))->GetMesh()); glUseProgram(0); } } glDisable(GL_DEPTH_TEST); glBegin(GL_LINES); glColor3f(0.5, 1, 0.5); glVertex3f(0, 0, 0); glVertex3f(0, 1, 0); glColor3f(1, 0.5, 0.5); glVertex3f(0, 0, 0); glVertex3f(1, 0, 0); glColor3f(0.5, 0.5, 1); glVertex3f(0, 0, 0); glVertex3f(0, 0, 1); glColor3f(1,1,1); glEnd(); glEnable(GL_DEPTH_TEST); for(int i = 0; i < vec->size(); i++) { ProcessNode(vec->at(i)); } glTranslatef(-node->GetPosX(), -node->GetPosY(), -node->GetPosZ()); }