Рендер (отрисовка) простейщего обьекта
Автор: zombieРассмотрим функцию вывода нашего объекта:
void DEN_Obj::Render(int text)
{
int l_index;
glPushMatrix();
glTranslatef(Position.x,Position.y,Position.z);
glRotatef(Rotation.x,1.0,0.0,0.0);
glRotatef(Rotation.y,0.0,1.0,0.0);
glRotatef(Rotation.z,0.0,0.0,1.0);
if (text==1)
{
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, id_texture);
}
else
{
glDisable(GL_TEXTURE_2D);
}
glBegin(GL_TRIANGLES);
for (l_index=0;l_index<polygons_col;l_index++)
{
//----------------- ПЕРВАЯ ВЕРШИНА -----------------
// координаты текстуры первой вершины
glTexCoord2f( MapCoord[ Polygon[l_index].a ].u,
MapCoord[ Polygon[l_index].a ].v);
// координаты первой вершины
glVertex3f( Vertex[ Polygon[l_index].a ].x*Scale,
Vertex[ Polygon[l_index].a ].y*Scale,
Vertex[ Polygon[l_index].a ].z*Scale);
//----------------- ВТОРАЯ ВЕРШИНА -----------------
// координаты текстуры второй вершины
glTexCoord2f( MapCoord[ Polygon[l_index].b ].u,
MapCoord[ Polygon[l_index].b ].v);
// координаты второй вершины
glVertex3f( Vertex[ Polygon[l_index].b ].x*Scale,
Vertex[ Polygon[l_index].b ].y*Scale,
Vertex[ Polygon[l_index].b ].z*Scale);
//----------------- ТРЕТЬЯ ВЕРШИНА -----------------
// координаты текстуры третьей вершины
glTexCoord2f( MapCoord[ Polygon[l_index].c ].u,
MapCoord[ Polygon[l_index].c ].v);
// координаты третьей вершины
glVertex3f( Vertex[ Polygon[l_index].c ].x*Scale,
Vertex[ Polygon[l_index].c ].y*Scale,
Vertex[ Polygon[l_index].c ].z*Scale);
}
glEnd();
glPopMatrix();
};
Функция имеет один входящий параметр text, который служит для определения - отрисовывать объект с наложенной текстурой или без текстуры.
Далее краткое пояснение работы функции:
1. Сохраняем мировые координаты
2. Устанавливаем координаты и углы обьекта
3. Определяем с текстурой или без будет выводиться наш объект и соответственно инициализируем текстуру
4. В цикле проходим по всем полигонам, получаем координаты точек, текстуры, и выводим их.
5. Восстанавливаем мировые координаты