1 урок по OpenGL. Инициализация
| |
RomanNVKZ | Дата: Суббота, 17 Марта 2012, 17:27 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Для начала хотел-бы сказать несколько слов: 1. Компилятор Visual Studio 2010. 2. Сам пока учусь, ТАПКАМИ НЕ КИДАТЬСЯ!
Инициализация:
1. Создаём проект Консольное приложение Win32 2. Покдючаем библиотеку 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(); }
Результат:
НУ вот и всё
Если понравилось, сделаю ещё.
Сообщение отредактировал RomanNVKZ - Понедельник, 19 Марта 2012, 13:23 |
|
| |
_AlMak_ | Дата: Суббота, 17 Марта 2012, 18:03 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| RomanNVKZ, продолжай ! )
Программист С++
|
|
| |
TheFlowOfFun | Дата: Суббота, 17 Марта 2012, 18:41 | Сообщение # 3 |
участник
Сейчас нет на сайте
| Quote (RomanNVKZ) Сам пока учусь, ТАПКАМИ НЕ КИДАТЬСЯ! Если ты учишься сам, зачем тогда "учить" других? Ещё спрячь скрины под споилер.
N/A
|
|
| | |
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 |
был не раз
Сейчас нет на сайте
| Ждём продолжения )
Программист С++
|
|
| |
|