Пишем "скелет"

Итак, запускаем первое 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 примитивы. Полный код программы можно скачать здесь.

Hosted by uCoz