关于TextureRender适配的解决方案

当我们用摄像机渲染出一个图片,显示在UI的时候,会发现,你如果自适配,那么就会拉伸图片,导致人物或者场景变形。
我最近就遇到了这个事,这里我给出几种问题和解决方案:

1

:当我们想要整个摄像机渲染出来的RawImage都能适配,那么可以直接用一下两个锚点进行适配
在这里插入图片描述
但是这样会出现要么高度缺了,要么宽度缺了,如图
在这里插入图片描述
在这里插入图片描述
这个时候,可以要求美术做背景高度或者宽度长一点的图,这个本就是美术应该做的事,这里也就可以解决大部分的问题了。

2

:那有人可能也会遇到,需要在这里场景里面增加3D建模,那这个时候用上面的方法,会出现一个问题,即美术给你的长图,你的摄像机照出来了,但是范围有限,你的RawImage可以设置锚点适配,但是会变形,这个时候往往策划要求的就是3D建模不要变形,并且在背景中大小适中。
这第二做法会导致背景图变形,但是模型不会变形。
设置RawImage的锚点在这里插入图片描述
用代码获取屏幕大小和RawImage
在这里插入图片描述
这个是获取的Canvas的大小
![在这里插入图片描述](https://img-blog.csdnimg.cn/6d49b21a712c43d5a8c74be9eab41cc1.png

我的初始屏幕大小是960*1920,
这里是强行吧RawImage铺满整个屏幕
然后ShowT是我的3D模型,原理就是拉伸背景,然后缩小模型大小,这样显示出来的模型就是正常的了

3

:那如果你要背景不拉伸,那就获取Canvas的大小后,你可以得到宽高,那么让你的RawImage用其中一个宽或者高,举个例子,我们现在把我们的RawImage的宽等于Canvas的宽,那么就剩下高了,高会有两种特别的情况,有一种会超出屏幕,这个是可以接受的范围(如果你不能接受,那没法, 你得去找你的美术了,等下给你讲为什么),另外一种就是比屏幕高度小,穿帮了,这是不能接受的,那我们先解决这个穿帮的,因为我们有Canvas的高度,可以直接设置RawImage的高度等于Canvas的高度,然后我们还有我们初始的屏幕宽高(例如我的是9601920)通过我们的1920/Canvas的高度,可以得到比X,用960/X,可以得到我们想要的自适配宽度,判断宽度是否,小于Canvas的宽度,不是,适配完毕,
是,那继续适配,用我们得到的宽度/Canvas的宽度,这个时候又可以得到一个比Y,这里需要差比(1-Y),然后设置RawImage的宽度等于Canvas的宽度,用Canvas的高度
(1+1-Y)可以得到需要的高度。
现在解释一下为什么超出屏幕是合理的,举例,一个图片是100100,但是我的手机是100150,如果不能接受变形,我只能把图片变成150*150,这样就必然会超出屏幕,是无法避免的。

授人以鱼不如授人以渔。虽然这次没有全部代码能抄,但是学会这个逻辑自己做,比抄代码好多了,以后也能自己用上

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NSSCTF Round#11 --- 密码个人赛 wp

文章目录ez_encMyMessageMyGameez_signinez_facez_enc 题目: ABAABBBAABABAABBABABAABBABAAAABBABABABAAABAAABBAABBBBABBABBABBABABABAABBAABBABAAABBAABBBABABABAAAABBAAABABAABABBABBBABBAAABBBAABABAABBAAAABBBAAAABAABBBAABBABABAABABAAAAABBBBABAABBBBAAAAB…

开心档之开发入门网-C++ 变量类型

C 变量类型 目录 C 变量类型 C 中的变量定义 C 中的变量声明 实例 实例 C 中的左值(Lvalues)和右值(Rvalues) 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有指定的类型,类型决定了变量存储的大小…

Java多线程:线程组

线程组 可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式,如图所示: 线程组的作用是:可以批量管理线程或线程组对象…

电脑清理怎么做?5个方法帮你解决电脑空间不足的问题!

案例:电脑清理怎么做? 【求一个电脑清理的好方法!电脑垃圾文件太多了又不敢随意删除,怕误删重要的文件!哪位友友可以帮我出出主意呀?到底应该怎么清理电脑呢?】 电脑使用的时间长了都会慢慢变…

(链表)合并两个排序的链表

文章目录前言:问题描述:解题思路:代码实现:总结:前言: 此篇是针对链表的经典练习。 问题描述: 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节…

用队列实现栈和用栈实现队列

目录用队列实现栈创建栈实现入栈实现出栈判空取栈顶元素释放用栈实现队列创建队列入队出队返回队列开头的元素判空释放前面我们实现了栈和队列,其实栈和队列之间是可以相互实现的 下面我们来看一下 用 队列实现栈 和 用栈实现队列 用队列实现栈 使用两个队列实现一…

Windows创建用户,添加到管理员组,添加到远程桌面组、RDP

原因&目的 在获得反弹shell后无法得到明文密码,无法远程桌面登录 在目标机器创建新的账号,且为管理员账号,可以远程桌面登录 cmd /c net user gesila 123 /add cmd /c net localgroup Administrators gesila /add cmd /c net localgro…

优思学院 | 质量工程师的职责有哪些?

质量工程师,是一位肩负着质量管理、质量控制和质量改进使命的职业人员。他们身负使命,不断探究、发现、改进,为企业打造出更加卓越、可靠的产品和服务。 在大多数企业中,质量工程师是一个非常重要的职位,他们的职责在…

智能立体车库plc以太网无线应用

一、项目背景 此项目为平面移动类智能停车库,是以传感器网络为支撑的物联网智能停车管理系统。比较于传统的停车场模式,智能立体车库不仅占地少,空间利用率高,智能化程度高,采用集约化系统化的车位管理、收费管理&…

Vue3 集成Element3、Vue-router、Vuex实战

第一步:使用Vite快速搭建Vue 3项目 基础操作总结: npm init vite-app 项目名称cd 项目名称npm installnpm run dev 温馨提示:如果还是Vue 2 环境请参考:Vue 2 升级Vue3 ,并且使用vsCode 搭建Vue3 开发环境 Vue 3 …

ARM uboot 启动 Linux 内核

一、编译厂商提供的 uboot 此处,我使用的是九鼎提供的 uboot : 二、烧录 uboot 到 SD 卡 进入 uboot 的 sd_fusing 目录,执行命令烧写 uboot : ./sd_fusing.sh /dev/sdb。 三、将 SD 卡插入开发板,进入 uboot 按任意…

操作系统-内存管理

一、总论 1.1 硬件术语 ​ 为了不让读者懵逼(主要是我自己也懵逼),所以特地整理一下在后面会用到术语。 ​ 我们电脑上有个东西叫做内存,他的大小比较小,像我的电脑就是 16 GB 的。它是由 ROM 和 RAM 组成的&#x…

RK3588平台开发系列讲解(同步与互斥篇)信号量介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、信号量介绍二、信号量API1、结构体2、API三、函数调用流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢上一章我们看了自旋锁的原理,本章我们一起学习下信号量的用法。 一、信号量介绍 和自旋锁一样,…

渗透测试综合实验(迂回渗透,入侵企业内网并将其控制为僵尸网络)

第1节 实验概述 1.1 实验背景概述 本实验为模拟真实企业环境搭建的漏洞靶场,通过网络入侵Web服务器,拿到控制权限后发现有内网网段,建立隧道做内网穿透,接着进一步扫描内网主机,并进行漏洞利用,最终通过域…

java登录页面验证码的生成以及展示

1、代码示例 后端返回前端一个字节数组。 2、gif图面展示 网页中一张图片可以这样显示&#xff1a; <img src“http://www.jwzzsw.com/images/log.gif”/>也可以这样显示&#xff1a; <img src“data:image/gif;base64,R0lGODlhAgACAIAAAP///wAAACwAAAAAAgACAAACAo…

聚会Party

前言 加油 原文 聚会常用会话 ❶ He spun his partner quickly. 他令他的舞伴快速旋转起来。 ❷ She danced without music. 她跳了没有伴乐的舞蹈。 ❸ The attendants of the ball are very polite. 舞会的服务员非常有礼貌。 ❶ Happy birthday to you! 祝你生日快乐!…

Linux--高级IO--poll--0326

1. poll #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); poll只负责等。 参数介绍 fds 是一个结构体类型的地址&#xff0c;相比于select中的fd_set类型,pollfd结构体可以内部封装一些遍历&#xff0c;解决需要关系那些文件描述符&#…

ES6新特性保姆级别教程【建议收藏】

文章目录1、ECMAScript 6 简介1.1、ECMAScript 和 JavaScript 的关系1.2、ES6 与 ECMAScript 2015 的关系1.3、ECMAScript 的历史2、let 和 const 命令2.1、let 命令2.1.1、基本用法2.1.2、不存在变量提升2.1.3、不允许重复声明2.1.4、暂时性死区2.2、const 命令2.2.1、基本用法…

cuda学习4-6

4. Hardware Implementation NVIDIA GPU架构是围绕一系列可扩展的多线程流式多处理器&#xff08;SM&#xff09;构建的。当主机CPU上的CUDA程序调用内核网格时&#xff0c;网格的块将被枚举并分配给具有可用执行能力的多处理器。线程块的线程在一个多处理器上并发执行&#x…

C++内存管理详解

大家好&#xff0c;这里是bang_bang&#xff0c;今天来分享下内存管理的知识。 目录 1.C/C内存分布 2.C内存管理方式 2.1new/delete操作内置类型 2.2new/delete操作自定义类型 3.operator new与operator delete函数 3.1operator new 3.2operator delete 4.new和delete的实现…