Unity3D 截取6面图 做全景图脚本
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class PanoramaGenerator : ScriptableWizard
{
[Header("360 全景相机")]
public Camera panoramaCamera;
string[] skyBoxImage = new string[] { "_back", "_right", "_front", "_left", "_up", "_bottom"};
Vector3[] skyDirection = new Vector3[] {new Vector3(0, 0, 0), new Vector3(0, -90, 0), new Vector3(0, 180, 0), new Vector3(0, 90, 0), new Vector3(-90, 0, 0), new Vector3(90, 0, 0)};
[Header("截取图片尺寸,最好为 2的N次方")]
public int ScreenSize = 1024;
[Header("SkyBox")]
public Cubemap cubemap;
void OnWizardUpdate()
{
helpString = "Select transform to render from";
isValid = (panoramaCamera != null);
}
void OnWizardCreate()
{
panoramaCamera.backgroundColor = Color.black;
panoramaCamera.clearFlags = CameraClearFlags.Skybox;
panoramaCamera.fieldOfView = 90;
panoramaCamera.aspect = 1.0f;
panoramaCamera.transform.rotation = Quaternion.identity;
for (var orientation = 0; orientation < skyDirection.Length; orientation++)
{
renderSkyImage(orientation, panoramaCamera.gameObject);
}
if (cubemap)
{
panoramaCamera.RenderToCubemap(cubemap);
}
}
[MenuItem("360 全景/ 渲染6张图", false, 4)]
static void RenderSkyBox()
{
ScriptableWizard.DisplayWizard<PanoramaGenerator>("Render SkyBox","渲染!");
}
void renderSkyImage(int orientation, GameObject go)
{
try
{
go.transform.eulerAngles = skyDirection[orientation];
var screenSize = ScreenSize;
RenderTexture rt = new RenderTexture(screenSize, screenSize, 24);
go.GetComponent<Camera>().targetTexture = rt;
var screenShot = new Texture2D(screenSize, screenSize, TextureFormat.RGBA32, false);
go.GetComponent<Camera>().Render();
RenderTexture.active = rt;
screenShot.ReadPixels(new Rect(0, 0, screenSize, screenSize), 0, 0);
RenderTexture.active = null;
var bytes = screenShot.EncodeToPNG();
var directory = "Assets/Skyboxes";
if (!System.IO.Directory.Exists(directory))
System.IO.Directory.CreateDirectory(directory);
System.IO.File.WriteAllBytes(System.IO.Path.Combine(directory, skyBoxImage[orientation] + ".png"), bytes);
DestroyImmediate(rt);
}
catch(System.Exception ex)
{
}
}
}
Unity3D 截取6面图 做全景图脚本的更多相关文章
- Unity3D ShaderLab 静态贴图光照模型
Unity3D ShaderLab 静态贴图光照模型 其实在unity的光照模型中,我们可以把光照讯息烘培进入一个2D贴图,来实现着色器的光照效果. 下面是在unity中关闭灯光和打开灯光的对比效果. ...
- Unity3D ShaderLab 使用贴图对模型的高光进行遮罩
Unity3D ShaderLab 使用贴图对模型的高光进行遮罩 前面研究了高光效果的实现,再说说现很多游戏用到的高光贴图技术,因为它可以让3D美工更容易控制最终的视觉效果. 这也就为我们提供了另外的 ...
- Unity3D ShaderLab法线贴图
Unity3D ShaderLab法线贴图 说到法线贴图,应该算是我们最常使用的一种增强视觉效果的贴图.将法线贴图的各个像素点座位模型的法线,这样我们的光照可以模拟出高分辨率的效果, 同时也保持较低的 ...
- wordpress调用文章摘要,若无摘要则自动截取文章内容字数做为摘要
以下是调用指定分类文章列表的一个方法,作者如果有填写文章摘要则直接调用摘要:如果文章摘要忘记写了则自动截取文章内容字数做为摘要.这个方法也适用于调用description标签 <ul> & ...
- Win10系统Edge浏览器怎么截取网页长图?
有时我们在工作演示时会需要截取网页上的图片,不过简单的截图可以,但如果需要截取超过屏幕大小的整个网页,你是不是就有些束手无策了.虽然拼接图片也是种方法,但毕竟还是不方便,下面好系统重装助手就教你在Wi ...
- css中用一张背景图做页面的技术有什么优势?
css中用一张背景图做页面的技术有什么优势? 简单介绍一下 CSS Sprites 的优点: 当用户往U盘中拷200张图片,会等很久.但是如果弄成一个文件,再拷贝就会快很多. CSS Sprites ...
- Unity3D研究院之动态修改烘培贴图的大小&脚本烘培场景
Unity默认烘培场景以后每张烘培贴图的大小是1024.但是有可能你的场景比较简单,用1024会比较浪费.如下图所示,这是我的一个场景的烘培贴图,右上角一大部分完全是没有用到,但是它却占着空间. 有 ...
- Unity3D中的第三人称镜头的脚本控制
原地址:http://blog.csdn.net/mobanchengshuang/article/details/27591271 好久没有敲Blog了,谢谢大家的留言.关注.私信等支持,但是我好像 ...
- Unity3D用vistual studio打卡C#脚本卡死解决
小黑已经跟我3年了,不仅很喜欢他方正酷黑的外表,而且稳定性绝对没的说.我已经3年没有重装过系统了,而且现在装了3个系统!虽然小黑很适合程序员,但是他最大的缺点就是做设计比较吃力,显卡512M.像uni ...
随机推荐
- BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: ...
- CSU-2018
The gaming company Sandstorm is developing an online two player game. You have been asked to impleme ...
- Kerberos+SSH安装配置使用教程
一.背景说明 最早听说KDC和Kerberos应该是大三的<应用密码学>,当时感觉这套对称密钥分发机制比非对称密钥的PKI分发机制要好理解.但几年下来由于现实中使用SSL的场景比较比(主要 ...
- 【React】在React中 JSX 代码如何转成 JS 代码?
一.介绍 写 React 代码的朋友应该都是直接写 JSX 代码,JSX 让我们可以在 JS 中直接写 HTML 代码,可阅读性较高.本章节主要介绍 JSX 通过 babel 转换后会生成什么样式代码 ...
- Orleans 文档记录
Orleans 官方文档:官方文档 http://dotnet.github.io/orleans/index.html Orleans 中文文档:中文文档 https://orleanscn.git ...
- java基础篇一
引言 本人系南京一小小学校的大三小小菜鸟,三年来学了很多杂七杂八的,也荒废了大量的时间,马上就要秋招了,之前也看了不少面试题,备选了一些简单的项目,看了不知多少本的几百页厚的各种知识的pdf电子书,发 ...
- TrueTime的安装、运行例程
一.前言 Truetime的安装是为了完成课程相关需求,但在安装过程中遇到一些问题,想到自己之前注册了博客所以打算把这个作为第一篇的内容.请放心这个的安装过程并不困难,可以放心食用. 二.准备 Tru ...
- 使用GDAL/GEOS求面特征的并集
存在这样一个示例的矢量文件,包含了两个重叠的面特征: 一个很常见的需求是求取这个矢量中所有面元素的并集,通过GDAL/GEOS很容易实现这个功能,具体代码如下: #include <iostre ...
- linux中批量添加文件前缀的操作
需要在文件夹内所有txt文件的文件名前面添加"gt_"; 就是由原来的文件“xxx.txt”变成“gt_xxx.txt”: 网上搜来的脚本如下: for i in `ls`; do ...
- DDD 实战记录——实现「借鉴学习计划」
「借鉴学习计划」的核心是:复制一份别人的学习计划到自己的计划中,并同步推送学习任务给自己,并且每个操作都要发送通知给对方. 它们的类图如下: 它们的关系是一对多: // Schedule entity ...