视口坐标转换成Canvas下本地坐标与shader显示在3D物体前

2024-03-14 18:20

本文主要是介绍视口坐标转换成Canvas下本地坐标与shader显示在3D物体前,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     shader显示在3D物体前,先转化成视口坐标

  public virtual void SetESignPos()
        {
            float x = 0;

            float y = 0;

            int v = PlayerPrefsTool.GetSpecialScreen(-1);

            if (EScreenCamera != null)
            {
                Vector3 viewPoint=EScreenCamera.WorldToViewportPoint(CurENeedShowPosition);

                Logger.Log($"SetESignPos viewPoint:{viewPoint},{viewPoint.x*Screen.width},{viewPoint.y*Screen.height}");

                x = viewPoint.x * Screen.width;

                y = viewPoint.y * Screen.height;
            }
            else
            {
                Vector2 screenPos = RectTransformUtility.WorldToScreenPoint(mE_f.canvas.worldCamera, CurENeedShowPosition);

                x = screenPos.x;

                y = screenPos.y;
            }

            if (v == -1)//正常屏幕
            {
                y = Screen.height - y;
            }

            mESignMaterial.SetVector("_LP1", new Vector4(x, y, mESignMaterialVector4.z, mESignMaterialVector4.w));
        }

视口坐标转换成Canvas下本地坐标

using UnityEngine;
using UnityEngine.UI;

public class ViewportToCanvasCoordinates : MonoBehaviour
{
    public RectTransform canvasRect;

    void Update()
    {
        // 设置一个示例的视口坐标
        Vector3 viewportPoint = new Vector3(0.5f, 0.5f, 0);

        // 获取主摄像机
        Camera mainCamera = Camera.main;

        if (mainCamera != null)
        {
            // 使用主摄像机的方法将视口坐标转换为屏幕坐标
            Vector3 screenPoint = mainCamera.ViewportToScreenPoint(viewportPoint);

            // 将屏幕坐标转换为 UI 中的 Canvas 坐标
            Vector2 localPoint;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, screenPoint, mainCamera, out localPoint);

            // 打印 UI 中的 Canvas 坐标
            Debug.Log("UI Canvas Local Point: " + localPoint);
        }
    }
}
 

这篇关于视口坐标转换成Canvas下本地坐标与shader显示在3D物体前的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

Nacos客户端本地缓存和故障转移方式

《Nacos客户端本地缓存和故障转移方式》Nacos客户端在从Server获得服务时,若出现故障,会通过ServiceInfoHolder和FailoverReactor进行故障转移,ServiceI... 目录1. ServiceInfoHolder本地缓存目录2. FailoverReactorinit

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

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

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操