1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【Unity】获取模型的材质球贴图中的像素点色值

【Unity】获取模型的材质球贴图中的像素点色值

时间:2022-12-30 00:47:13

相关推荐

【Unity】获取模型的材质球贴图中的像素点色值

获取模型的材质球贴图中的像素点色值,可以计算模型贴图的RGB、或某个色值的占比,也可以动态修改指定像素色值。

方式一:

获取可读的贴图,并遍历像素点:(通过Texture获取Texture2D操作的运算量比较大,耗时长,推荐方式二)

void CalculateColor(){//获取网格MeshRenderer meshRenderer = transform.GetComponent<MeshRenderer>();if (meshRenderer == null)return;//默认第一个材质球Material material = meshRenderer.material;//如果有多个材质球,按顺序获取//Material material = meshRenderer.materials[0];//获取材质贴图Texture texture = material.mainTexture;//通过名字获取其他贴图//Texture texture = material.GetTexture("TextureName");//创建新渲染纹理RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);//创建可读的Texture2DTexture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.ARGB32, false);//记录原RenderTexture激活的渲染纹理RenderTexture oldActive = RenderTexture.active;//位块传送,拷贝texture纹理到renderTextureGraphics.Blit(texture, renderTexture);//修改RenderTexture的渲染纹理RenderTexture.active = renderTexture;//读取RenderTexture的渲染纹理像素信息,存储为纹理数据(Texture2D)texture2D.ReadPixels(new Rect(0, 0, texture.width, texture.height), 0, 0);//还原RenderTexture的原渲染纹理RenderTexture.active = oldActive;//释放临时渲染纹理RenderTexture.ReleaseTemporary(renderTexture);//应用前面对texture2D的操作texture2D.Apply();// ---------- //texture2D宽高int pixelWidth = texture2D.width;int pixelHeight = texture2D.height;//获取Color32格式的像素颜色块 pixels32 = texture2D.GetPixels32();//遍历所有像素for (int y = 0; y < pixelHeight; y += downsample){for (int x = 0; x < pixelWidth; x += downsample){Color32 pixelColor32 = pixels32[y * pixelWidth + x];//在此获得每个像素色值信息}}}

方式二:

获取可读的贴图,遍历像素点,并修改色值:(简化方式一,但要将图片改为可读写状态)

void CalculateColor02(){//获取网格MeshRenderer meshRenderer = transform.GetComponent<MeshRenderer>();if (meshRenderer == null)return;//默认第一个材质球Material material = meshRenderer.material;//如果有多个材质球,按顺序获取//Material material = meshRenderer.materials[0];//获取可读贴图Texture2D texture2D = material.mainTexture as Texture2D;// ---------- //texture2D宽高int pixelWidth = texture2D.width;int pixelHeight = texture2D.height;//获取Color32格式的像素颜色块 pixels32 = texture2D.GetPixels32();//遍历所有像素for (int y = 0; y < pixelHeight; y += downsample){for (int x = 0; x < pixelWidth; x += downsample){//在此获得每个像素色值信息Color32 pixelColor32 = pixels32[y * pixelWidth + x];//修改色值texture2D.SetPixel(x, y, pixelColor32);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。