PMG
https://forum.pmg.org.ru/

как сделать бекгроунд и примитивный UI?
https://forum.pmg.org.ru/viewtopic.php?f=1&t=7206
Страница 1 из 2

Автор:  dark elf [ 12 ноя 2009 14:35 ]
Заголовок сообщения:  как сделать бекгроунд и примитивный UI?

Добрый день я только начинаю программировать, использую Visual c++. Подскажите пожалуйста как загрузить битмап в бекгроунд, и как сделать примитивный UI, и как это реализовать желательно средствами OpenGL зараннее спасибо

Автор:  bad_duck [ 12 ноя 2009 16:02 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

dark elf, читал эти уроки http://pmg.org.ru/nehe/index.html ? Я с них начинал, понятно и доступно написаны.

Автор:  dark elf [ 12 ноя 2009 16:26 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

это понятно но там ни слова не написанно про то как сделать бекгроунд и как сделать UI

Автор:  bad_duck [ 12 ноя 2009 16:32 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

а ты что собираешься делать? программу или игру? если программу? то нужно формы использовать - скачай книжку C/C++ и MS Visual C++ 2008 для начинающих http://depositfiles.com/ru/files/zjazgfijr (вроде ссылка рабочая)
А если игру делаешь, то в 3D просто плоскость рисуешь в ortho режиме

Автор:  dark elf [ 12 ноя 2009 16:49 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

bad_duck писал(а):
А если игру делаешь, то в 3D просто плоскость рисуешь в ortho режиме


а можно с этого момента как то поподробней плз :oops:

Автор:  bad_duck [ 12 ноя 2009 17:12 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

Например:
Код:
bool Display (void)
{   
    glClearColor(0, 0, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      
    map();     //отрисовка в 3D
    ortho=1;  //у меня это глобальная переменная типа bool. Мне просто это нужно во многих местах использовать
    Reshape(WindowW,WindowH,0,0);  // int WindowW,WindowH размеры окна
    screen2d();     //отрисовка в 2D
    ortho=0;     
    glFlush();
    return TRUE;                              
}

вот reshape
Код:
void Reshape(GLsizei Width, GLsizei Height, GLsizei x0, GLsizei y0)      
{
    glViewport(x0, y0, Width, Height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if(ortho==1)   
       gluOrtho2D(0, (float)Width, 0, (float)Height);
    if(ortho==0)
       gluPerspective(45,(float)Width/Height,0.01,300);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();   
}

а в screen2d рисуешь всё что хочешь, например прямоугольник:
Код:
glLineWidth(1);
glBegin(GL_LINE_STRIP);
      glVertex2f(x, y);
      glVertex2f(x_1, y);
      glVertex2f(x_1, y_1);
      glVertex2f(x, y_1);
      glVertex2f(x, y);   
glEnd();

если не знаешь куда этот код вставить читай первые 5 уроков NеHе. Для того чтобы сделать бекграунд нужно в ortho режиме (т.е. в screen2d()) нарисовать прямоугольник методом glBegin(GL_QUADS);
Код:
glBegin(GL_QUADS);
      glVertex2f(x, y);
      glVertex2f(x_1, y);
      glVertex2f(x_1, y_1);
      glVertex2f(x, y_1);
      glVertex2f(x, y);   
glEnd();

с координатами от x=0, y=0; x_1=WindowW, y_1=WindowH.
Но это всё годится для игр, где не будет стандартных виндуосовских кнопочек, окошек для ввода и т.д.

Автор:  dark elf [ 12 ноя 2009 17:15 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

спс за ответ, а как сделать кнопку кликабельной?

Автор:  bad_duck [ 12 ноя 2009 17:16 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

в смысле? Какую кнопочку?

Автор:  dark elf [ 12 ноя 2009 17:18 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

ну нарисовать по верх бекграунда кнопку и присвоить ей действие. скажем закрыть приложение

Автор:  bad_duck [ 12 ноя 2009 17:26 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

не получится. Если делать как в уроках NeHe, то не получится вообще поместить стандартную кнопочку куда либо (только можно создать диалоговское окошко, например для свойств проги, на котором можно создать все что хочешь, включая поля для ввода, картинки, списки и т.д.), а на главное окно не поместить.
Единственный вариант - сделать кнопку самому. К тому же в игре явно не будешь использовать стандартные кнопки, а сделаешь свои, под стиль игры.

Или другой вариант - использовать формы. Там можно в любой момент создать кнопку стандартную и поместить прямо на окно. Но я сам не знаю как перенести весь мой код в формы, там всё не так как в NeHe...

Автор:  dark elf [ 12 ноя 2009 17:30 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

я так и хочу сделать скажем 2 варианта bmp и сделать из него кнопку. только как это сделать? или же чек бокс или еше что нибудь из граф интерфейса

Автор:  dark elf [ 12 ноя 2009 17:33 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

или прогресс бар тоже из битмапа

Автор:  bad_duck [ 12 ноя 2009 17:40 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

кнопку я сам пока не делал, но сделать это очень легко.
1)Проверка нажата ли мышь и где она находится
2)Если внутри твоей кнопки, то рисуешь кнопку и натягиваешь на нее одну текстуру
3)Если снаружи твоей кнопки, то рисуешь кнопку и натягиваешь на нее вторую текстуру
4)можно еще одну картинку сделать если мышь наведена на кнопку,но не нажата

Если не знаешь как сделать п. 1) то я могу написать. Но сначала просто нарисуй кнопку и натяни на нее текстуру. а потом делай чтобы она работала.

Прогресс бар вообще легко - просто рисуешь прямоугольник и изменяешь его размеры по мере загрузки нужных данных

Автор:  dark elf [ 12 ноя 2009 17:47 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

а напиши пожалуйста поподробней про кнопку как ее сделать скажем из трех положений (просто кнопка, наведенн курсор и нажата) и если можна напиши как сделать свой курсор, во флеше это вообше 2 строчки кода(сначала присоеденяеться изображение к курсору потом скрываеться оригинальный курсор) хочеться знать как это делаеться здесь

Автор:  bad_duck [ 12 ноя 2009 17:53 ]
Заголовок сообщения:  Re: как сделать бекгроунд и примитивный UI?

ха, а я тоже флешом года 3 увлекался, потом на opengl перешел :cheers:
Кнопку я потом напишу (на выходных наверно), щас времени нету. А насчет курсора: сначала убираешь курсор ShowCursor(FALSE); потом рисуешь прямоугольник с натянутым курсором и задаешь его координаты как координаты мыши. Или можно что-нибудь поприкольнее написать - чтобы он по инерции двигался...
А чтобы был виден не прямоугольник, а только курсор на картинке, то надо с glBlend мучиться. Я написал свои шейдер, поэтому glBlend нигде не использую

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/