[스크립트] Unity3d에서 GL로 선을 그리는 방법
var e : Event;
private var cur : int = 0;
private var orgPos;
private var endPos;
static var lineMaterial : Material;
var cube1 : Transform;
var cube2 : Transform;
private var canDrawLines : boolean = false;
class joint
{
var org : Vector3;
var end : Vector3;
}
private var posAL : ArrayList;
static function CreateLineMaterial() {
if( !lineMaterial ) {
lineMaterial = new Material( "Shader \"Lines/Colored Blended\" {" +
"SubShader { Pass { " +
" Blend SrcAlpha OneMinusSrcAlpha " +
" ZWrite Off Cull Off Fog { Mode Off } " +
" BindChannels {" +
" Bind \"vertex\", vertex Bind \"color\", color }" +
"} } }" );
lineMaterial.hideFlags = HideFlags.HideAndDontSave;
lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;
}
}
function OnGUI()
{
e = Event.current;
if(GUI.Button(Rect(0,0,100,50),"Begin Lines"))
{
canDrawLines = true;
}
if(GUI.Button(Rect(150,0,100,50),"End Lines"))
{
ClearLines();
}
}
function Start()
{
//GLDrawLine(Vector3.zero,Vector3.zero);
//OnPostRender();
posAL=new ArrayList();
}
function GLDrawLine(beg : Vector3,end : Vector3)
{
//print("GLDrawLine???");
if(!canDrawLines)
return;
GL.PushMatrix ();
GL.LoadOrtho ();
beg.x=beg.x/Screen.width;
end.x=end.x/Screen.width;
beg.y=beg.y/Screen.height;
end.y=end.y/Screen.height;
var tmpJoint : joint = new joint();
tmpJoint.org=beg;
tmpJoint.end=end;
posAL.Add(tmpJoint);
CreateLineMaterial();
lineMaterial.SetPass( 0 );
GL.Begin( GL.LINES );
GL.Color( Color(1,1,1,0.5) );
for(var i : int = 0;i<posAL.Count;i++)
{
var tj : joint=posAL;
var tmpBeg : Vector3 = tj.org;
var tmpEnd : Vector3=tj.end;
GL.Vertex3( tmpBeg.x,tmpBeg.y,tmpBeg.z );
GL.Vertex3( tmpEnd.x,tmpEnd.y,tmpEnd.z );
}
//GL.Vertex3( 0,0,0);
//GL.Vertex3( 0.5,0.5,0);
GL.End();
//print("beg is:"+beg+"end is:"+end);
GL.PopMatrix ();
Debug.DrawLine(beg,end);
}
function OnPostRender() {
GLDrawLine(orgPos,endPos);
}
function ClearLines()
{
canDrawLines = false;
posAL.Clear();
}
function Update () {
if(e && canDrawLines)
{
if(e.type == EventType.MouseDown)
{
orgPos=Input.mousePosition;
endPos=Input.mousePosition;
}
if(e.type==EventType.MouseDrag)
{
endPos=Input.mousePosition;
GLDrawLine(orgPos,endPos);
orgPos=Input.mousePosition;
}
if(e.type==EventType.MouseUp)
{
//orgPos=Input.mousePosition;
endPos=Input.mousePosition;
}
}
//GLDrawLine(Vector3.zero,Vector3.zero);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vector & Matrix스칼라 : 하나의 숫자로만 이루어진 데이터 (크기만 있고 방향이 없는 물리량) 벡터 : 여러 숫자로 이루어진 데이터 레코드. 매트릭스 : 벡터가 여럿인 데이터집합 벡터의 크기는 스칼라배를 통해 표현할 수 있다. *내...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.