Bob Woodley
Bob Woodley

Reputation: 1284

three.js create texture from cubecamera

When using a cube camera one normally sets the envMap of the material to the cubeCamera.renderTarget, e.g.:

var myMaterial = new THREE.MeshBasicMaterial({color:0xffffff, 
        envMap: myCubeCamera.renderTarget,
        side: THREE.DoubleSide});

This works great for meshes that are meant to reflect or refract what the cube camera sees. However, I'd like to simply create a texture and apply that to my mesh. In other words, I don't want my object to reflect or refract. I want the face normals to be ignored.

I tried using a THREE.WebGLRenderTarget, but it won't handle a cube camera. And using a single perpspective camera with WebGLRenderTarget does not give me a 360 texture, obviously.

Finally, simply assigning the cubeCamera.renderTarget to the 'map' property of the material doesn't work either.

Is it possible to do what I want?

r73.

Upvotes: 2

Views: 1701

Answers (2)

Bob Woodley
Bob Woodley

Reputation: 1284

The answer is: Set the refractionRatio on the material to 1.0. Then face normals are ignored since no refraction is occurring.

In a normal situation where the Cube Camera is in the same scene as the mesh, this would be pointless because the mesh would be invisible. But in cases where the Cube Camera is looking at a different scene, then this is a useful feature.

Upvotes: 1

MacK
MacK

Reputation: 2181

Edit: this is not what the author of the question is looking for, I'll keep my answer below for other people

Your envmap is already a texture so there's no need to apply it as a map. Also, cubemaps and textures are structurally different, so it won't be possible to swap them, or if you succeed in doing that the result is not what you probably you might expect.

I understand from what you're asking you want a static envmap instead to be updated at each frame, if that's the case simply don't run myCubeCamera.updateCubeMap() into your render function. Instead place it at the end of your scene initialization with your desired cube camera position, your envmap will show only that frame.

See examples below:

Upvotes: 1

Related Questions