关于这篇文章的命名,实在不知道怎么命名好,大概功能就是:比如一张宽高为100x100的图片显示在屏幕上,那2D摄像头的Size值为多少时,屏幕上显示出来图片大小和图片的实际像素一致。

这里涉及到一个GL坐标和像素坐标值的转换比,这个比值我们可以自己设置~之后我们设置面上顶点的大小也是依据这个来设置的。

比如上面的图的坐标系是世界坐标,而摄像机的坐标在原点(0,0,0),而且摄像机的Size属性为1那么我们在Size为1,而且屏幕的宽高比为3:2的情况下,摄像机所能看到的范围就如上图中橙色框框那样,也就是所能看到的高度y的世界坐标范围是-1到1,宽度x的世界坐标范围是-1.5到1.5 。那么我们就可以算出世界坐标和像素坐标的比值了。如果我们的屏幕宽高是480x320 (也是3:2的屏幕),那么如果显示在这个屏幕下,上图中,AB两点的高度是320,那么世界坐标高度就和屏幕的高度有个比值,即 2:320 再举个例子,假如有张宽高为100x100的图片,要显示在屏幕上,那它相对的世界坐标是的宽高又是多少呢?根据上面的比值可以算出来:
100 * 2 / 320 = 0.625;
        有这个比值,我们在用顶点生成面的时候就用图片的实际像素宽高乘以这个比值就能得到世界坐标的值鸟~

再写个程序简单的显示一张128x128的贴图在2D摄像头的size为1的境况测试下吧

