我正在使用WebGL浮點紋理來存儲矩陣。 每行有N個矩陣。WebGL - 使用任意二進制數據的紋理和浮點錯誤
在着色器中,我得到了這些矩陣,給定了每個向量的相對大小以及每個紋理行。
例如,如果我有每行10點的矩陣,和10行,着色器得到:
u_vector_size = 1/(10 * 4)
u_row_size = 1/10
有了這些信息,我取4個像素從紋理:
uniform sampler2D u_boneMap;
uniform float u_vector_size;
uniform float u_row_size;
mat4 boneAtIndex(float column, float row) {
column *= u_vector_size * 4.0;
row *= u_row_size;
return mat4(texture2D(u_boneMap, vec2(column, row)),
texture2D(u_boneMap, vec2(column + u_vector_size, row)),
texture2D(u_boneMap, vec2(column + u_vector_size * 2.0, row)),
texture2D(u_boneMap, vec2(column + u_vector_size * 3.0, row)));
}
的問題?這在某些驅動程序下不起作用。
我主要在Mac上看到它,但它也發生在Windows上,在那裏獲取錯誤的數據,一切都變得瘋狂。
我假設這是由於浮點錯誤。
主要是由於結果改變的事實,無論我使用的是具有二維權力的紋理還是不是。 數據完全相同,只是每個矢量和行的大小相對於整個紋理大小的變化而言。
通常我會使用紋理緩衝區,但是這是WebGL代碼,WebGL只支持紋理。
有什麼辦法可以使這種獲取矩陣的紋理可靠和一致嗎?
您是否將紋理過濾設置爲GL_NEAREST? –
我做到了。我甚至可以上傳測試,如果它感興趣的人,假設可以上傳文件在SO – user2503048
進一步調查後,似乎這隻發生在Hacintosh,所以我想有一個驅動程序錯誤在那裏處理NPOT紋理。我不太確定Hacintosh是如何工作的,從未安裝過Mac或有Mac。我會檢查我可以向誰報告這個錯誤。 – user2503048