Дело вот в чем:
в программе есть класс который реализует отрисовку CRender.
В нем есть массив указателей на другой класс CPosition: там координаты того что надо рисовать + флажок само оно рисуеться или функцией по-умолчанию.
В цикле получения сообщения вызыветься Функция DrawScene
Код:
int DrawGLScene(CRenderClass Render)
{
static CFlag flag1(20,20,BLUE_FLAG);
static CFlag flag2(30,30,RED_FLAG);
static BOOL init=FALSE;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
if(!init)
{
Render.AddObject((CPosition*)&flag1);
Render.AddObject((CPosition*)&flag2);
init=TRUE;
}
Render.UpdateCamera();
Render.RenderAll();
return TRUE;
}
Она добавляет два объекта для отрисовки и соответственно рисует
Рисование сводиться к рисованию ландшафта и объектов на нем (в данном случае flag1/2)
UpdateCamera просто делает
Код:
void CRenderClass::UpdateCamera(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(xspin,1,0,0);
glRotatef(-yspin,0,1,0);
glTranslatef(-x,-y,-z);
}
А вот реализация RenderAll:
Код:
void CRenderClass::RenderAll(void)
{
CSelfDrawable *draw;
RenderHeightMap();
for (int i=0;i<objCount;i++)
if(objects[i]->drawfunc)
{
draw=reinterpret_cast<CSelfDrawable*>(objects[i]);
draw->Draw();
}
}
И тут начинаеться самое интересное:
Если мы просто берем реализацию ф-ции Draw и подставляем в RenderAll (т.е просто код вставить),то все работает без проблем.
Если же оставить так то ландшафт рисуеться а вот флаги - нет.
Если же мы уберем из UpdateCamera
Код:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
и вставим в реализацию ф-ции драв то флаги отрисовываются, ну соответсвенно ландшафт рисуется не там но факт в том что флаги отрисовываются. Если даже закоментить RenderHeightMap то получается что внутри процедуры Draw отрисовка идет только со сбрасыванием битов глубины и цвета, а если поместить код внутрь метода RenderAll То работает без проблем...
Может кто подскажет в чем дело?
Если что-то не понятно в изложении, то поясню.