using UnityEngine;
using System.Collections;public class SimpleSprite : MonoBehaviour {//标准摄像头的高度//public float standardCameraSize;//标准屏幕的高度//public float standardHeight;private float glTopixelRatio;//素材求//public Material spriteMaterial;//顶点数//private int verticesCount = 4;// Use this for initializationvoid Start () {//计算像素和世界单位的比值//glTopixelRatio = standardCameraSize * 2.0f / standardHeight;initSprite();}// Update is called once per framevoid Update () {}//根据宽高生成对应的面//private void initSprite(){//获取图片的像素宽高//int pixelHeight = spriteMaterial.mainTexture.height;int pixelWidth = spriteMaterial.mainTexture.width;Debug.Log("pixeW:" + pixelWidth + ",pixeH:" + pixelHeight);//得到MeshFilter对象//MeshFilter meshFilter = gameObject.GetComponent<MeshFilter>();if(meshFilter == null){//为null时,自动添加//meshFilter = gameObject.AddComponent<MeshFilter>();MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();meshRenderer.sharedMaterial = spriteMaterial;}//得到对应的网格对象//Mesh mesh = meshFilter.mesh;//三角形顶点的坐标数组//Vector3[] vertices = new Vector3[verticesCount];//得到三角形的数量//int trianglesCount = verticesCount - 2;//三角形顶点数组//int[] triangles   = new int[verticesCount *3];float glWidth = pixelWidth * glTopixelRatio;float glHeight = pixelHeight * glTopixelRatio;//以当前对象的中心坐标为标准//vertices[0] = new Vector3(0, 0, 0);vertices[1] = new Vector3(0, glHeight, 0);vertices[2] = new Vector3(glWidth, 0, 0);vertices[3] = new Vector3(glWidth, glHeight, 0);mesh.vertices = vertices;//绑定顶点顺序//triangles[0] = 0;triangles[1] = 1;triangles[2] = 2;triangles[3] = 1;triangles[4] = 3;triangles[5] = 2;      mesh.triangles = triangles;mesh.uv = new Vector2[]{new Vector2(0,0), new Vector2(0,1), new Vector2(1,0), new Vector2(1,1)};}  }

  上面是个简单显示一张图片的代码~

下面是测试结果,用ps加张图片(红色圈圈)比比看显示出来的图片宽高是不是和实际像素一样,结果大小是一样的~

尊重他人的劳动成功,原文地址:http://blog.csdn.net/midashao/article/details/8232341

转载于:https://www.cnblogs.com/tonge/p/3607793.html

Unity3D之如何创建正确的像素比在屏幕上相关推荐

  1. #翻译#将像素绘制到屏幕上

    2019独角兽企业重金招聘Python工程师标准>>> 一个像素是怎么映射到屏幕上去的?有许多种方式将一些事物映射到显示屏,他们需要不同的框架和许多功能和方法的结合体.这里我们走马观 ...

  2. 将一个像素绘制到屏幕上

    一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架.许多功能和方法的结合体.这里我们大概的看一下屏幕之后发生的事情.当你想要弄清楚什么时候.怎么去查明并解决问 ...

  3. iOS-将像素绘制到屏幕上

    今天把WordPress搭建好了,想用Django搭建的,还是没能实现,把之前翻译的一篇文章拿出来校对了一下,欢迎评阅. ##########我是正文########## 一个像素是怎样绘制到屏幕上去 ...

  4. 将像素绘制到屏幕上去

    今天把WordPress搭建好了,想用Django搭建的,还是没能实现,把之前翻译的一篇文章拿出来校对了一下,欢迎评阅. ##########我是正文########## 一个像素是怎样绘制到屏幕上去 ...

  5. IOS UIView 01-View开始深入 绘制像素到屏幕上

    前言 一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架.许多功能和方法的结合体.这里我们大概的看一下屏幕之后发生的事情.当你想要弄清楚什么时候.怎么去查明并 ...

  6. 获得ios屏幕上的像素

    转自answer-Huang的博客   [answer-Huang微博] 原文:http://www.objc.io/issue-3/moving-pixels-onto-the-screen.htm ...

  7. 像素是如何绘制到屏幕上的?

    不知道大家有没有这个疑问,就是电脑上或者手机上的东西,如何显示在屏幕上.在显示的过程中,到底发生了什么事情?反正我一直有这个疑问,在初中时候就有了,现在都已经30多岁了,还是有这个疑问,我大学时候做了 ...

  8. Unity3D学习——(一)让Unity3D中的单位与2D像素对应

    学习Unity3D有一段时间了,突然想起来该把自己学习的写出博客,方便以后复习. 那就从今天开始吧 今天遇到一个问题,在用Unity3D做2D游戏的动画播放器的时候(没有用第三方的插件)发现一个问题. ...

  9. 【Unity3D修改Text创建时的默认字体】

    Unity3D修改Text创建时的默认字体 首先定位Text创建时的字体加载逻辑 我使用的是Unity2019.3.2+win10系统 定位到Text的脚本在 Unity\Editor\Data\Re ...

最新文章

  1. BGP协议路由聚合—AS-SET的使用
  2. UVA10340子序列
  3. 迪杰斯特拉算法 php,Dijkstra算法的复杂度
  4. C#异常解决:在调用OLE之前,必须将当前线程设置为单线程单单元(STA)模式。
  5. Gcc详解以及静态库、动态库生成
  6. python 堆_面试再问你什么是堆和栈,你就把这篇文章甩给他
  7. 华为鸿蒙乌鸦快爷,华为鸿蒙第一批名单
  8. 点云nurbs曲面重建c++代码_【科普】抢先收藏!点云数据处理技术概要
  9. Android项目实战(十):自定义倒计时的TextView
  10. 转:如何破解超星打印页数限制
  11. 【Unity】在unity端读取SuperDog加密狗信息【Gemalto 金雅拓 超级狗】
  12. 安卓接入融云即时通讯的简单步骤
  13. 2022年API接口零代码、低代码、纯代码开发的框架推荐
  14. 免费开源网站系统html,全CMS开源系统
  15. linux log原理,linux系统日志管理工具logrotate之原理详述
  16. android手机rom物理存储器,手机ROM/RAM的区别
  17. JVM上篇:内存与垃圾回收篇一--JVM与Java体系结构
  18. 【期末大作业】简单的学生网页作业源码 基于html css javascript南京大学网页校园教育网站html模板(3页)
  19. 外推法的matlab程序
  20. C++将两个字符串合并在一起

热门文章

  1. html表格td的内容修改,点击table中的td,修改td中的内容功能实现
  2. cpu消耗 pytorch_高效 PyTorch :如何消除训练瓶颈
  3. 解决 An invalid domain was specified for this cookie
  4. 385. Mini Parser
  5. [JavaWeb基础] 015.Struts2 表单验证框架
  6. 测试范围不统一,引发的冲突问题
  7. Event Handling Guide for iOS——由触摸事件传递想到的
  8. Java集合的线程安全用法
  9. Linux API函数总结
  10. [恢]hdu 1421