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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор объекта в DirectX, Клик мышкой 
:(
    Опции темы
Andrey44
Дата 3.8.2009, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Вобщем вопрс простой, у меня есть сцена и в ней объекты типа ID3DXMesh как мне узнать на каком объекте я кликнул мышкой?
Читал о D3DXComputeBoundingBox и D3DXComputeBoundingSphere, но не могу сам разобраться. smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Andrey44
Дата 4.8.2009, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Господа программисты, неужели никто из людей на форуме никогда не писал никаких игр?
Вот код как я обрабатываю клик мышиный
Код

LPBYTE pPtr = NULL;
//вычисляем Bounding box для фигуры//////////////////////////

    DWORD dwNumVertcs = figureInfo->pMesh->GetNumVertices();
    DWORD dwVertexSize = D3DXGetFVFVertexSize(figureInfo->pMesh->GetFVF());
    if (SUCCEEDED(figureInfo->pMesh->LockVertexBuffer(0, (LPVOID *)&pPtr))) {
        D3DXComputeBoundingBox(
            (D3DXVECTOR3*)pPtr,
            dwNumVertcs,
            dwVertexSize,
            &figureInfo->boundBox->_min,
            &figureInfo->boundBox->_max);
        
        figureInfo->pMesh->UnlockVertexBuffer();
    }

Код

//Рассчитываем координаты мыши/////////////////
struct Ray
{
    D3DXVECTOR3 _origin;
    D3DXVECTOR3 _direction;
};

Ray D3DInstance::CalcPickingRay(int x, int y)
{
    float px = 0.0f;
    float py = 0.0f;

    D3DVIEWPORT9 vp;
    _pd3dDevice->GetViewport(&vp);

    D3DXMATRIX proj;
    _pd3dDevice->GetTransform(D3DTS_PROJECTION, &proj);

    px = ( 2.0f*x / vp.Width  - 1.0f) / proj(0, 0);
    py = (-2.0f*y / vp.Height + 1.0f) / proj(1, 1);

    Ray ray;
    ray._origin    = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
    ray._direction = D3DXVECTOR3(px, py, 1.0f);

    return ray;
}

Код

//ну и проверка на попадание в фигуру
Ray ray = CalcPickingRay(LOWORD(lParam), HIWORD(lParam));
    ////// transform the ray to world space
    D3DXMATRIX view;
    _pd3dDevice->GetTransform(D3DTS_VIEW, &view);
    D3DXMATRIX viewInverse;
    D3DXMatrixInverse(&viewInverse,    0, &view);

    TransformRay(&ray, &viewInverse);
    

    if( D3DXBoxBoundProbe(&_pig._boundBox._min, &_pig._boundBox._max, &ray._origin, &ray._direction))
        ::MessageBox(0, L"Hit!", L"HIT", 0);//СЮДА НИКОГДА НЕ ПОПАДАЕМ

_pig._boundBox._min = _D3DVECTOR = {x=-1.8690541 y=-0.49995124 z=1.2283535 }
_pig._boundBox._max = _D3DVECTOR = {x=-1.4236434 y=-0.049934864 z=1.9911642 }
Если кликаем на фигуре 
ray._origin = _D3DVECTOR = {x=0.00000000 y=0.00000000 z=0.00000000 }
ray._direction = _D3DVECTOR = {x=-0.26792046 y=-0.042527057 z=0.99999994 }
Почему такое непопадание по координатам??? smile 



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Ockonal
Дата 10.8.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Smile
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 9.7.2007
Где: Ukraine::Nikolaev ;

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



Слышали когда-нить о Raycasting'e? Выпускаете луч из камеры по вектору нажатия мыши и проверяете список объектов, которые задел луч. Желательно ввести какой-то идентификатор.
--------------------
Ах да, не заметил, во втором посте вы так и делаете smile Бывали случаи, помогали рисование векторов, чтобы было видно визуально их координаты, попробуйте.

Это сообщение отредактировал(а) Ockonal - 10.8.2009, 23:54
--------------------
Ум заключается не только в знании, но и в умении прилагать знание на деле.Самое лучшее из всех доказательств есть опыт.Каждому человеку свойственно ошибаться, но никому, кроме глупца, несвойственно упорствовать в ошибке.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
m21448
  Дата 10.9.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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