WebGL着色器LUT在iOS上出现错误结果

时间:2017-03-08 11:30:19

标签: javascript ios three.js glsl webgl

我目前在WebGL中使用片段着色器(由Three.js提供支持),它使用纹理作为查找表(LUT)。这最初是在我的笔记本电脑上开发的,但后来我决定将其扩展到移动设备上。我在iPhone上打开页面,发现它看起来完全不同。剥离我的代码后,只看到我从LUT得到的东西,我注意到结果是不同的。我的LUT代码在

之下
//equipment-SL-routing.module.ts
const routes: Routes = [
  {
    path: '',
    component: EquipmentComponent,
  },
];

添加 uniform sampler2D texture1; uniform sampler2D lutMap; varying vec2 vUv; precision highp float; vec3 rgb2hsv(vec4 c) { vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); float d = q.x - min(q.w, q.y); float e = 1.0e-10; return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); } void main() { vec4 inColour = texture2D(texture1, vUv); // convert to hsv vec3 hsv = rgb2hsv(inColour); // scale it up hsv = vec3(floor(hsv[0] * 128.0), floor(hsv[1] * 128.0), floor(hsv[2] * 128.0)); // map to how we've stored our value float posF = ((hsv[0] * 128.0*128.0) + (hsv[1] * 128.0) + hsv[2]); // calculate the actual position in our map vec2 posV = vec2(floor(posF / 2048.0) / 2048.0, 1.0 - mod(posF, 2048.0) / 2048.0); // the colour gl_FragColor = texture2D(lutMap, posV); } 行以尝试测试它是否精确导致此问题,但似乎没有任何区别。我已经在我的工作笔记本电脑上检查了http://webglreport.com/而没有使用手机,他们为片段着色器精度提供了相同的值。我还有什么可以尝试的吗?为了清楚起见,因为这最初导致笔记本电脑出现问题,我告诉我的纹理使用最近的滤镜映射,例如。

precision highp float

0 个答案:

没有答案