Во-первых, обратите внимание, что большая часть этого кода устарела. Но это легче понять из фрагментов кода. Я не делаю все за вас, но я надеюсь, что вы начнете работу, предоставив базовый рабочий процесс.
Есть несколько вещей, которые вам нужно сделать, чтобы получить желаемый результат.
Во-первых, вам нужно загрузить текстуру в видеопамять. Это делается с помощью:
glGenTextures(1, texture_id); //generate a texture object
glBindTexture(GL_TEXTURE_2D, texture_id); //bind the texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); //set filters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); //set filters
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture_width, texture_height, 0, GL_RGB, GL_UNSIGNED_BYTE, original_image_data); //create the actual texture in video ram
Когда это удастся, вы можете нарисовать свою текстуру с помощью:
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
//set to ortographic projection
glOrtho(0.0, window_width, 0.0, window_height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D,texture_id);
glBegin(GL_QUADS);
glTexCoord2f(0, 1); glVertex2f(-1.0f, 1.0f);
glTexCoord2f(1, 1); glVertex2f( 1.0f, 1.0f);
glTexCoord2f(1, 0); glVertex2f( 1.0f, -1.0f);
glTexCoord2f(0, 0); glVertex2f(-1.0f, -1.0f);
glEnd();
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
Следующее, что вам нужно будет сделать, это захватить ввод мыши вашего пользователя. Если вы работаете в Windows, вы можете использовать обратный вызов процедуры окна и найти событие WM_MOUSE. Если вы используете библиотеку для управления окнами, то эта библиотека, вероятно, предоставит функциональность для ввода с клавиатуры и мыши.
Теперь, когда у вас есть ввод с помощью мыши, вы должны рисовать линию на экране каждый раз, когда пользователь перемещает мышь, удерживая нажатой кнопку:
glLineWidth(2.5);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINES);
glVertex2f(mouse_x_start, mouse_y_start);
glVertex2f(mouse_x_end, mouse_y_end);
glEnd();
glColor3f(1.0, 1.0, 1.0);
Когда все вышеперечисленное пойдет хорошо, вы должны увидеть свою текстуру на экране и красную линию, если вы удерживаете кнопку мыши и перемещаете мышь. Вы почти там. Последнее, что нужно сделать, это прочитать пиксели. Вы можете сделать это с помощью glReadPixels() следующим образом:
void glReadPixels(0, 0, ширина_окна, высота_окна, GL_RGB, GL_UNSIGNED_BYTE, новые_данные_изображения);
Теперь у вас есть массив байтов с штрихами пользователя. Я настоятельно рекомендую написать собственный код для этого процесса, потому что код, который я использовал, устарел и должен использоваться только для более старых платформ. Однако рабочий процесс должен оставаться прежним. Я надеюсь, что этого достаточно, чтобы вы начали. Удачи!
person
Kevin
schedule
11.06.2013
glReadPixels()
не работает? - person genpfault   schedule 11.06.2013