I'm entirely unfamiliar with Unity3D's more complex feature set and am curious if it has the capability to take a picture and then manipulate it. Specifically my desire is to have the user take a selfie and then have them trace around their face to create a PNG that would then be texture mapped onto a model.
I know that the face mapping onto a model is simple, but I'm wondering if I need to write the photo/carving functionality into the encompassing Chrome app, or if it can all be done from within Unity. I don't need a tutorial on how to do it, just asking if it's something that is possible.
We first start by deciding on the condition we use to change the camera. For now we'll use Input buttons 1, 2 and 3 to switch between cameras. We go into Project Settings -> Input Manager and add three new items to the list, which we'll label Switch1, Switch2, and Switch3. Each correspond to the button on the keyboard.
Yes, this is possible. You will want to look at the WebCamTexture functionality.
You create a WebCamTexture and call its Play() function which starts the camera. WebCamTexture, as any Texture, allows you to get the pixels via a GetPixels() call. This allows you to take a snapshot in when you like, and you can save this in a Texture2D. A call to EncodeToPNG() and subsequent write to file should get you there.
Do note that the code below is a quick write-up based on the documentation. I have not tested it. You might have to select a correct device if there are more than one available.
using UnityEngine; using System.Collections; using System.IO; public class WebCamPhotoCamera : MonoBehaviour { WebCamTexture webCamTexture; void Start() { webCamTexture = new WebCamTexture(); GetComponent<Renderer>().material.mainTexture = webCamTexture; //Add Mesh Renderer to the GameObject to which this script is attached to webCamTexture.Play(); } IEnumerator TakePhoto() // Start this Coroutine on some button click { // NOTE - you almost certainly have to do this here: yield return new WaitForEndOfFrame(); // it's a rare case where the Unity doco is pretty clear, // http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html // be sure to scroll down to the SECOND long example on that doco page Texture2D photo = new Texture2D(webCamTexture.width, webCamTexture.height); photo.SetPixels(webCamTexture.GetPixels()); photo.Apply(); //Encode to a PNG byte[] bytes = photo.EncodeToPNG(); //Write out the PNG. Of course you have to substitute your_path for something sensible File.WriteAllBytes(your_path + "photo.png", bytes); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With