Четверг, 28 Марта 2024, 20:05

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » 1 урок по OpenGL. Инициализация
1 урок по OpenGL. Инициализация
RomanNVKZДата: Суббота, 17 Марта 2012, 17:27 | Сообщение # 1
участник
Сейчас нет на сайте
Для начала хотел-бы сказать несколько слов:
1. Компилятор Visual Studio 2010.
2. Сам пока учусь, ТАПКАМИ НЕ КИДАТЬСЯ!

Инициализация:

1. Создаём проект Консольное приложение Win32
2. Покдючаем библиотеку glut.h
Code

#include <glut.h>

3. Инициализируем движок с OpenGL. Для этого в функции main предостовляем два парамерта int argc и char **argv, потом прописываем следующие строки:
glutInit(&argc, argv); ИНИЦИАЛИЗАЦИЯ ПАРАМЕТРОВ
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); ИНИЦИАЛИЗИРУЕМ ЦВЕТОВУЮ ГАММУ:GLUT_DUBLE - будем использовать 2 буффера. GLUT_RGB - Формат 3-х цветов (red, green, blue)
glutInitWindowSize(480, 480); ИНИЦИАЛИЗИРУЕМ РАЗМЕРЫ ОКНА (480*480 пикселей)
glutInitWindowPosition(200, 200); ИНИЦИАЛИЗИРУЕМ ПОЗИЦИЮ ОКНА (200*200)
glutCreateWindow("Powder Toy"); СОЗДАЁМ ОКНО С НУЖНЫМ НАЗВАНИЕМ (Powder Toy)
glClearColor(0, 0, 0, 1.0); ЗАДАЁМ НУЖНЫЙ ЦВЕТ ЧИСТОГО ОКНА (red, green, blue; задан чёрный цвет)
glMatrixMode(GL_PROJECTION); ЗАДАЁМ ВИД В 3-х МЕРНОМ ПРОСТРАНСТВЕ
glLoadIdentity(); точно не знаю, профи думаю подскажут =)
glOrtho(0, 480, 480, 0, -1, 1); В КАКИХ ПРЕДЕЛАХ БУДЕТ ИЗМЕНЯТЬСЯ КООРДИНАТЫ X и Y
glutDisplayFunc(display); называем функцию, в которой мы будем всё рисовать

glutMainLoop(); ПЕРЕХОД В ОСНОВНОЙ ЦИКЛ

Выходит у нас так:

Code

#include <glut.h>

int main(int argc, char **argv)//Главная часть
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(480, 480);
    glutInitWindowPosition(200, 200);
    glutCreateWindow("Powder Toy");
    glClearColor(0, 0, 0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 480, 480, 0, -1, 1);
    glutDisplayFunc(display);
    glutMainLoop();
}


4. Пишем функцию display

glClear(GL_COLOR_BUFFER_BIT); ОЧИЩАЕМ БУФФЕР, СЛЕДОВАТЕЛЬНО ВЕСЬ ЭКРАН
glBegin(); НАЧАЛО РИСОВАНИЯ
glEnd(); КОНЕЦ РИСОВАНИЯ
glutSwapBuffers(); ОБНОВИМ ЭКРАН

в результате у нас получается такой код:

Code


#include <glut.h>

void display()
{
                 glClear(GL_COLOR_BUFFER_BIT);
                 glutSwapBuffers();
}

int main(int argc, char **argv)//Главная часть
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(480, 480);
    glutInitWindowPosition(200, 200);
    glutCreateWindow("Powder Toy");
    glClearColor(0, 0, 0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 480, 480, 0, -1, 1);
    glutDisplayFunc(display);
    glutMainLoop();
}


Результат:



НУ вот и всё cool

Если понравилось, сделаю ещё.






Сообщение отредактировал RomanNVKZ - Понедельник, 19 Марта 2012, 13:23
_AlMak_Дата: Суббота, 17 Марта 2012, 18:03 | Сообщение # 2
был не раз
Сейчас нет на сайте
RomanNVKZ, продолжай ! )

Программист С++
TheFlowOfFunДата: Суббота, 17 Марта 2012, 18:41 | Сообщение # 3
участник
Сейчас нет на сайте
Quote (RomanNVKZ)
Сам пока учусь, ТАПКАМИ НЕ КИДАТЬСЯ!

