2013-10-13 6 views
0

Мне нужно установить цвет для пикселя.Получить и установить цвет пикселя

Когда я пытаюсь установить цвет определенного пикселя (нажав левую кнопку мыши). Моя функция мыши.

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 }; Так что вопрос как установить цвет для пикселя с координатами х и у?

+2

Пожалуйста, не используйте 'new' для массива только 3 элементов (у вас есть утечка памяти BTW). Сделайте 'readPixel' принимающим указатель на предварительно выделенный массив и выделим массив из стека. – datenwolf

+0

Возвращает ли 'glGetError()' что-нибудь? Когда вы просматриваете свой код в отладчике, что вы видите? – user1118321

+0

Я не использовал 'glGetError()'. Также я решил первый вопрос. Отладчик для 'drawPixel' не показывает никаких проблем - все параметры верны. Однако пиксель не меняет цвет, когда я нажимаю на него. – lapots

ответ

0

Решение изменить GL_UNSIGNED_BYTE в GL_FLOAT и не pop элементы из стека

Смежные вопросы