unity3D技术之WaitForEndOfFrame 等待帧结束

来源:互联网 发布:云计算相关股票有哪些 编辑:程序博客网 时间:2024/06/15 17:24

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 

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 (); 

 

}

0 0
原创粉丝点击