Доброго дня!
Есть пара вопросов по созданию игры на С++ и OpenGL.
Есть задача - написать некую 2d (или 3d) простенькую игрушку типа
арканойда/тетриса/пакмана.
Необходимо использовать только С++ и OpenGL БЕЗ каких-либо
сторонних библиотек типа glut и пр.
Игрушка пишется под Android с использованием NDK (С++) .
Я немного ковырялся в OpenGL но glut везде и всюду.. Хотелось бы
как-то отказаться от него - он ведь не поддерживается больше?
Да и полезно я думаю будет углубиться в структуру и философию
чистого OpenGL.
Так как до этого я просто рисовал геометрию и полноценного клиента не делал
то накидал вот такой план:
/*Для примера возьмем Пакмана*/
0. Разобраться в NDK и привязать к нему OpenGL.
1. Создать, вывести на экран и подвигать по экрану Пакмана.
1.1 Сделать внятную анимацию пакмана.
2. Создать и вывести на экран лаберинт.
3. Создать обработчик стэйтов на манер вот этого -
http://habrahabr.ru/post/114933/ 4. /*Далее по списку*/
Итак теперь просьбы и вопросы:
1)Правильно ли я подошел к решению проблемы?
2) Есть ли хорошие книги по OpenGL в "чистом" виде?
2.1 Например в книгах есть инициализация окна с помощью glut.
Может мне тогда переписывать данные функции под Android?
(в NDK наверняка есть какой-то оконный манагер).
2.2 Есть ли внятный туториал по перехвату клавиатуры в реальном времени?
3) Как отрисовывать не все окно, а только часть?
например - возьмем окно с кругом -
void myInit(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glColor3f(0.0f, 0.0f, 0.0f);
glPointSize(4.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 640.0, 0.0, 480.0);
}
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin( GL_LINE_LOOP );
for( int i = 0; i < 50; i++ )
{
float a = 300+(float)i / 50.0f * 3.1415f * 2.0f;
glVertex2f( 300+ cos( a ) * 10.0f, 300+ sin( a ) * 10.0f );
}
glEnd();
glFlush();
}
void myChandePlace()
{
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(640, 480);
glutInitWindowPosition(100, 150);
glutCreateWindow("my first attempt");
glutDisplayFunc(myDisplay);
myInit();
glutMainLoop();
return 0;
}
выводится круг на белом фоне. Я хочу им подвигать с клавиатуры. Как это сделать?
Я хотел стирать этот круг и перерисовывать при каждом нажатии на стрелочки. Если окно пустое - в теории это
можно сделать. А есть нет?
Не перерисовывать же каждый раз всю сцену заново...
В коде есть функция "void myChandePlace() " - какой примерно должен быть код чтобы я мог реализовать управление с клавиатуры?
Заранее благодарю.
Добавлено через 4 минуты и 16 секунд:Быть может можно использовать это -
glNewList(номер листа);
// здесь сама сцена (glBegin'ы, glEnd'ы и т. д.)
glEndList;