Пишем "скелет"
Итак, запускаем первое 3d приложение под Borland C++ Builder. Откроем примерчик предоставленный самой фирмой Borland расположенный по следующему адресу: ...\Borland\CBuilder6\Examples\OpenGL\Drawing. Компилируем проект и на экране должно появиться что-то вроде этого:
Можно поиграться и покрутить полученную фигурку стрелочками. Если же у вас не откомпилировалась программа, либо выдает ошибку о том, что не хватает какой-либо библиотеки, смотрите сюда раздел "Устанавливаем OGL". Модифицируем этот пример и напишем "скелет", который будем использовать при написании всех приложений.
Для начала установим атрибуты окна:
void __fastcall TFormMain::FormCreate(TObject *Sender) { hdc = GetDC(Handle); SetPixelFormatDescriptor(); //установка параметров пикселя hrc = wglCreateContext(hdc); //создание контекста окна if(hrc == NULL) ShowMessage(":-)~ hrc == NULL"); if(wglMakeCurrent(hdc, hrc) == false) ShowMessage("Could not MakeCurrent"); w = ClientWidth; h = ClientHeight; //включения режима удаления невидимых поверхностей glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //задает цвет очистки окна }А теперь чегонибуть изобразим:
//функция перерисовки окна void __fastcall TFormMain::FormResize(TObject *Sender) { GLfloat nRange = 50.0; w = ClientWidth; h = ClientHeight; if(h == 0) h = 1; glViewport(0, 0, w, h); //задание положения и размеров окна //установка прямоугольника вида glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange); else glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); RenderGLScene(); //рисуем обьекты } //--------------------------------------------------------------------------- //функция отображения обьектов в клиентском окне void __fastcall TFormMain::RenderGLScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//очищаем экран DrawObjects();//рисуем обьекты glFlush();//снимает задержку при выводе обьектов SwapBuffers(hdc);//выводит содержимое буфера на экран } //--------------------------------------------------------------------------- void __fastcall TFormMain::DrawObjects() { //Тут могут быть любые функции OGL glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINE_STRIP); glVertex3f(-10.0,-10.0,-10.0); glVertex3f(10.0,-10.0,-10.0); glVertex3f(10.0,10.0,-10.0); glVertex3f(-10.0,10.0,-10.0); glVertex3f(-10.0,-10.0,-10.0); glEnd(); }Начало есть, есть над чем поработать, поиграться, порисовать 3d примитивы. Полный код программы можно скачать здесь.