U3D Scripting API GL

转载 2016年08月30日 18:10:42



class in UnityEngine


Low-level graphics library.

Use this class to manipulate active transformation matrices, issue rendering commands similar to OpenGL's immediate mode and do other low-level graphics tasks. Note that in almost all cases using Graphics.DrawMesh or CommandBuffer is more efficient than using immediate mode drawing.

GL immediate drawing functions use whatever is the "current material" set up right now (see Material.SetPass). The material controls how the rendering is done (blending, textures, etc.), so unless you explicitly set it to something before using GL draw functions, the material can happen to be anything. Also, if you call any other drawing commands from inside GL drawing code, they can set material to something else, so make sure it's under control as well.

GL drawing commands execute immediately. That means if you call them in Update(), they will be executed before the camera is rendered (and the camera will most likely clear the screen, making the GL drawing not visible).

The usual place to call GL drawing is most often in OnPostRender() from a script attached to a camera, or inside an image effect function (OnRenderImage).

using UnityEngine;

public class ExampleClass : MonoBehaviour
	// When added to an object, draws colored rays from the
	// transform position.
	public int lineCount = 100;
	public float radius = 3.0f;

	static Material lineMaterial;
	static void CreateLineMaterial ()
		if (!lineMaterial)
			// Unity has a built-in shader that is useful for drawing
			// simple colored things.
			Shader shader = Shader.Find ("Hidden/Internal-Colored");
			lineMaterial = new Material (shader);
			lineMaterial.hideFlags = HideFlags.HideAndDontSave;
			// Turn on alpha blending
			lineMaterial.SetInt ("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
			lineMaterial.SetInt ("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
			// Turn backface culling off
			lineMaterial.SetInt ("_Cull", (int)UnityEngine.Rendering.CullMode.Off);
			// Turn off depth writes
			lineMaterial.SetInt ("_ZWrite", 0);

	// Will be called after all regular rendering is done
	public void OnRenderObject ()
		CreateLineMaterial ();
		// Apply the line material
		lineMaterial.SetPass (0);

		GL.PushMatrix ();
		// Set transformation matrix for drawing to
		// match our transform
		GL.MultMatrix (transform.localToWorldMatrix);

		// Draw lines
		GL.Begin (GL.LINES);
		for (int i = 0; i < lineCount; ++i)
			float a = i / (float)lineCount;
			float angle = a * Mathf.PI * 2;
			// Vertex colors change from red to green
			GL.Color (new Color (a, 1-a, 0, 0.8F));
			// One vertex at transform position
			GL.Vertex3 (0, 0, 0);
			// Another vertex at edge of circle
			GL.Vertex3 (Mathf.Cos (angle) * radius, Mathf.Sin (angle) * radius, 0);
		GL.End ();
		GL.PopMatrix ();

Note: This class is almost always used when you need to draw a couple of lines or triangles, and don't want to deal with meshes. If you want to avoid surprises the usage pattern is this:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnPostRender() {
        // Set your materials
        // yourMaterial.SetPass( );
        // Draw your stuff

Where at the "// Draw your stuff" you should do SetPass() on some material previously declared, which will be used for drawing. If you dont call SetPass, then you'll get basically a random material (whatever was used before) which is not good. So do it.

Static Variables

invertCulling Select whether to invert the backface culling (true) or not (false).
LINES Mode for Begin: draw lines.
modelview The current modelview matrix.
QUADS Mode for Begin: draw quads.
sRGBWrite Controls whether Linear-to-sRGB color conversion is performed while rendering.
TRIANGLE_STRIP Mode for Begin: draw triangle strip.
TRIANGLES Mode for Begin: draw triangles.
wireframe Should rendering be done in wireframe?

Static Functions

Begin Begin drawing 3D primitives.
Clear Clear the current render buffer.
ClearWithSkybox Clear the current render buffer with camera's skybox.
Color Sets current vertex color.
End End drawing 3D primitives.
Flush Sends queued-up commands in the driver's command buffer to the GPU.
GetGPUProjectionMatrix Compute GPU projection matrix from camera's projection matrix.
InvalidateState Invalidate the internally cached render state.
LoadIdentity Load the identity matrix to the current modelview matrix.
LoadOrtho Helper function to set up an ortho perspective transform.
LoadPixelMatrix Setup a matrix for pixel-correct rendering.
LoadProjectionMatrix Load an arbitrary matrix to the current projection matrix.
MultiTexCoord Sets current texture coordinate (v.x,v.y,v.z) to the actual texture unit.
MultiTexCoord2 Sets current texture coordinate (x,y) for the actual texture unit.
MultiTexCoord3 Sets current texture coordinate (x,y,z) to the actual texture unit.
MultMatrix Multiplies the current modelview matrix with the one specified.
PopMatrix Restores both projection and modelview matrices off the top of the matrix stack.
PushMatrix Saves both projection and modelview matrices to the matrix stack.
RenderTargetBarrier Resolves the render target for subsequent operations sampling from it.
TexCoord Sets current texture coordinate (v.x,v.y,v.z) for all texture units.
TexCoord2 Sets current texture coordinate (x,y) for all texture units.
TexCoord3 Sets current texture coordinate (x,y,z) for all texture units.
Vertex Submit a vertex.
Vertex3 Submit a vertex.
Viewport Set the rendering viewport.

u3d Mastering Scripting ,Blueprints

  • 2015年04月28日 17:43
  • 16.3MB
  • 下载

U3D C# 中文语音识别功能 之 Hololens篇----百度语音识别REST API

在U3D 开发适用于 Hololens 的 UWP 平台的 语音识别功能。 U3D 的UWP 不支持比如`FileStream`,` Directory`,` File类取读写文件。 U3D Hol...
  • KiTok
  • KiTok
  • 2017年06月19日 18:17
  • 1838

Unity3D游戏开发之动画脚本 Animation Scripting

动画脚本 Animation Scripting   有时你需要程序化的驱动你的角色骨骼. 例如你可能需要你的角色的头注视3d空间的某个点. 这个活最好让脚本来干. 幸运的是, Unity做这个很...

Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)

也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让玩家操控的角色动起来栩栩如生,那么这真是一篇好文章(当然我仅仅是翻译了一下) 动画脚本 ...
  • cl110cl
  • cl110cl
  • 2014年03月13日 18:59
  • 1251

Unity3d动画脚本 Animation Scripting

【狗刨学习网】 也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让玩家操控的角色动起来栩栩如生. 动画脚本 Animation Scripting...

Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)

也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让玩家操控的角色动起来栩栩如生,那么这真是一篇好文章(当然我仅仅是翻译了一下) ...
  • cl110cl
  • cl110cl
  • 2014年07月14日 17:57
  • 857

Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)

Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理) (2011-03-23 13:12:16) 转载▼ 标签:  uni...

Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理--旧的动画系统)

(来自:http://blog.sina.com.cn/s/blog_409cc4b00100qmgz.html) 也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何...

Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)

也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让玩家操控的角色动起来栩栩如生,那么这真是一篇好文章(当然我仅仅是翻译了一下) 动画脚本 ...
  • yghju
  • yghju
  • 2015年06月15日 14:34
  • 224

Open GL学习 (二) 3D模型的使用

上篇说的是OpenGL在 2D中的使用,现在我们进入3D模式。 (本页文章,参考了http://blog.csdn.net/wangyuchun_799/article/details/78...
  • smking
  • smking
  • 2012年11月07日 18:27
  • 3326
您举报文章:U3D Scripting API GL