首页 > 编程语言 >ugui源码阅读 - Graphic渲染原理

ugui源码阅读 - Graphic渲染原理

时间:2023-07-26 23:56:21浏览次数:39  
标签:Graphic canvasRenderer vh 渲染 源码 var new ugui vertColor

3d部分使用MeshRenderer来渲染,ugui的使用CanvasRenderer来进行渲染。把顶点,材质,贴图设置给CanvasRenderer,就能渲染出来了。

 

下面的代码,我们直接使用CanvasRenderer来进行渲染,等同于Graphic渲染部分的核心代码。

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(CanvasRenderer))]
public class TestCanvasRenderer : MonoBehaviour
{
    [SerializeField]
    public Texture m_Texture;
    private VertexHelper m_VertexHelper;

    void Start()
    {
        UpdateRenderer();
    }

    void UpdateRenderer()
    {
        var canvasRenderer = GetComponent<CanvasRenderer>();
        canvasRenderer.Clear();

        var vh = new VertexHelper();

        //设置顶点
        var mesh = new Mesh();
        PopulateMesh(vh);
        vh.FillMesh(mesh);
        canvasRenderer.SetMesh(mesh);

        //设置材质和贴图
        canvasRenderer.materialCount = 1;
        var myMat = Canvas.GetDefaultCanvasMaterial();
        canvasRenderer.SetMaterial(myMat, 0);

        var myTexture = (null == m_Texture) ? Texture2D.whiteTexture : m_Texture;
        canvasRenderer.SetTexture(myTexture);
    }

    void PopulateMesh(VertexHelper vh)
    {
        Color32 vertColor = Color.white;

        float width = 150;
        float height = 100;
        //这边添加一个四边形
        vh.AddVert(new Vector3(0, 0), vertColor, new Vector2(0f, 0f)); //左下
        vh.AddVert(new Vector3(0, height), vertColor, new Vector2(0f, 1f)); //左上
        vh.AddVert(new Vector3(width, height), vertColor, new Vector2(1f, 1f)); //右上
        vh.AddVert(new Vector3(width, 0), vertColor, new Vector2(1f, 0f)); //右下

        //顺时针
        vh.AddTriangle(0, 1, 2);
        vh.AddTriangle(2, 3, 0);
    }

#if UNITY_EDITOR
    protected void OnValidate()
    {
        UpdateRenderer();
    }

#endif

}

 

图片偏右上角,主要是因为顶点(0, 0)是相对RectTransform的pivot的,此时pivot在(0.5, 0.5)中心位置,所以图片的左下角是在中心位置的。

 

标签:Graphic,canvasRenderer,vh,渲染,源码,var,new,ugui,vertColor
From: https://www.cnblogs.com/sailJs/p/17583020.html

相关文章

  • kernel源码(二十三)Bochs运行linux0.11
    1下载Bochshttps://sourceforge.net/projects/bochs/我下载的版本为Bochs-win64-2.7.exe,双击即可安装2运行linux0.112.1不使用配置文件http://oldlinux.org/Linux.old/images/下载如下两个镜像bootimage-0.11-20040305操作系统引导镜像,包含了操作系统启动引导程序和......
  • 视频直播系统源码,vue自定义模拟滚动条
    视频直播系统源码,vue自定义模拟滚动条vscroll自定义滚动条模板 <template> <divclass="vui__scrollbar"ref="ref__box"@mouseenter="handleMouseEnter"@mouseleave="handleMouseLeave"v-resize="handleResize">  <div:......
  • 仿奈雪の茶小程序,奶茶小程序模板源码(附全套源码下载链接)
    分享一个仿奈雪の茶小程序,奶茶小程序模板源码(兼容H5版本全网首发)完美复刻奈雪の茶小程序,可稍加修改使用。代码结构如下本项目包含:首页点餐(自取和外卖两种方式,有基本的点餐逻辑处理)取餐我的积分商城积分商城详情页积分签到会员码我的卡券收货地址我的资料我的订......
  • EaselJS 源码分析系列--第四篇
    鼠标交互事件前几篇关注的是如何渲染,那么鼠标交互如何实现呢?Canvascontext本身没有像浏览器DOM一样的交互事件EaselJS如何在canvas内实现自己的鼠标事件系统?原理大致如下:Stage类内的canvas监听标准DOM鼠标事件(比如:mousedown),window或document对象下监听......
  • 基于 Android 的旅游电商应用系统设计与实现-计算机毕业设计源码+LW文档
    开题申请(包括选题目的意义、研究现状、成果提纲、文献综述、创新思路、参考文献,篇幅不够可另加页)1.开题依据1.1研究的目的意义伴随着智能终端的高速发展,移动互联网与传统旅游业开始了加速融合,如今的旅游业已经得到了蓬勃发展。用户只需要一台移动终端,就能够随时随地的掌握各类旅......
  • 基于微信小程序的校园设备报修平台的设计与实现-计算机毕业设计源码+LW文档
    【摘要】随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具。在高校,各种管理系统层出不穷,为校园设备报修管理开发必要的系统,能够有效的提升管理效率。一直以来,校园设备报修一直没有进行系统化的管理,学生无法快速进行报修,由此提出开发基......
  • 基于Android的眼镜商场app-计算机毕业设计源码+LW文档
    前端用户功能:(1)app首页:显示app所有商品的相关信息,供用户搜索、浏览查看,包括商品展示、商品类别及搜索等信息的展示。(2)注册登录:实现用户注册,登录系统实现,注册成功之后默认为登录状态。(3)商品展示:商家可以制作漂亮的眼镜产品图片,并在商场展示。用户可以通过查看图片细节来......
  • 详解!视频直播源码平台搭建开发:录制功能
     在互联网快速发展的现代社会,直播成为了新型的社交媒体形式与营销形式,普通用户会在视频直播源码平台中发布短视频、图文或是开直播等进行社交;商户则会发布视频广告或直播带货等进行营销。而在这些社交与营销的新形式下,大多数人还会发布直播的某些有趣或意义的片段到短视频上,进行......
  • PG-DBA培训07:PostgreSQL体系结构深入与源码解析 原创
    PostgreSQL体系结构深入解析,PostgreSQL数据库源码解析,initdb源码解析PostgreSQL数据库体系架构PostgreSQL数据库存储结构PostgreSQL数据库进程结构PostgreSQL数据库内存结构PostgreSQL数据库源码解析使用gdb跟踪分析PostgreSQL源码PostgreSQL源码解析之initdb初始化过程Postgre......
  • Unity UGUI的EventSystem(事件系统)组件的介绍及使用
    UnityUGUI的EventSystem(事件系统)组件的介绍及使用1.什么是EventSystem组件?EventSystem是UnityUGUI中的一个重要组件,用于处理用户输入事件,如点击、拖拽、滚动等。它负责将用户输入事件传递给合适的UI元素,并触发相应的事件回调函数。2.EventSystem组件的工作原理EventSystem......