URP基于GL的Unity物体网格线绘制方法参考

news2024/11/14 15:12:07

直接上代码:

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;

public class GLWireMesh : MonoBehaviour
{
	[Serializable]
	public class IntPair
	{
		public int a;
		public int b;

		public IntPair(int a, int b)
		{
			this.a = a;
			this.b = b;
		}

		public bool Same(IntPair intPair)
		{
			if (intPair.a == a && intPair.b == b) return true;
			if (intPair.a == b && intPair.b == a) return true;
			return false;
		}

		public override string ToString()
		{
			return "(" + a + "," + b + ")";
		}
	}

	[SerializeField]
	Material matWire;

	Mesh _mesh;
	Mesh mesh
	{
		get
		{
			if (!_mesh)
			{
				MeshFilter filter = GetComponent<MeshFilter>();
				if (!filter) return null;
				_mesh = filter.mesh;
			}
			return _mesh;
		}
	}

	Vector3[] verts;
	IntPair[] intPairs;
	void Start()
	{
		if (!mesh) return;

		if (mesh)
		{
			verts = mesh.vertices;

			int[] triangles = mesh.triangles;
			if (triangles != null && triangles.Length > 0)
			{
				List<IntPair> intPairList = new List<IntPair>();
				for (int i = 0; i < triangles.Length; i += 3)
				{
					intPairList.Add(new IntPair(triangles[i], triangles[i + 1]));
					intPairList.Add(new IntPair(triangles[i], triangles[i + 2]));
					intPairList.Add(new IntPair(triangles[i + 1], triangles[i + 2]));
				}

				List<IntPair> intPairWithoutRepetition = new List<IntPair>();
				intPairWithoutRepetition.Add(intPairList[0]);

				for (int i = 1; i < intPairList.Count - 1; i++)
				{
					bool hasIP = false;
					foreach (IntPair ip in intPairWithoutRepetition)
					{
						if (intPairList[i].Same(ip))
						{
							hasIP = true;
							break;
						}
					}

					if (!hasIP)
					{
						intPairWithoutRepetition.Add(intPairList[i]);
					}
				}

				intPairs = intPairWithoutRepetition.ToArray();
			}
		}
	}
	void OnEnable()
	{
		if (!mesh) return;
		RenderPipelineManager.endCameraRendering += EndCameraRendering;
	}

	void OnDisable()
	{
		if (!mesh) return;
		RenderPipelineManager.endCameraRendering -= EndCameraRendering;
	}

	void EndCameraRendering(ScriptableRenderContext context, Camera camera)
	{
		if (verts == null) return;
		if (verts.Length <= 0) return;
		if (intPairs == null) return;
		if (intPairs.Length <= 0) return;

		matWire.SetPass(0);
		GL.MultMatrix(transform.localToWorldMatrix);
		GL.Begin(GL.LINES);
		for (int i = 0; i < intPairs.Length; i++)
		{
			GL.Vertex(verts[intPairs[i].a]);
			GL.Vertex(verts[intPairs[i].b]);
		}
		GL.End();
	}
}

Shader参考:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jenkins自定义邮件发送人姓名

jenkins发送邮件的时候发送人姓名默认的&#xff0c;如果要自定义发件人姓名&#xff0c;只需要修改如下信息即可&#xff1a; 系统管理-system-Jenkins Location下的系统管理员邮件地址 格式为&#xff1a;自定义姓名<邮件地址>

洞悉安全现状,建设网络安全防护新体系

一、“网络攻防演练行动“介绍 国家在2016年发布《网络安全法》&#xff0c;出台网络安全攻防演练相关规定&#xff1a;关键信息基础设施的运营者应“制定网络安全事件应急预案&#xff0c;并定期进行演练”。同年“实战化网络攻防演练行动”成为惯例。由公安部牵头&#xff0…

【2023年11月第四版教材】《第1章-信息化发展之<1信息与信息化>》

第01章-信息化发展 1 信息与信息化 大部分为新增内容&#xff0c;预计选择题考4分&#xff0c;案例和论文不考。本章与第三版相同内容将斜体表示。 1 信息与信息化 1、信息是物质、能量及其属性的标示的集合&#xff0c;是确定性的增加。 2、控制论的创始人维纳认为:信息就是信…

easyui主表子表维护页面

easyui主表子表维护页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title><!-- <#include "common.html"/> --><link rel"stylesheet" type&quo…

win10浏览器无法选择双面打印解决方案

win10浏览器无法选择双面打印解决方案 应用场景&#xff1a;当我打开wps设置双面打印某个pdf文件时&#xff0c;屏幕提示我要手动翻页进行双面打印&#xff1f;&#xff01;&#xff01;&#xff01;什么情况。那就使用浏览器打开pdf文件进行打印吧&#xff0c;但是竟然没有双…

兼容性在APP开发中的重要性:一个不可忽视的因素

APP开发过程中&#xff0c;有许多因素需要考虑。其中一个是兼容性。如果 APP无法运行&#xff0c;用户将无法使用它&#xff0c;或者他们无法完成自己的工作。这对用户和公司来说都是非常令人沮丧的。 许多 APP开发公司都有能力解决兼容性问题。然而&#xff0c;一些公司甚至没…

SAP abap sql 语句执行无结果