Если ты учишься сам, зачем тогда "учить" других? Ещё спрячь скрины под споилер.


N/A
RomanNVKZДата: Суббота, 17 Марта 2012, 18:44 | Сообщение # 4
участник
Сейчас нет на сайте
TheFlowOfFun, ок happy просто я заметил, что часто об этом спрашивают, а урок инициализации в WinAPI написан на "иностраном" для новичков языке.





Сообщение отредактировал RomanNVKZ - Суббота, 17 Марта 2012, 18:51
dima9595Дата: Суббота, 17 Марта 2012, 18:52 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Это ваще что такое будет?

RomanNVKZДата: Суббота, 17 Марта 2012, 18:57 | Сообщение # 6
участник
Сейчас нет на сайте
Quote (dima9595)
Это ваще что такое будет?

Готовый к рисованию чистый экран.




Vq_SetДата: Суббота, 17 Марта 2012, 19:04 | Сообщение # 7
частый гость
Сейчас нет на сайте
О, какой умный. Glut освоил, а на чистом gl слабо?
goldsphereДата: Воскресенье, 18 Марта 2012, 15:17 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
RomanNVKZ,У меня MCVC++ молвит: индентификатор "timer" и "mouse" не определён!

Добавлено (18.03.2012, 15:17)
---------------------------------------------
Quote (RomanNVKZ)
 
Code
glutMouseFunc(mouse);    
      timer();

Эти строчки тут в принципе не нужны!


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Воскресенье, 18 Марта 2012, 15:18
RomanNVKZДата: Понедельник, 19 Марта 2012, 13:23 | Сообщение # 9
участник
Сейчас нет на сайте
Quote (goldsphere)
RomanNVKZ,У меня MCVC++ молвит: индентификатор "timer" и "mouse" не определён!


Сорри, забыл убрать. Исправлено!




KpoJIukДата: Понедельник, 19 Марта 2012, 15:39 | Сообщение # 10
In C++ We Trust
Сейчас нет на сайте
Quote (RomanNVKZ)
Сам пока учусь, ТАПКАМИ НЕ КИДАТЬСЯ!

За одну эту фразу я уже могу кинуть в тебя наковальню. Урок, конечно, никакой, но попытка засчитана, молодец.
Вот несколько замечаний:
Quote (RomanNVKZ)
Покдючаем библиотеку glut.h

Как-то нехорошо учить людей глуту, но ладно, пусть будет так.
Quote (RomanNVKZ)
ИНИЦИАЛИЗИРУЕМ РАЗМЕРЫ ОКНА (480*480 пикселей)

Зашкаливающее использование верхнего регистра огорчает.
Quote (RomanNVKZ)
glMatrixMode(GL_PROJECTION); ЗАДАЁМ ВИД В 3-х МЕРНОМ ПРОСТРАНСТВЕ

Выбираем матрицу проекции.
А как сделать в двухмерном?
Quote (RomanNVKZ)
glLoadIdentity(); точно не знаю, профи думаю подскажут =)

Устанавливаем единичную матрицу.
Quote (RomanNVKZ)
glOrtho(0, 480, 480, 0, -1, 1); В КАКИХ ПРЕДЕЛАХ БУДЕТ ИЗМЕНЯТЬСЯ КООРДИНАТЫ X и Y

Устанавливаем ортогональную проекцию.
И в каких же пределах у нас будут изменяться координаты X и Y? Что из параметров функции вообще является координатами? -1 и 1?
Stas96Дата: Понедельник, 19 Марта 2012, 18:40 | Сообщение # 11
Programmer and Game Designer
Сейчас нет на сайте
RomanNVKZ, Конечно молодец, первый урок..
Но мне кажется он бесполезен, таких уроков в сети полно. Да и вообще Glut уже давно не развивается и делать уроки по нем нет смысла...


Сообщение отредактировал Stas96 - Понедельник, 19 Марта 2012, 18:42
_AlMak_Дата: Понедельник, 26 Марта 2012, 12:14 | Сообщение # 12
был не раз
Сейчас нет на сайте
Ждём продолжения )

Программист С++
Форум игроделов » Программирование » C/C++ » 1 урок по OpenGL. Инициализация
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг