Este es mi código que utilizo para conseguir mi posición del ratón en la escena 3D:glReadPixels() realmente una solución lenta y mejor para obtener las coordenadas de OpenGL desde la posición del mouse?
void GetOGLPos(int x, int y, GLdouble &pX, GLdouble &pY, GLdouble &pZ){
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
winX = (float)x;
winY = (float)viewport[3]-(float)y;
glReadPixels(x, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &pX, &pY, &pZ);
}
Pero me di cuenta de una cosa mala ... 1-2 llamadas a esa función por cuadro hace uso de la CPU al 100%, 3 o más llamadas 200% de uso de CPU (tengo 4 núcleos, 1-2 llamadas = 25%, 3 o más llamadas = 50%, no puedo superar el 50%, creo ...)
Es Hay alguna otra forma de hacer esto de manera eficiente? Estoy usando 4 llamadas a esa función en cada cuadro, así que sé qué áreas debo representar para mi escena (las tomo de cada esquina de la pantalla).
También uso esto para saber a qué lugar estoy apuntando con el mouse, por lo que lo necesito en tiempo real, pero me gustaría usar menos CPU, porque incluso solo 1 llamada hace que sea 100% de uso para sistemas single core.
EDITAR
He intentado método glPushName(), pero es incluso más lenta, más probablemente más lento en mi GPU que en la CPU. Además, mi uso de CPU es solo de 0-1% cuando no uso una sola llamada glReadPixels() en mi programa. Lo extraño es que obtengo un uso elevado de la CPU, pero no hace que el programa se quede rezagado como se esperaría con el 100% de uso ... solo aparece el problema cuando uso otros programas mientras mi programa está encendido, entonces es lento para usarlos .
ive intenté el método glPushName(), es incluso más lento. de hecho, creo que no usa CPU, pero mi GPU, y obtengo 10fps en lugar de 500 fps ... – Newbie
ten en cuenta que no selecciono solo 3 objetos posibles, tengo una cantidad ilimitada de objetos posibles ... – Newbie
Agregué otro enlace acerca seleccionando GL y cómo abordarlo Espero que encuentre algo útil allí. – Laserallan