La IA no sabe razonar
“We’re driving Cadillacs in our dreams“
Estoy tratando de limpiar un poco la bitácora de khpx de bugs viejos a los que ya le he dedicado tiempo pero que siguen ahi, incólumes, reacios a ser eliminados.
El que comencé a trabajar hoy bien temprano es con el cursor del mouse. Cuando el juego está en windowed mode, es decir, no está en full screen, o dicho de otra forma, la ventana del juego tiene los íconos del sistema para minimizar, maximizar y cerrar la ventana, y abajo están los iconos de las aplicaciones de Windows, y movemos el cursor del mouse hasta arriba, saliendo del juego, el cursor se pierde y hay que mover el mouse hasta encontrar donde se metió. Esa implementación creo que es del 2021 (o quizás del 2020) y siempre ha tenido ese problema, a pesar de mis intentos por resolverlo. Mi primera presunción es que era un problema de resolución de pantalla pero lo descarté por alguna razón. Grave error, ya veremos por qué.
Esta mañana se me ocurrió revisar de nuevo el tema de las transformaciones de view, project y world, que son las tres transformaciones que DirectX utiliza para establecer los objetos en pantalla. Agregué inicializaciones de todas estas transformaciones a la matriz identidad para garantizar que todo estaba en su estado original. Pero nada, el problema continuaba.
Se me ocurrió entonces hablar con Gemini, el ChatGPT de Google a ver si se le ocurría alguna idea adicional. Me pasó una larga lista de posibilidades, incluyendo el tema de transformaciones. Todas ya las había revisado excepto el SCISSORs, así que lo inicialicé tambien. El código antes de hacer el DrawPrimitive de DirectX quedó así:
D3DXMATRIXA16 matProj, matView, matWorld;
D3DXMatrixIdentity(&matProj);
D3DXMatrixIdentity(&matView);
D3DXMatrixIdentity(&matWorld);
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);
g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);
g_pd3dDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, false);
Le formulé varias otras preguntas a Geminí pero se quedó ahí sugiriendo más o menos lo mismo. Así que no tuve más remedio que hacer lo que los humanos hacemos:
Pensar
Yo creo que no pasaron 5 minutos hasta que llegué a la conclusión de que tenía que revisar otra vez el tema de la resolución de la pantalla. Si la resolución de la pantalla no concuerda con la resolución interna de la aplicación, lógicamente cuando el cursor del mouse se mueve del juego al sistema y viceversa va a haber un cambio de posición, es decir no va a coincidir el posicionamiento. Si el juego está en resolución 1200 x 800 y mi pantalla está en 1910 x 1080, si el cursor está en 600,10 y sale al sistema va a aparecer en la posición alrededor del 33% de la longitud horizontal de la pantalla, mientras que en el juego, 600 corresponde al 50% de la pantalla: ¿cómo fue que no se me ocurrió eso antes? Peor, ¿por qué Gemini no me sugirió revisar la diferencia de resoluciones entre el juego y el sistema? La IA no sabe razonar, solo repite lo que encuentra en internet.
Ahora que corregí el bug me parece que era demasiado tonto y obvio. Sin embargo, estuve horas estancado dándole vueltas. Voy a tener que pensar con más frecuencia, y dejar de usar Gemini. Me aporta mejores dividendos.