有些情况下&#xff0c;我们的sql语句执行之后&#xff0c;却没有得到结果&#xff0c;可能是因为条件不对 原因是SAP 中se16n看见的值可能经过转换&#xff0c;例如下面的SQL&#xff0c;就会执行失败&#xff0c;因为SH 实际上是WE转换过来的&#xff0c;这时候我们需要点开详…

C++继承特性(4)——友元与静态

目录 一.继承与友元的关系 二.继承与静态成员的关系 先回顾一下静态成员变量&#xff1a; 运行TestPerson()函数&#xff1a; 测试案例2&#xff1a; 三.练习题&#xff1a; 一.继承与友元的关系 友元关系不能被继承&#xff0c;也就是说父类中的友元函数不能访问子类私…

IT职场笔记

MySQL笔记之一致性视图与MVCC实现 一致性读视图是InnoDB在实现MVCC用到的虚拟结构&#xff0c;用于读提交&#xff08;RC&#xff09;和可重复度&#xff08;RR&#xff09;隔离级别的实现。 一致性视图没有物理结构&#xff0c;主要是在事务执行期间用来定义该事物可以看到什…

Python爬虫+数据可视化:分析唯品会泳衣数据详情

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 唯品会是中国领先的在线特卖会电商平台之一&#xff0c;它以“品牌特卖会”的模式运营&#xff0c;为会员提供品牌折扣商品。 唯品会的商品包括服装、鞋类、箱包、美妆、家居、母婴、食品等各类品牌产品。 这就是今天…

RFID在半导体行业的应用解决方案

半导体行业近几年来受到疫情因素和政治因素的影响&#xff0c;导致国内芯片的短缺问题十分严重&#xff0c;在国家大力发展制造企业的趋势下&#xff0c;不少企业也加大了芯片制造工厂的投入。RFID作为一种可非接触识别的技术&#xff0c;是如何应用在半导体行业中的?下面我们…

JsonPath使用和示例

JsonPath使用和示例 1 简介2 官方实例3 JsonPath与XPath语法对比4 实例说明JsonPath与XPath语法5 Python中JsonPath模块6 Python中JsonPath使用7 结合接口测试的实例 1 简介 官网&#xff1a;https://goessner.net/articles/JsonPath/&#xff1b;JsonPath 是一种简单的方法来…

做了5年软件测试决定离职,跳槽历经40场面试, 面的基本都是大厂

前言 沉寂了好一段日子&#xff0c;连我们公司自己人都问我为什么最近都不写文章了。 那么当看到本篇的标题的时候&#xff0c;大家应该可以猜到这是为什么了。 我最终还是决定要离开服务了 5 年多的公司。 而这次跳槽历经 3 个月&#xff0c;前后聊了 10 家公司&#xff0c;进…

问题:idea启动项目错误提示【command line is too long. shorten command line】

问题&#xff1a;idea启动项目错误提示【command line is too long. shorten command line】 参考博客 问题描述 启动参数过长&#xff0c;启动项目&#xff0c;错误提示 原因分析 出现此问题的直接原因是&#xff1a;IDEA集成开发环境运行你的“源码”的时候&#xff08…

Spring学习笔记之入门程序

文章目录 关于下载介绍jar包第一个入门程序关于入门程序的小细节启用Log4j2 关于下载 这是一个悲惨而又戏剧性的故事 其实是不用下的&#xff0c;spring的jar包是归meaven管的&#xff0c;不用特地的去spring官网再去什么github上下载&#xff0c;再去看什么乱七八糟的目录&a…

IDEA的基础使用——【初识IDEA】

IDEA的基础使用——【初识IDEA】 文章目录 IDEA简介前言官网 IDEA的下载与安装选择下载路径勾选自己需要的其余按默认选项进行即可 目录简介安装目录简介 运行Hello WorldIDEA快捷键常用模板模板一&#xff1a;psvm&#xff08;main&#xff09;模板二&#xff1a;模板三&#…

adb常用命令使用

1.查看当前运行的包名和Activity adb shell dumpsys window | findstr mCurrentFocus 2.卸载app adb uninstall io.appium.settings adb uninstall io.appium.unlock adb uninstall io.appium.android.ime

Ubutun安装中文语言和搜狗输入法

Unbuntu版本是18.04的。要安装中文语言和搜狗输入法。 参考官方说明 Install languages 安装网址&#xff1a;搜狗输入linux安装网址 安装搜狗输入法&#xff1a;看搜狗输入法的指南是最权威的&#xff1a; 搜狗输入法安装指南linux 拖拽语言&#xff08;最开始中文是在下面的…

软件外包开发的后台开发语言

在软件外包开发中&#xff0c;后台语言的选择通常取决于项目需求、客户偏好、团队技能和开发效率。今天和大家分享一些常用的后台语言及选择它们的原因&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。…

软件测试质量度量之 “三级指标体系”

管理学大师彼得 - 德鲁克曾说过&#xff1a;无数据不管理。 数字是人们快速认知事物的一种有效方式。无论在生活还是工作&#xff0c;对事还是对人都息息相关。碰上难以的用数字描述事物或现象肯定是没有找对适用的指标和度量方式。尤其对于质量工程方面的工作&#xff0c;定量…