提交 0c4eb0f6 编写于 作者: L Luca Siciliano

Added chroma aberration parameters to OculusRiftEffect.js

上级 36b82b05
......@@ -20,7 +20,8 @@ THREE.OculusRiftEffect = function ( renderer, options ) {
interpupillaryDistance: 0.064,
lensSeparationDistance: 0.064,
eyeToScreenDistance: 0.041,
distortionK : [1.0, 0.22, 0.24, 0.0]
distortionK : [1.0, 0.22, 0.24, 0.0],
chromaAbParameter: [ 0.996, -0.004, 1.014, 0.0]
};
// Perspective camera
......@@ -48,7 +49,8 @@ THREE.OculusRiftEffect = function ( renderer, options ) {
"scale": { type: "v2", value: new THREE.Vector2(1.0,1.0) },
"scaleIn": { type: "v2", value: new THREE.Vector2(1.0,1.0) },
"lensCenter": { type: "v2", value: new THREE.Vector2(0.0,0.0) },
"hmdWarpParam": { type: "v4", value: new THREE.Vector4(1.0,0.0,0.0,0.0) }
"hmdWarpParam": { type: "v4", value: new THREE.Vector4(1.0,0.0,0.0,0.0) },
"chromAbParam": { type: "v4", value: new THREE.Vector4(1.0,0.0,0.0,0.0) }
},
vertexShader: [
"varying vec2 vUv;",
......@@ -59,10 +61,11 @@ THREE.OculusRiftEffect = function ( renderer, options ) {
].join("\n"),
fragmentShader: [
"uniform vec2 scale;",
"uniform vec2 scaleIn;",
"uniform vec2 lensCenter;",
"uniform vec4 hmdWarpParam;",
"uniform vec2 scale;",
"uniform vec2 scaleIn;",
"uniform vec2 lensCenter;",
"uniform vec4 hmdWarpParam;",
'uniform vec4 chromAbParam;',
"uniform sampler2D texid;",
"varying vec2 vUv;",
"void main()",
......@@ -71,12 +74,18 @@ THREE.OculusRiftEffect = function ( renderer, options ) {
" vec2 theta = (uv-lensCenter)*scaleIn;",
" float rSq = theta.x*theta.x + theta.y*theta.y;",
" vec2 rvector = theta*(hmdWarpParam.x + hmdWarpParam.y*rSq + hmdWarpParam.z*rSq*rSq + hmdWarpParam.w*rSq*rSq*rSq);",
" vec2 tc = (lensCenter + scale * rvector);",
" tc = (tc+1.0)/2.0;", // range from [-1,1] to [0,1]
" if (any(bvec2(clamp(tc, vec2(0.0,0.0), vec2(1.0,1.0))-tc)))",
' vec2 rBlue = rvector * (chromAbParam.z + chromAbParam.w * rSq);',
" vec2 tcBlue = (lensCenter + scale * rBlue);",
" tcBlue = (tcBlue+1.0)/2.0;", // range from [-1,1] to [0,1]
" if (any(bvec2(clamp(tcBlue, vec2(0.0,0.0), vec2(1.0,1.0))-tcBlue))) {",
" gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);",
" else",
" gl_FragColor = texture2D(texid, tc);",
" return;}",
" vec2 tcGreen = lensCenter + scale * rvector;",
" tcGreen = (tcGreen+1.0)/2.0;", // range from [-1,1] to [0,1]
" vec2 rRed = rvector * (chromAbParam.x + chromAbParam.y * rSq);",
" vec2 tcRed = lensCenter + scale * rRed;",
" tcRed = (tcRed+1.0)/2.0;", // range from [-1,1] to [0,1]
" gl_FragColor = vec4(texture2D(texid, tcRed).r, texture2D(texid, tcGreen).g, texture2D(texid, tcBlue).b, 1);",
"}"
].join("\n")
} );
......@@ -119,9 +128,10 @@ THREE.OculusRiftEffect = function ( renderer, options ) {
// Distortion shader parameters
var lensShift = 4 * (HMD.hScreenSize/4 - HMD.lensSeparationDistance/2) / HMD.hScreenSize;
left.lensCenter = new THREE.Vector2(lensShift, 0.0);
right.lensCenter = new THREE.Vector2(-lensShift, 0.0);
right.lensCenter = new THREE.Vector2(-lensShift, 0.0);
RTMaterial.uniforms['hmdWarpParam'].value = new THREE.Vector4(HMD.distortionK[0], HMD.distortionK[1], HMD.distortionK[2], HMD.distortionK[3]);
RTMaterial.uniforms['chromAbParam'].value = new THREE.Vector4(HMD.chromaAbParameter[0], HMD.chromaAbParameter[1], HMD.chromaAbParameter[2], HMD.chromaAbParameter[3]);
RTMaterial.uniforms['scaleIn'].value = new THREE.Vector2(1.0,1.0/aspect);
RTMaterial.uniforms['scale'].value = new THREE.Vector2(1.0/distScale, 1.0*aspect/distScale);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册