生成Texture2D纹理图片
using UnityEngine;
using System.Collections;
public class ProceduralTexture : MonoBehaviour
{
public int widthHeight = 512;
/// <summary>
/// 生成的图片
/// </summary>
public Texture2D generatedTexture;
/// <summary>
/// 当前的材质
/// </summary>
private Material currentMaterial;
/// <summary>
/// 中心坐标
/// </summary>
private Vector2 centerPosition;
public int i = 0;
private int _i = 999;
// Use this for initialization
void Update()
{
if (i == _i) return;
if (!currentMaterial)
{
//共享当前物体的材质
currentMaterial = transform.GetComponent<Renderer>().sharedMaterial;
if (!currentMaterial)
{
Debug.LogWarning("Cannot find a material on:" + transform.name);
}
}
if (currentMaterial)
{
centerPosition = new Vector2(0.5f, 0.5f);
generatedTexture = GenerateParabola();
//设置当前材质的贴图为我们生成的贴图
currentMaterial.SetTexture("_MainTex", generatedTexture);
}
_i = i;
}
/// <summary>
/// 生成贴图
/// </summary>
/// <returns></returns>
private Texture2D GenerateParabola()
{
//新建一张贴图
Texture2D proceduralTexture = new Texture2D(widthHeight, widthHeight);
//中心像素坐标
Vector2 centerPixelPosition = centerPosition * widthHeight;
//遍历像素点设置
for (int x = 0; x < widthHeight; x++)
{
for (int y = 0; y < widthHeight; y++)
{
if (i == 0) {
#region 颜色控制在黑白,线性变化函数是y=|1-x|,1>=x>=0
Vector2 currentposition = new Vector2(x, y);
float pixeldistance = Vector2.Distance(currentposition, centerPixelPosition) / (widthHeight * 0.5f);
pixeldistance = Mathf.Abs(1 - Mathf.Clamp(pixeldistance, 0f, 1f));
Color pixelcolor = new Color(pixeldistance, pixeldistance, pixeldistance, 1.0f);
proceduralTexture.SetPixel(x, y, pixelcolor);
#endregion
} else if (i == 1) {
#region 颜色控制在黑白随sin周期变化,变化是(2*π)/n,下面的n是30
Vector2 currentPosition = new Vector2(x, y);
float pixelDistance = Vector2.Distance(currentPosition, centerPixelPosition) / (widthHeight * 0.5f);
pixelDistance = Mathf.Abs(1 - Mathf.Clamp(pixelDistance, 0f, 1f));
pixelDistance = (Mathf.Sin(pixelDistance * 30) * pixelDistance);
Color pixelColor = new Color(pixelDistance, pixelDistance, pixelDistance, 1.0f);
proceduralTexture.SetPixel(x, y, pixelColor);
#endregion
} else if (i == 2) {
#region 颜色根据方向向量偏移角度控制
Vector2 currentPosition = new Vector2(x, y);
Vector2 pixelDirection = centerPixelPosition - currentPosition;
pixelDirection.Normalize();
float rightDirection = Vector2.Angle(pixelDirection, Vector3.right) / 360;
float leftDirection = Vector2.Angle(pixelDirection, Vector3.left) / 360;
float upDirection = Vector2.Angle(pixelDirection, Vector3.up) / 360;
Color pixelColor = new Color(rightDirection, leftDirection, upDirection, 1.0f);
proceduralTexture.SetPixel(x, y, pixelColor);
#endregion
}else if(i == 3) {
#region 颜色根据方向向量和方向轴的数量积
Vector2 currentPosition = new Vector2(x, y);
Vector2 pixelDirection = centerPixelPosition - currentPosition;
pixelDirection.Normalize();
float rightDirection = Vector2.Dot(pixelDirection, Vector3.right);
float leftDirection = Vector2.Dot(pixelDirection, Vector3.left);
float upDirection = Vector2.Dot(pixelDirection, Vector3.up);
Color pixelColor = new Color(rightDirection, leftDirection, upDirection, 1.0f);
proceduralTexture.SetPixel(x, y, pixelColor);
#endregion
}
}
}
proceduralTexture.Apply();
return proceduralTexture;
}
}
相关文章
- 流动布局生成无限制图片加载
- NGUI 图集生成 图片Sprite 有撕裂边的问题
- 哪个手机便签能把文字快速生成图片?
- 如何将手机的便签转换成图片,并发送给多个好友?
- winfrom向窗体中拖放图片并显示
- 捕捉HSV颜色,提取图片指定颜色
- html5 实现网页截屏 页面生成图片(图文)
- 【第五篇】Volley代码修改之图片二级缓存以及相关源码阅读(重写ImageLoader.ImageCache)
- vue.js3: js下载图片的两种方式:url和canvas(vue@3.2.37)
- MFC Windows 程序设计[178]之Bitmap图片加载(附源码)
- Atitit 图片 验证码生成attilax总结
- Atitit.计算机图形图像图片处理原理与概论attilax总结
- Atitit.图片木马的原理与防范 attilax 总结
- Vue项目使用file-saver将html转word文件、把html内容下载保存导出到本地生成doc文件包括图片:前端下载利器FileSaver
- iOS(swift) UIButton图片下面加文字(图文混排)
- Flutter 图片裁剪
- java图片高清压缩(1)
- CV之IG之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成更大尺寸的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)案例应用
- CV之IG之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成原始的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)案例应用
- Dataset之图片数据增强:设计自动生成(高级封装之命令行解析实现)汽车车牌图片算法(cv2+PIL+argparse)根据随机指定七个字符生成逼真车牌图片(自然场景+各噪效果+对应txt说明文档)
- Qt OpenCV 在界面显示图片 通过Lable方式 和GraphicsView 方式
- 九行代码带你爬取任何你想要爬取的图片
- 文字生成图片
- 【实例】爬虫:下载图片
- pyhon爬虫之爬取图片(亲测可用)
- 如何在html中把一个图片或者表格覆盖在一张已有图片上的任意位置
- CoreImage 处理图片
- 每天一个JavaScript实例-推断图片是否载入完毕
- FileReader 获取图片BASE64 代码 并预览
- go语言web开发系列之二十四:用imagemagick为上传图片生成缩略图
- LSGANs : Least Squares GAN(最小二乘GAN)--解决标准GAN生成的图片质量不高以及训练过程不稳定问题
- 【Python 实战】---- 接口自动化:60行代码,如何通过Python requests实现图片上传