2015-01-02 2 views
2

glVertex을 사용하여 그림을 그려 나가려고합니다.RGB 값이 음수 일 수 있습니까?

struct Pixel{ 
    GLbyte R, G, B; 
}; 

GLbyte * originalData = NULL; 

. . . 

originalData = (GLbyte *)malloc(IMAGE_SIZE); 
fread(originalData, IMAGE_SIZE, 1, file); 
    for (int n = 0; n < 256 * 256; n++){ 
     pixels[n].R = data[n * 3 + 0]; 
     pixels[n].G = data[n * 3 + 1]; 
     pixels[n].B = data[n * 3 + 2]; 

     if (pixels[n].R < (GLbyte)0) std::cerr << "??" << std::endl; 
    } 

그리고 디스플레이 기능 : 그리고 여기 내 코드는

glBegin(GL_POINTS); 
unsigned int i = 0; 
for (unsigned row = 0; row < iWidth; row++){ 
    for (unsigned col = 0; col < iHeight; col++){ 
     glColor3b(pixels[i].R, pixels[i].G, pixels[i].B); 
     glVertex3f(row,col,0.0f); 
     i++; 
    } 
} 
glEnd(); 

내가 glDrawPixels(256, 256, GL_RGB, GL_UNSIGNED_BYTE, originalData); 모든 것이 OK,하지만 난 내 방법을 사용하고 때 색상이 혼합 얻을 사용하고 있습니다.

RGB 값이 음수 일 수 있습니까? 내가 쓸 때

glColor3b(abs(pixels[i].R), abs(pixels[i].G), abs(pixels[i].B)); 

내 출력이 좋아 보인다. (그러나 다시 약간의 색이 섞이게된다.)

주 1 : 나는 포토샵

NOTE2로 만든 .raw 파일을 래스터 화하기 위해 노력하고있어 : 당신이 사용하는 내 방법은 더미 알고을,하지만 난 실험을하고있어 일

+2

'glDrawPixels'에'GL_UNSIGNED_BYTE'를 사용하고 있기 때문에 (자신이 말하는대로 괜찮습니까?), 자신의 메서드에서'GLubyte'와'glColor3ub'를 사용하지 않아야합니까? – Michael

답변

4

glColor3b은 인수를 바이트로 서명 된 것으로 해석합니다. 그래서 어떤 색상 값> = 128은 음수로 해석되어 나중에 파이프 라인에서 0으로 클램프됩니다 (적절한 기본값을 가정 할 때). 당신이 전체 0 ~ 255의 범위를 사용하려면 때문에

, 단지 glColor3ub를 사용하고 부호 바이트입니다 유형 GLubyte을 사용합니다.

관련 문제