Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Выбор объекта в OpenGL 
:(
    Опции темы
Devic
Дата 8.5.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.5.2009

Репутация: нет
Всего: нет



Здравствуйте, у меня возникла проблема. Я пишу игру "Чапаев"(кто не знает- своими шашками сбиваешь чужие) , сцена трёхмерная, каждая шашка - объект, нужно реализовать выбор конкретной шашки, чтобы потом выбрать для неё силу и направление. То есть, как я себе предполагаю при нажатии курсора на определенную шашку, у неё,к примеру меняется значение переменной булевого типа. У меня не получается сделать так чтобы при нажатии курсором на шашку именно у неё менялась эта переменная. Как это сделать?
PM MAIL ICQ   Вверх
Mazzi
Дата 8.5.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: нет
Всего: 21



Тебе нужно сделать так, чтобы каждая шашка(объект) понимала координаты экрана в которые она отрисовывается. После клика мыши производишь опрос шашаек по очереди, передавая им координаты клика и та(шашака) у которой координаты клика и координаты отрисовки пересекаются установит у себя булевскую переменную и (например) будет подсвечена. 


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Devic
Дата 8.5.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.5.2009

Репутация: нет
Всего: нет



тогда вопрос следующий - как сделать чтобы шашка понимала в какие координаты экрана она отрисовывается? И при определенном угле они ведь перекрывают друг друга
PM MAIL ICQ   Вверх
Mazzi
Дата 8.5.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: нет
Всего: 21



Цитата(Devic @ 8.5.2009,  14:16)
тогда вопрос следующий - как сделать чтобы шашка понимала в какие координаты экрана она отрисовывается? И при определенном угле они ведь перекрывают друг друга

Ну тогда по другому, подсвечивать ещё до клика, читая координаты мыши. А по вопросу понимания куда отрисовывается объект, не могу сказать.  Решить этот вопрос можно, только я не знаю как.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
buian
Дата 13.5.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.2.2005

Репутация: нет
Всего: нет



Всем привет.
Сейчас пишу прогарммку, необходимо заюзать буфер выбора от OpenGL, при двойном клике.
есть следующие функции
Код

void Render(GLenum mode)
{
PAINTSTRUCT n_paint;
int i;
string tmp;
GLdouble x,y;

    dc=BeginPaint(handle,&n_paint);

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        if(graph_create)
        {
            glColor3d(0.0,0.45,0.0);
            glEnable(GL_POINT_SMOOTH);
            glPointSize(30);
            for(i=0; i<graf->GetTopCount(); i++)
            {
                if(mode==GL_SELECT) glLoadName(i+1);
                glBegin(GL_POINTS);
                    x=graf->GetTopX(i);
                    y=graf->GetTopY(i);
                    glVertex2d(x,y);
                glEnd();
            }
            for(i=0; i<graf->GetTopCount(); i++)
            {
                    x=graf->GetTopX(i);
                    y=graf->GetTopY(i);
                    tmp=graf->GetTopName(i);
                    glColor3d(0.8,0.0,0.0);
                    glRasterPos2d(x-0.02,y-0.01);
                    glPrint(tmp);
            }
        }
    SwapBuffers(dc);
    EndPaint(handle,&n_paint);
    ReleaseDC(handle,dc);
}


Код

GLint DoSelect(GLuint x, GLuint y)
{
GLuint hits;

    glSelectBuffer(4,selBuf);
    glGetIntegerv(GL_VIEWPORT,viewport);
    glRenderMode(GL_SELECT);
    glInitNames();
    glPushName(0);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    gluPickMatrix(x,viewport[3]-y,2,2,viewport);
    Render(GL_SELECT);
    hits=glRenderMode(GL_SELECT);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    if(hits<=0) return -1;
    return selBuf[3];
}


и в обработчике событий:

Код

        case WM_LBUTTONDBLCLK:
            hit=DoSelect(LOWORD(lParam),HIWORD(lParam));
            break;


где-то что-то не работает, hit всегда -1.
подскажите, что не так.
PM MAIL   Вверх
buian
Дата 14.5.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.2.2005

Репутация: нет
Всего: нет



ребят.
какой-то странный глюк, если рисую примитив GL_QUADS поименный, то все нормально.
с точками, треугольниками почему-то не определяет.

разобрался, по глупости поставил при инициализации glViewPort кооодинаты руками, при этом не на все окно. Поэтому похоже и не совпадали координаты мышки и расчеты OpenGL.

Это сообщение отредактировал(а) buian - 14.5.2009, 17:46
PM MAIL   Вверх
JanryMayers
Дата 31.3.2010, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



Цитата

Ну тогда по другому, подсвечивать ещё до клика, читая координаты мыши. А по вопросу понимания куда отрисовывается объект, не могу сказать.  Решить этот вопрос можно, только я не знаю как. 


А кто то может подсказать?

Предположение, что для каждой фигуры, при инициализации, как объект на доске, запоминаются её координаты экрана исходя из начальных координат.

Но вопрос первый, касающийся масштаба. В ЖЛ сцене координаты точек имеют вещественный тип, к примеру 2.0f. То есть при инициализации понадобится их сохранить, а потом сравнить с координатами мыши, после нажатия, у которых значение целое и положительное. Во общем говоря как преобразовывать координаты курсора в ЖЛ координаты и наоборот?

Второй вопрос. А если у нас, к примеру не 8 фигур, а больше 1000, то не ужели придётся проверять после каждого клика координаты всех 1000 фигур?




Это сообщение отредактировал(а) JanryMayers - 31.3.2010, 04:03
PM MAIL   Вверх
Rickert
Дата 31.3.2010, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Модератор: Пожалуйста, один топик - один вопрос.
Правила форума: http://forum.vingrad.ru/index.php?act=boardrules

buianJanryMayers
Ещё раз устроите мусорку в темах - получите предупреждение.
Закрыто.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1010 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.