2010-06-21 31 views

Respuesta

7

Un buen lugar para comenzar sería la función gluUnProject, que toma las coordenadas del mouse y calcula las coordenadas del espacio del objeto. Eche un vistazo a http://nehe.gamedev.net/data/articles/article.asp?article=13 para obtener un tutorial básico.

ACTUALIZACIÓN:

Debe habilitar buffer de profundidad para el código en ese artículo a trabajar. El valor Z para las coordenadas del mouse se determina en función del valor en el buffer de profundidad en ese punto.

En su código de inicialización, asegúrese de hacer lo siguiente:

glEnable(GL_DEPTH); 
+0

Dibujo un Quad de 1 unidad de longitud en 0, 0, 0, luego, cuando coloco el mouse sobre él, me da una posición ridícula como 17, -344, -177. ¿Hay algo que pueda hacer al respecto? La cámara Y es 10. –

+0

¿Ha habilitado el almacenamiento en memoria intermedia de profundidad? – robinjam

+0

No estoy muy seguro de cómo habilitarlo, estoy bastante seguro de que estoy llamando a glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) –

4

Un punto en la pantalla representa una línea completa (un conjunto infinito de puntos) en el espacio 3D.

La mayoría de las personas con preguntas similares a las suyas realmente están tratando de seleccionar un objeto haciendo clic en él. Si eso es lo que buscas, OpenGL ofrece un modo de selección que generalmente es más efectivo que tratar de convertir las coordenadas de la pantalla en coordenadas del mundo real.

El uso del modo de selección es (por lo general) bastante simple: comienza con gluPickMatrix, que utiliza para especificar un pequeño cuadro alrededor del punto de clic. Luego dibuja tu escena en selection mode. Cuando haya terminado, en lugar de dibujar realmente algo, le devolverá registros de lo que se dibujaría en el cuadro que especificó. Si la memoria se sirve, se organizan en orden Z, de modo que la primera en la lista es la que se habría mostrado de frente (es decir, la que generalmente desea).

+0

También estaba a punto de señalar el modo de selección. Un problema que veo con el modo de selección en este caso de uso es que parece que el programa debe seguir el cursor del mouse en tiempo real. Para eso, el modo de selección puede ser demasiado lento. – ypnos

+0

@ypnos: Ciertamente, no es la única respuesta posible, pero a menos que haya una buena razón para hacer lo contrario, es con lo que comenzaría, y solo haría algo más cuando/si se hiciera evidente que el rendimiento iba a ser ser un problema real –

Cuestiones relacionadas