Skip to content

Instantly share code, notes, and snippets.

@cecilemuller
Created July 3, 2012 15:00
Show Gist options
  • Save cecilemuller/3040272 to your computer and use it in GitHub Desktop.
Save cecilemuller/3040272 to your computer and use it in GitHub Desktop.
Pixel size to Layer3D size (for BS Contact)
function initialize() {
refresh();
Browser.addRoute(Browser, 'windowSize', Browser.getScript(), 'refresh');
distance = viewpoint.position[2];
fieldOfView = viewpoint.fieldOfView;
}
function shutdown() {
Browser.deleteRoute(Browser, 'windowSize', Browser.getScript(), 'refresh');
}
function refresh(){
var vrmlSize;
var screenSize = Browser.windowSize;
if (screenSize[0] > screenSize[1]){
vrmlSize = new SFVec2f(
Math.tan((Math.atan((screenSize[0] * Math.tan(fieldOfView / 2)) / screenSize[1]) * 2) / 2) * distance * 2,
Math.tan(fieldOfView / 2) * distance * 2
);
} else {
vrmlSize = new SFVec2f(
Math.tan(fieldOfView / 2) * distance * 2,
Math.tan((Math.atan((Math.tan(fieldOfView / 2) * screenSize[1]) / screenSize[0]) * 2) / 2) * distance * 2
);
}
var x1 = 0.5 * vrmlSize[0];
var y2 = -0.5 * vrmlSize[1];
var y1 = y2 + (vrmlSize[1] * 256 / screenSize[1]);
// [Other] layer size: doesn't use the distance and fieldOfView
background.size[1] = 256 / screenSize[1];
// IFS size: uses the distance and fieldOfView
coords.point = new MFVec3f(
new SFVec3f(-x1, y2, 0),
new SFVec3f(-x1, y1, 0),
new SFVec3f(x1, y1, 0),
new SFVec3f(x1, y2, 0)
);
trace(coords.point);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment