您的位置:首页 > 移动开发 > Unity3D

unity3D技术之WaitForEndOfFrame 等待帧结束

2015-04-30 16:45 537 查看
Inherits from
YieldInstruction

Waits until the end of the frame after all cameras and GUI is rendered,
just before displaying the frame on screen.
等待直到所有的摄像机和
GUI
被渲染完成后,在该帧显示在屏幕之前。

You can use it to read the display into a texture, encode it as an image
file (see
Texture2D.ReadPixels
and
Texture2D.EncodeToPNG
) and send it
somewhere.
你可以使用它读取显示到纹理


狗刨学习网
】,编码它为一个图片文件(参见
Texture2D.ReadPixels
和)并且发送到任意地方。



C#



JavaScript

yield new WaitForEndOfFrame ();
// Saves screenshot as PNG file.
//
保持屏幕为
PNG
文件

import System.IO;

// Take a shot immediately
//
立即截屏

function Start() {

UploadPNG();
}

function UploadPNG() {

// We should only read the screen bufferafter rendering is
complete

//
等待完成后读取屏幕缓存

yield WaitForEndOfFrame();

// Create a texture the size of the screen, RGB24 format

//
创建一个屏幕大小的图片,
RGB24
格式

var width = Screen.width;

var height = Screen.height;

var tex = new Texture2D( width, height, TextureFormat.RGB24,
false );

// Read screen contents into the texture

//
到图片读取屏幕内容

tex.ReadPixels( Rect(0, 0, width, height), 0, 0 );

tex.Apply();

// Encode texture into PNG

//
编码图片为
PNG
格式

var bytes = tex.EncodeToPNG();

Destroy( tex );

//
For
testing
purposes,
also
write
to
a
file
in
the
project
folder

//
出于测试目的,也在工程文件夹保存一个文件

// File.WriteAllBytes(Application.dataPath +
"/../SavedScreen.png", bytes);

// Create a Web Form

//
创建一个
Web
表单

var form = new WWWForm();

form.AddField("frameCount", Time.frameCount.ToString());

form.AddBinaryData("fileUpload",bytes);

// Upload to a cgi script

//
上传到一个
cgi
脚本

var w = WWW("http://localhost/cgi-bin/env.cgi?post", form);

yield w;

if (w.error != null)

print(w.error);

else

print("Finished Uploading Screenshot");
}

// Shows alpha channel contents in the game view.
// Requires Unity Pro as this script uses GL class.
//
在游戏视图中显示
alpha
通道的内容,需要
Unity
Pro
专业版,这个脚本使用

GL
类。

private var mat : Material;

// After the frame is completely rendered, we'll
// draw a full screen quad that extracts the alpha channel.
//
在该帧完全渲染之后,我们将绘制一个提取了
alpha
通道的全屏矩形

function Start() {

while (true) {

yield WaitForEndOfFrame();

if( !mat ) {

mat = new Material( "Shader \"Hidden/Alpha\" {"
+

"SubShader {" +

" Pass {" +

" ZTest Always Cull Off ZWrite Off" +

" Blend DstAlpha Zero" +

" Color (1,1,1,1)" +

" }" +

"}" +

"}"

);

}

GL.PushMatrix ();

GL.LoadOrtho ();

for (var i = 0; i < mat.passCount; ++i) {

mat.SetPass (i);

GL.Begin( GL.QUADS );

GL.Vertex3( 0, 0, 0.1 );

GL.Vertex3( 1, 0, 0.1 );

GL.Vertex3( 1, 1, 0.1 );

GL.Vertex3( 0, 1, 0.1 );

GL.End();

}

GL.PopMatrix ();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