Прежде всего подключим необходимые заголовочные файлы:
#include <GL/glut.h> #include <cmath>
Будем считать, что нам хочется нарисовать такую функцию:
float func(float x, float y)
{
return sin(x * y * 0.0001)*145;
}
Главная функция программы при этом имеет вид стандартный для любой openGL программы:
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(480, 480);
glutInitWindowPosition(20, 86);
glutCreateWindow("3d how2.org.ua");
glClearColor(0, 0, 0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-100, 100, -100, 100, 100, 2000); // задаёт перспективу изображения. Подробнее: opengl.gamedev.ru/doc/?func=glFrustum
glMatrixMode(GL_MODELVIEW);
glutDisplayFunc(display);
glutMainLoop();
}
В функции отображения — очищаем экран, «отодвигаемся» от изображения и вращаемся вокруг OX:
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(0, 0, -800);
glRotatef(-30, 1, 0, 0);
После чего рисуем «сетку» в одном направлении:
for (float x = -480; x < 480; x += 10) {
glBegin(GL_LINE_STRIP);
for (float y = -480; y < 480; y += 10)
{
glVertex3f(x, y, func(x, y));
}
glEnd();
}
Затем во втором:
for (float y = -480; y < 480; y += 10){
glBegin(GL_LINE_STRIP);
for (float x = -480; x < 480; x += 10)
{
glVertex3f(x, y, func(x, y));
}
glEnd();
}
После чего «выводим» всё это дельце:
glPopMatrix();
glutSwapBuffers();
}
В linux компилировать так:
g++ main.cpp -o main -lglut -lGL



