Как правильно имплементировать событие клавиши клавиатуры для изменения ввода изображения в opengl с помощью SOIL ?
Мне нужно выполнить манипуляцию пикселями с изображениями в glut OpenGL (я знаю, что он старый, но я связан многими другими причинами). Мне нужно изменить изображение несколько раз, показывая их одновременно. Я пытаюсь использовать ключевое событие для этого. Кроме того, я использую библиотеку почвы для загрузки своего изображения.
Что я уже пробовал:
Вот почему я занимаюсь внедрением :
static void init(void); static void mainLoop(void); static void keyEvent( unsigned char key, int x, int y); int main(int argc, char *argv[]) { init(); image = SOIL_load_image("Images/img1.jpg", &width, &height, 0, SOIL_LOAD_RGBA); if(image == NULL) exit(0); argViewportSetImageSize(vp, width, height); argViewportSetPixFormat(vp, AR_PIXEL_FORMAT_RGBA); argViewportSetDispMode(vp, AR_GL_DISP_MODE_FIT_TO_VIEWPORT_KEEP_ACPECT_RATIO); argSetKeyFunc(keyEvent); glutIdleFunc(mainLoop); glutMainLoop(); }
ключевое событие :
static void keyEvent( unsigned char key, int x, int y) { if( key == 'a' ) {image = SOIL_load_image("Images/img2.jpg", &width, &height, 0, SOIL_LOAD_RGBA); if(image == NULL) exit(0); printf("%d x %d\n", width, height); genImages(); } //other key events }
Я замечаю, как ключевое событие работает для любой другой команды (например, манипулировать значением пикселя), но не работает для изменения ввода изображения. Есть ли какой - нибудь способ добиться этого ?
Stefan_Lang
Не могу помочь вам в специфике glut, но вы загружаете изображение перед настройкой функции ключевого события и перед входом в основной цикл glut - как вы ожидаете, что keyEvent может быть вызван в этом случае?
P.S.: может быть, я не правильно понял ваше намерение: если вы намеревались изменить изображение с исходного на другое, после того как первое изображение будет загружено, то вопрос заключается в другом: как вы получаете glut для отображения этого изображения после завершения инициализации? Очевидно, что часть инициализации отвечает за ассоциацию данных изображения с дисплеем - идентифицируйте эту часть и повторите ее в своей функции keyEvent.