• Domingo 22 de Diciembre de 2024, 22:19

Autor Tema:  Coordenadas Mouse Directx C++  (Leído 3790 veces)

zoiberg

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Coordenadas Mouse Directx C++
« en: Domingo 26 de Marzo de 2006, 05:56 »
0
Estoy creando un juego de estrategia en tiempo real como proyecto final de carrera. Decidí hacerlo en DirectX 9.
El problema que tengo es que no sé cómo calcular las coordenadas en 3D de una posición pulsada por el mouse.
Si recojo las coordenadas pulsadas así:

             GetCursorPos( &Point );
             GetWindowRect( m_hWnd, &rcWindowRect );
             GetCursorPos( &Point );
             iMouseX = Point.x-g_iXOffset-rcWindowRect.left;
             iMouseY = Point.y-g_iYOffset-rcWindowRect.top;

Lo que guardo son las coordenadas X e Y del punto de la ventana que he clicado, y a mí me interesaría capturar las coordenadas X e Y del mapa en 3D que he generado, la coordenada Z también.
Esto me serviría para calcular los vectores de movimiento, para seleccionar unidades, etc..

¿Alguien me sabría ayudar?

zoiberg

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Coordenadas Mouse Directx C++
« Respuesta #1 en: Domingo 26 de Marzo de 2006, 22:30 »
0
Al final me he podido responder a mí mismo.

Por si a alguien le interesa, la solución es coger la posición de Mouse y convertirla en un rayo que apunta hacia el plano 3D. Entonces se calculan todas las colisiones que este rayo tiene con los objetos 3D que estén en su trayectoria, y se selecciona la colisión más cercana (la del único objeto colisionado visible).

Aquí está el enlace a la página que lo explica con detalle :

http://www.toymaker.info/Games/html/picking.html

y esta otra, incluso tiene un ejemplo creado con C++ y directX 8.1:

http://www.mvps.org/directx/articles/impro...ray_picking.htm

Si teneis el SDK de DirectX 9.0 como yo, necesitareis copiar la libreria libci.lib
( que podeis bajaros aquí: http://www.scrontsoft.com/DX81.asp?pageID=1 )
en el directorio del proyecto.

Aparte, en el DXSDK 9.0, en el apartado de samples/C++/ hay la carpeta Pick, la cual contiene otro ejemplo de uso de esta técnica.