Jose Vicente Posted May 19, 2016 Share Posted May 19, 2016 Hello. I'm trying to understand how camera minZ and maxZ works, to define it correctly for my scene. If I'm, not wrong, those values define the position for near and far planes. I'm not able to define them properly. In http://www.babylonjs-playground.com/#1JNDSK#3, I have defined a sphere placed at 0, 0, 0, with diameter = 2, and there is a camera located a 0, 0, 20. Camera minZ is set to 38, and the sphere starts dissapearing. Lower values, like 37, doesn't affect the sphere. I don't understand this behavior. Sphere min Z value its Z = -1, and I can't undestand why minZ = 37 doesn't hides the sphere and value = minZ =38 hides partially. Anyone can help? Thanks in advance. Best Regards. Quote Link to comment Share on other sites More sharing options...
GameMonetize Posted May 19, 2016 Share Posted May 19, 2016 Hello minZ and maxZ define the clip planes and are used to create the projectionmatrix: https://github.com/BabylonJS/Babylon.js/blob/master/src/Cameras/babylon.camera.ts#L410 A projection matrix is build like this: https://github.com/BabylonJS/Babylon.js/blob/master/src/Math/babylon.math.ts#L2706 minZ and MaxZ are used to scale the depth values from [minZ,maxZ] to [0,1] Here is an example to better capture it: http://www.babylonjs-playground.com/#1JNDSK#8 If you want to get a clipPlane (not a nearPlane), you can use scene.clipPlane; Quote Link to comment Share on other sites More sharing options...
Wingnut Posted May 19, 2016 Share Posted May 19, 2016 I built a fancy tester. http://www.babylonjs-playground.com/#1JNDSK#10 Ain't I just something? Looking straight -z, on-screen position-reporting, fancy edges-rendering, severely-reduced mousewheel sensibility, severely-adjusted camera.speed which is barely working if at all. Fancy stuff. All designer label stuff. heh Don't be messing around in MY version... unless you are dressed for dinner. High class PG. Wash-up a bit and dress appropriately, eh? jerome and dbawel 2 Quote Link to comment Share on other sites More sharing options...
dbawel Posted May 20, 2016 Share Posted May 20, 2016 @Wingnut - Wow, am I sensing an ego here? You crack me up dude! Always good for a little comic relief. Wingnut 1 Quote Link to comment Share on other sites More sharing options...
Jose Vicente Posted May 23, 2016 Author Share Posted May 23, 2016 Thanks to all. Finaly I have ben able to understand how they work. Regards. Wingnut 1 Quote Link to comment Share on other sites More sharing options...
Venerated1 Posted April 8, 2017 Share Posted April 8, 2017 Save doesn't seem to be working for some reason, but you can copy and paste this into playground. This is a fun demo of a my random stars rather than a skybox. They require a pretty crazy maxZ. This was also my playing around with creating instances. With some random scaling and the for loop set to 10,000 it's even more beautiful var createScene = function () { // This creates a basic Babylon Scene object (non-mesh) var scene = new BABYLON.Scene(engine); scene.clearColor = true; // This creates and positions a free camera (non-mesh) var camera = new BABYLON.FreeCamera("camera1", new BABYLON.Vector3(0, 5, -10), scene); camera.setTarget(BABYLON.Vector3.Zero()); camera.maxZ = 32000; // This attaches the camera to the canvas camera.attachControl(canvas, true); // This creates a light, aiming 0,1,0 - to the sky (non-mesh) var light = new BABYLON.HemisphericLight("light1", new BABYLON.Vector3(0, 1, 0), scene); // Our built-in 'ground' shape. Params: name, width, depth, subdivs, scene var ground = BABYLON.Mesh.CreateGround("ground1", 6, 6, 2, scene); var matForStars = new BABYLON.StandardMaterial("starMat", scene); matForStars.emissiveColor = new BABYLON.Color3(1, 1, 1); matForStars.specularColor = new BABYLON.Color3(0, 0, 0); matForStars.diffuseColor = new BABYLON.Color3(0, 0, 0); var star = BABYLON.Mesh.CreateSphere("star", 1, 20, scene); star.material = matForStars; star.position.z = 14000; // Create some instances, make a bunch of stars var stars = new Array(); for (var i = 0; i < 1000; i++) { var random1 = (Math.random() - 0.5) * 32000; var random2 = (Math.random() - 0.5) * 32000; var random3 = (Math.random() - 0.5) * 32000; var magnitudeStar = Math.sqrt(random1 * random1 + random2 * random2 + random3 * random3); if (magnitudeStar < 14000 || magnitudeStar > 16000 ) { i--; } else { stars[i] = star.createInstance('Instance' + i); stars[i].position.x = random1; stars[i].position.y = random2; stars[i].position.z = random3; } } return scene; }; Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.