Tuesday 15 February 2011

OpenGL в Linux

Цикл уроков по программированию OpenGL в Linux.

*примечание: в первом уроке не будем расматривать CodeBlocks и SDL, но подготовим все до следующих уроков.

Часть 0.1 — немного об Linux.



Linux, произносится «ли́нукс» (также GNU/Linux, произносится «гну ли́нукс» или «гну слэш ли́нукс»]) — общее название Unix-подобных операционных систем на основе одноимённого ядра и собранных для него библиотек и системных программ, разработанных в рамках проекта GNU.
Linux работает на PC-совместимых системах семейства Intel x86, а также на x86-64, PowerPC, ARM, Alpha AXP, Sun SPARC, Motorola 68000, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, AXIS CRIS, Renesas M32R, Atmel AVR32, Renesas H8/300, NEC V850, Tensilica Xtensa и многих других.

В отличие от большинства других операционных систем, Linux не имеет единой « официальной » комплектации. Вместо этого Linux поставляется в большом количестве так называемых дистрибутивов, в которых ядро Linux соединяется с утилитами GNU и другими прикладными программами (например, X.org), делающими её полноценной многофункциональной операционной средой.

Наиболее известными дистрибутивами Linux являются Arch Linux, CentOS, Debian, Fedora, Gentoo, Mandriva, Mint, openSUSE, Red Hat, Slackware, Ubuntu.

Российские дистрибутивы — ALT Linux, ASPLinux, Calculate Linux, НауЛинукс, AgiliaLinux (ранее MOPSLinux) и Linux XP


Часть 1 — подготавливаемся.

Поставим компилятор g++. Заходим в Synaptic и пишем в поиске g++. Ставим галку напротив g++-4.4 и напротив libstdc++6-4.4-dev жмем применить и ждем пока все поставится.

Часть 2 — создаем первый проект на С++.

1. Запускаем терминал (я у себя поставил его запуск на тильду)

2. В нем сразу мы находимся в домашнем каталоге. это можно проверить написав pwd и перед вами напишется строчка в каком каталоге вы находитесь. Предлагаю создать еще один каталог Projects в терминале все делается просто написав mkdir <название каталога> у меня это команда mkdir Projects/ Теперь в него надо перейти. для этого есть команда cd <название каталога> у меня это cd Projects/

*примечание: терминал чуствителен к регистру так что если у вас папка Projects/ а вы напишете projects/ то не перейдет.

и еще для быстрого набора используйте TAB напишите Pro и нажмите TAB и у вас автоматически допишется Projects/

3. Ну вот каталог для проектов сделали теперь давайте напишем сам исходный код. напишем следующее gedit main.cpp это означает что мы включаем текстовый редактор gedit и создаем в папке в которой находимся файл main.cpp

*примечание: gedit раскрашивает текст в cpp файлах так что будет удобно писать.

теперь перед вами откроется окно редактора.

4. Начнем писать код

Даже если вы совсем не знаете OpenGL то после этой статьи  вы сможете свободно рисовать 2D графику и будете свободно ориентироваться в коде. каждую строчку кода я буду комментировать.

Пишем следующий код:

//подключаем библиотеку glut
#include <GL/glut.h>

void dis() //вот и та функция дисплея 
{

    glClear(GL_COLOR_BUFFER_BIT);//очищаем буфер цвета
    glPointSize(5);//устанавливаем размер точки (так как если не установим, то она будет очень маленькой)
    glBegin(GL_POINTS);//начинаем рисовать точку (также есть и другие флаги как GL_LINES GL_TRAINGLE (вроде так =)) ) если вы рисуете линии то вам надо указать 2 точки и нарисуются линии
    glColor3f(0.0, 0.0, 0.0);// устанавливаем цвет которым будем рисовать (если вы рисуете много точек или линий то можно пере тем как нарисовать что- либо установить для него цвет, если вам не устраивает цвет то 0 до 1 то можно установить glColor3ub и тогда будут 255 цвета
    glVertex2f(0.25, 0.25);//рисуем точку 2f означает, что мы будем рисовать в 2 координатах и там координаты (а теперь можно пояснить glOrtho если бы мы установили размер экрана 100х100 то и поставили в glOrtho значение glOrtho(0.0, 100, 0.0, 100, -1.0, 1.0); то эту точку можно было бы нарисовать так glVertex2f(25, 25); и она была бы там же (да и если мы написали бы вместо 100 480 она была бы там ) надеюсь разобрались
    //если вам надо много точек то не надо писать заново все с glBegin и тд можно просто написать сюда множество точек и  они нарисуются
    glEnd();//заканчиваем рисовать
    glFlush();//отрисовываем все что нарисовали

}
int main(int argc, char **argv)//точка входа приложения
{
    glutInit(&argc, argv);//инициализация glut
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //установка дисплея GLUT_SINGLE означает что мы будем использовать 1 буфер (для 2D графики) а GLUT_RGB означает что мы будем использовать RGB цвета
    glutInitWindowSize(480, 480);//устанавливаем размер окна 
    glutInitWindowPosition(200, 200);//устанавливаем положение окна при запуске
    glutCreateWindow("First programm");//создаем окно с названием "First program"
    glClearColor(1.0, 1.0, 1.0, 1.0);//очищаем окно в белый цвет
    glMatrixMode(GL_PROJECTION);//устанавливаем матрицу проекции
    glLoadIdentity();//сбрасываем матрицу (устанавливаем нулевую)
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);//устанавливаем ортогональный вид (или как он там называется в скобках значения)
    // которым будет все измеряться то есть первые 2 - это по Х, вторые 2 - это про У и третьи 2 - это по Z. для более подробного понятия 
    // значения от нуля до единицы по Х это будет само окно, то есть  480 (не знаю как объяснить) значение Z не имеет значения так как мы рисуем 2D
    glutDisplayFunc(dis);//указываем функцию дисплея(ну или рисования)
    glutMainLoop();//цикл обработки всякого (типа нажатия на клавишу и тд)
}

5. Теперь закрываем редактор, теперь надо все это дело откомпилировать. в терминале пишем g++ main.cpp -lglut -o opengl тут вроде все понятно компилируем файл main.cpp и ставим с библиотеками glut, а -o означает файл будет на выходе, теперь все это дело надо запустим в терминале пишем gdb opengl  перед вами тут всякое напишется теперь пишем   run теперь ваше приложение запустится чт бы выйти из отладки напишите quit

На этом урок закончен.

Если вы хотите компилировать проекты не OpenGL то просто напиши g++ file.cpp -o file

там где file.cpp это ваш С++ файл а там где -o file это файл на выходе (вместо file пишите что угодно).

Надеюсь, он будет полезен.

via esate.ru

3 comments:

  1. Весьма интересный урок

    ReplyDelete
  2. интересно-интересно

    ReplyDelete
  3. продолжу изучение,пока с трудом ,напишите литературу нужную

    ReplyDelete