2012-01-11 138 views
2

我在Linux中看到來自OpenGL的顏色略微變暗/ alpha輸出。我沒有看到1.0的紅色分量值,而是看到〜.96988。例如,我有一個完全紅色的矩形(紅色分量= 1.0,alpha = 1.0,綠色和藍色爲零)。無論是否啓用我的頂點/片段着色器,都會發生調光。OpenGL顏色/ alpha輸出稍微變暗

禁用照明,因此在顏色計算中不應包含環境光或其他光源。

glBegin(GL_POLYGON); 
glColor4f(1.0, 0.0, 0.0, 1.0); 
glVertex2f(0.0, 0.0); 
glVertex2f(1.0, 0.0); 
glVertex2f(1.0, 1.0); 
glVertex2f(0.0, 1.0); 
glEnd(); 

我拍攝了所得窗口的屏幕截圖,然後將圖像加載到繪圖程序中並檢查任何特定像素。我看到一個紅色的分量整數值爲247,而不是255,如我所料。當我在啓用頂點着色器的情況下運行時,我看到gl_Color.r組件已經是< 1.0,並且gl_Color.a組件也是。

所有的OpenGL狀態都是默認值。我錯過了什麼?

由於問題編輯: 我通過在頂點着色器中檢查它的粗略迭代過程確定紅色分量的值爲〜.96988,並在紅色分量高於閾值。我一直在減少恆定的價值,直到我不再看到紫色。這奏效了:

if(gl_Color.r > 0.96988) 
{ 
    gl_Color.b = 1.0; \\ show purple instead of the slightly dimmed red. 
} 

編輯:

//VERTEX SHADER 
varying vec2 texture_coordinate; 
void main() 
{ 
    gl_Position = ftransform(); 
    texture_coordinate = vec2(gl_MultiTexCoord0); 
    gl_FrontColor = gl_Color; 
} 


//FRAGMENT SHADER 
varying vec2 texture_coordinate; 
uniform sampler2D Texture0; 
void main(void) 
{ 
    gl_FragColor = texture2D(Texture0, texture_coordinate) * gl_Color; 
} 

Texture0在這種情況下是完全飽和的紅色長方形紅色= 1.0,阿爾法= 1.0。如果沒有紋理,使用頂點顏色,我會得到相同的結果;稍微暗淡的紅色和Alpha組件。

還有一件事,Red和Aplha頻道被「調光」了相同的數量。所以有些東西會導致整個顏色分量變暗。正如我在主要問題中所說的,無論是使用着色器還是固定功能管道,都會發生這種情況。

只是爲了好玩,我在Windows中使用DirectX進行了類似的測試,結果產生了紅色組件254的矩形;仍然略微變暗,但幾乎沒有。

+0

請問我可以知道你看到的值~96988。 我想這是非常正常的浮點值。 – 2012-01-11 21:45:53

+0

你有合成器嗎?如果是這樣,請確保它不是通過插件或其他東西與您的窗口輸出玩遊戲。 – genpfault 2012-01-11 21:52:05

+0

司機是否有伽瑪設置? – 2012-01-11 23:11:40

回答

2

我在回答我自己的問題,因爲我解決了這個問題,而且我是原因。事實證明,當從二進制轉換爲浮點時,我錯誤地計算了模型中頂點的顏色通道,包括alpha。一個愚蠢的錯誤,引入了這種輕微的暗淡。

例如:

currentColor = m_pVertices[i].clr; // color format ARGB 
float a = (1.0/256) * (m_pVertices[i].clr >> 24); 
float r = (1.0/256) * ((m_pVertices[i].clr >> 16) % 256); 
float g = (1.0/256) * ((m_pVertices[i].clr >> 8) % 256); 
float b = (1.0/256) * (m_pVertices[i].clr % 256); 
glColor4f(r, g, b, a); 

我應該255衛生署進行分割!

似乎唯一的變暗是在我的大腦,而不是在OpenGL。