作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在运行时创建了一个带有特殊共享的网格。共享具有以下属性:
1.第一次上色时是蓝色
2.第二次上色时颜色为黄色
3.第三次上色时颜色为红色
4.当它被着色到第四次或更多时,颜色变成绿色
这是彩色区域的示例:
在上图中,绿色区域有很多层混搭。我无法通过对网格中的三角形求和来计算面积,因为有很多重叠。
编辑!我正在用更多信息更新问题
网格是使用以下代码生成的(这不是完整的代码,足以让您大致了解网格是如何生成的)
for (int i = start; i<colorUntil; i++)
{
parent.position = currentPosition;
Vector3 relativePos = points[i + 1] - points[i];
if (relativePos.magnitude > 0.5)
{
parent.rotation = Quaternion.LookRotation(relativePos);
}
currentPosition = points[i];
Vector3 offset = parent.right * width / 2f;
vertices.Add(currentPosition - offset);
vertices.Add(currentPosition + offset);
uvs.Add(new Vector2(0, 1));
uvs.Add(new Vector2(1, 1));
if (vertices.Count< 4)
{
return;
}
int c = vertices.Count;
triangles.Add(c - 1);
triangles.Add(c - 2);
triangles.Add(c - 3);
triangles.Add(c - 3);
triangles.Add(c - 2);
triangles.Add(c - 4);
Vector3[] v = new Vector3[c];
Vector2[] uv = new Vector2[c];
int[] t = new int[triangles.Count];
vertices.CopyTo(v, 0);
uvs.CopyTo(uv, 0);
triangles.CopyTo(t, 0);
mesh.vertices = v;
mesh.triangles = t;
mesh.uv = uv;
}
现在我必须计算每种颜色的面积。鉴于上面的网格,是否可以计算每种颜色的面积?欢迎提出任何建议。
编辑 2!
显然,没有办法使用混搭信息来计算彩色区域(至少根据我的研究)。我如何寻找一种创造性的方式来实现我想要的。我欢迎并感谢任何建议。
最佳答案
截取屏幕截图然后计算绿色像素的简单脚本。
将脚本放在渲染相机上,将m_TakeScreenshot
设置为true,它将在当前帧中工作。
public class ScreenshotCamera : MonoBehaviour
{
public bool m_TakeScreenshot;
public Texture2D m_OutputTexture;
void OnPostRender()
{
if (m_TakeScreenshot)
{
m_TakeScreenshot = false;
//Take screenshot
if (m_OutputTexture == null)
m_OutputTexture = new Texture2D(Screen.width, Screen.height);
m_OutputTexture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
m_OutputTexture.Apply();
//Get all pixels, count green pixels
var pixels = m_OutputTexture.GetPixels(0, 0, m_OutputTexture.width, m_OutputTexture.height);
int greenPixels = 0, otherPixels = 0;
foreach (var color in pixels)
{
//green
if (color.g > 0.8f && color.r < 0.1f && color.b < 0.1f)
greenPixels++;
//not black
else if (color.r > 0.1f || color.g > 0.1f || color.b > 0.1f)
otherPixels++;
}
}
}
}
关于c# - Unity3d:如何计算彩色网格中不同颜色的表面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304751/
我正在尝试让这段代码计算盒子的表面积和体积。它编译但不输出正确的数据。我认为问题可能出在 void Box::零件内,但碰壁了。或者它可能是 Height = Height 但我无法以任何其他方式让它
我一直在阅读 .NET Core vs Standard vs. Framework,人们在谈论 API Surface Area。这是指什么?这只是功能的总和吗? 最佳答案 You can say
我是一名优秀的程序员,十分优秀!