max-mapper / voxel-engine

3D HTML5 voxel game engine
http://maxogden.github.com/voxel-engine
BSD 3-Clause "New" or "Revised" License
1.29k stars 220 forks source link

Allow camera overide in opts #45

Open christopherdebeer opened 11 years ago

christopherdebeer commented 11 years ago

I've been trying to get the voxel-engine to accept a custom camera (ie: OrthographicCamera ) and it would seem that the Game prototype needs something like this:

this.camera = this.createCamera( opts.camera || false )

and createCamera needs changing like so:

Game.prototype.createCamera = function( customCamera ) {
  camera = customCamera || new THREE.PerspectiveCamera(60, this.width / this.height, 1, 10000)
  camera.lookAt(new THREE.Vector3(0, 0, 0))
  this.scene.add(camera)
  return camera
}

Does this seem like a good idea, or am I being stupid? If not then pull request to follow.

snagy commented 11 years ago

It seems like a good idea to me.

I've out a bunch of the camera & renderer stuff into a separate package instead of leaving them in voxel-engine, so it could be easier to add custom camera functionality and special rendering behavior.

I put that in https://github.com/snagy/voxel-view though it's not really anything interesting yet.

I'll probably add support for multiple views to voxel-engine and then put in a pull request.

snagy commented 11 years ago

Ok, maybe I'm not going to add support for multiple views quite yet, because using one scene with multiple renderers doesn't work with three.js. Each canvas is a separate ogl context and thus any opengl resources can't be shared between them.

Anyway, I still like voxel-view just to pull that functionality out of the engine into a separate package. Let me know what you think.

chrisdickinson commented 11 years ago

i'm actually working on a voxel-view as well, but the idea is that it makes the camera a physical object in the game world that can be attached to other objects via mount points (basically, an Object3D target, a springiness, and an offset vector).

chrisdickinson commented 11 years ago

for reference, the repo is here.

snagy commented 11 years ago

It looks like your repo is addressing different things than mine, and they can function together right out of the box. Mine is just separating the camera/renderer interaction from the engine, and yours is adding specific behavior to the camera. You could grab the camera from the view and put it straight into the physical camera and it would work the same as getting it from the engine. (related question: would we prefer to pass a camera into a view, or to have other modules get a camera from the view? pass-in seems preferable to me)

Mine could hopefully make it easy to add something like an editor view with multiple viewpoints/cameras by making a new voxel-view replacement and passing that to the engine.