Мне нужно установить цвет для пикселя.Получить и установить цвет пикселя
Когда я пытаюсь установить цвет определенного пикселя (нажав левую кнопку мыши). Моя функция мыши.
void mouse(int button, int state, int x, int y) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
pixel *p = new pixel();
p->x = x;
p->y = HEIGHT - y;
stack.push(p);
float arr[3];
readPixel(p->x, p->y, arr);
std::cout<<"pixel color: ";
std::cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<std::endl;
drawPixel(p->x, p->y);
}
}
Здесь readPixel
метод
void readPixel(int x, int y, float (&a)[3]) {
GLubyte arr[3];
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, arr);
a[0] = (float)arr[0]/255.0f;
a[1] = (float)arr[1]/255.0f;
a[2] = (float)arr[2]/255.0f;
};
Проблема с установкой цвета для пикселя. Я создаю структуру pixel
с полями x
и y
. Когда я нажимаю левую кнопку, в стек добавляется объект pixel
. Когда я пытаюсь установить цвет для пикселя (нарисовать) - пиксель не меняет свой цвет в методе drawPixel
void draw() {
glBegin(GL_POINTS);
if (!stack.empty()) {
drawPixel(stack.top()->x, stack.top()->y);
stack.pop();
}
glEnd();
glFlush();
};
void drawPixel(int x, int y) {
glRasterPos2i(x, y);
glDrawPixels(1, 1, GL_RGB, GL_UNSIGNED_BYTE, &val);
};
Где &val
это float val[3] = { 1.0, 1.0, 0.0 };
Так что вопрос как установить цвет для пикселя с координатами х и у?
Пожалуйста, не используйте 'new' для массива только 3 элементов (у вас есть утечка памяти BTW). Сделайте 'readPixel' принимающим указатель на предварительно выделенный массив и выделим массив из стека. – datenwolf
Возвращает ли 'glGetError()' что-нибудь? Когда вы просматриваете свой код в отладчике, что вы видите? – user1118321
Я не использовал 'glGetError()'. Также я решил первый вопрос. Отладчик для 'drawPixel' не показывает никаких проблем - все параметры верны. Однако пиксель не меняет цвет, когда я нажимаю на него. – lapots