unity GL画线

2024-06-01 15:38
文章标签 unity 画线 gl

本文主要是介绍unity GL画线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对某篇文章加以修改。把这个脚本挂到相机下,才能显示。


using UnityEngine;  

using System.Collections;  

public class joint{  
public Vector3 org;  
public Vector3 end;  
}  
public class Drawline : MonoBehaviour {  


private Vector3 orgPos;    
private Vector3 endPos;    
private bool canDrawLines  = false;    
ArrayList posAL;  
ArrayList temppos;  
public Material lineMaterial;  

void Start()  
{  
temppos=new ArrayList();  
posAL=new  ArrayList();  
}  


void Update()  
{  
if (Input.GetMouseButtonDown(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began))
{
Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)
{
orgPos=Input.mousePosition;    
endPos=Input.mousePosition;
}
}
else if (Input.GetMouseButton(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Moved))
{
Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)
{
canDrawLines = true;
endPos=Input.mousePosition;
temppos.Add(Input.mousePosition);  
GLDrawLine(orgPos,endPos);    
orgPos=Input.mousePosition;
}
}
else if(Input.GetMouseButtonUp(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Ended))
{
Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)
{
endPos=Input.mousePosition;
}
}
}


void GLDrawLine(Vector3 beg ,Vector3 end )    
{  
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;    
joint tmpJoint = new joint();    
tmpJoint.org=beg;    
tmpJoint.end=end;    

posAL.Add(tmpJoint);    
lineMaterial.SetPass( 0 );  
GL.Begin( GL.LINES );    
GL.Color( new Color(1,1,1,0.5f) );    


for(int i= 0;i<posAL.Count;i++)    
{    
joint tj  =(joint)posAL[i];    
Vector3 tmpBeg  = tj.org;    
Vector3 tmpEnd=tj.end;    
GL.Vertex3( tmpBeg.x,tmpBeg.y,tmpBeg.z );    
GL.Vertex3( tmpEnd.x,tmpEnd.y,tmpEnd.z );
}    
GL.End();    
GL.PopMatrix ();    
}    
 
public void ClearLines()    
{    
canDrawLines = false;
if(posAL != null)
posAL.Clear();    
}  

void OnPostRender() {    
GLDrawLine(orgPos,endPos);    
}     
}  

这篇关于unity GL画线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021412

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

glShadeModel函数 GL_SMOOTH与GL_FLAT的区别

glShadeModel函数用于控制opengl中绘制指定两点间其他点颜色的过渡模式 参数一般为GL_SMOOTH(默认),GL_FLAT opengl默认是将制定的两点颜色进行插值,绘制之间的其他点 如果两点的颜色相同,使用两个参数效果相同 如果两点颜色不同,GL_SMOOTH会出现过渡效果,GL_FLAT 则只是以指定的某一点的单一色绘制其他所有点 如图可以对比GL_SM

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

Unity Adressables 使用说明(六)加载(Load) Addressable Assets

【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给资源的地址的字符串。Label:包含分配给一个或多个资源的标签的字符串。AssetReference Obj

在Unity环境中使用UTF-8编码

为什么要讨论这个问题         为了避免乱码和更好的跨平台         我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本,默认是看不到在VS中的编码格式,下面我介绍一种简单快

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)-CSDN博客 做完了数据结构类,该做一个存储类了,也就是生成一个字典类(只是声明)  实现和上一节的数据结构类的方式大同小异,所