Created
August 11, 2018 04:38
-
-
Save ArcherN9/296e6cf89ec863cbdeedc04a52c0d9e1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Creation of ViewRenderable | |
val shareButton = ViewRenderable.builder() | |
.setVerticalAlignment(ViewRenderable.VerticalAlignment.TOP) | |
.setHorizontalAlignment(ViewRenderable.HorizontalAlignment.RIGHT) | |
.setView(view.getARFragment().context, R.layout.share) | |
.build() | |
//Creation of ModelRenderable | |
val video = ModelRenderable.builder() | |
.setSource(view.getARFragment().context, Uri.parse("chroma_key_video.sfb")) | |
.build() | |
//Adding Model to the scene | Extension method called on ParentNode | |
private fun Node.attachVideoNode(videoRenderable: ModelRenderable?) { | |
//Show another anchor object | |
val videoNode = Node() | |
//Attach the new node with the node that this method was called on | |
videoNode.setParent(this@attachVideoNode) | |
//Set local position | |
videoNode.localPosition = this.right //This works fine. The video is rendered next to another ModelRenderable. | |
// Set the scale of the node so that the aspect ratio of the video is correct. | |
val videoWidth = mediaPlayer?.videoWidth?.toFloat() | |
val videoHeight = mediaPlayer?.videoHeight?.toFloat() | |
videoHeight?.let { | |
videoWidth?.apply { | |
videoNode.localScale = Vector3( | |
(this@apply / it), 1.0f, 1.0f) | |
} | |
} | |
// Start playing the video when the first node is placed. | |
mediaPlayer?.apply { | |
if (!isPlaying) { | |
start() | |
// Wait to set the renderable until the first frame of the video becomes available. | |
// This prevents the renderable from briefly appearing as a black quad before the video | |
// plays. | |
texture?.surfaceTexture | |
?.setOnFrameAvailableListener { surfaceTexture -> | |
videoNode.renderable = videoRenderable | |
surfaceTexture.setOnFrameAvailableListener(null) | |
//Attach a share button | |
videoNode.attachShareButton() | |
ARApplication.log("The local rotation of this videoRenderable is ${videoNode.localRotation}") | |
} | |
} else | |
videoNode.renderable = videoRenderable | |
} | |
} | |
//Attaches a share button to any node that it is called on. | Extension method called on VideoNode | |
private fun Node.attachShareButton() { | |
//Create a new node to display the close button | |
var closeButton = Node() | |
closeButton.setParent(this) | |
ARApplication.log("The close button has been added to the scene at world coordinates: ${closeButton.worldPosition}") | |
//Set the close button as a renderable | |
closeButton.renderable = view.getViewRenderable() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment