我對GLSL中的texture2D()和OpenGL中的glTexImage2D()相關的內部格式感到困惑,當我使用時(注意third
和eighth
參數):與GLSL中的texture2D()和OpenGL中的glTexImage2D()相關的內部格式
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA,
GL_FLOAT, floatDataPtr);
我sampler2D的nonclampedvalue
在GLSL而不鉗位到[0,1]:
vec4 nonclampedvalue = texture2D(my16floattex2d, texcoord1);
當我使用:
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA8, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA,
GL_UNSIGNED_BYTE, byteDataPtr);
我sampler2D在GLSL的clampedvalue
鉗位到[0,1]:
vec4 clampedvalue = texuture2D(myunsignedbytetex2d, texcoord2);
所以我的問題是這樣的:
我會在GLSL什麼價值時調用在glTexImage2D這樣的(夾緊或不夾緊):
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA8, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, GL_FLOAT, floatDataPtr);
什麼樣的價值WIL L I得到GLSL時調用glTexImage2D這樣的(夾緊或不夾緊):
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, byteDataPtr);
正如我無法找到在OpenGL官方網站的詳細信息,什麼樣的價值將在sampler2D質地回報不同的內部格式以及調用glTexImage2D()時傳遞給紋理的數據的不同類型(如上面提到的GL_FLOAT或GL_UNSIGNED_BYTE)?什麼是所有規則?
有沒有人可以幫忙?
似乎在我的程序的功能調用:'glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA16F_ARB,WINDOW_SIZE,WINDOW_SIZE,0,GL_RGBA, GL_UNSIGNED_BYTE,byteDataPtr);'給我一個值鉗位到[0,1]。正如我在[內部格式](http://www.opengl.org/wiki/Image_Format)中所描述的那樣,它是不是[0.0f,255.0f]之間的某個值? – toolchainX 2012-04-26 00:47:01
@ tlh1987:這就是爲什麼我將您鏈接到像素傳輸的頁面。*你在[0,1] *之間給了OpenGL值。你說你的數據是按RGBA順序的,而且每個值都是一個無符號字節。因此,你告訴OpenGL你的數據包含整數值,它們被存儲爲標準化的無符號字節。所有的OpenGL都會讀取您的數據並按照您所描述的解釋它,並將其存儲在可以存儲較大數據的紋理中。 – 2012-04-26 01:10:06
是的,你是對的,謝謝你的幫助! – toolchainX 2012-04-26 02:41:51