我正在尝试使用Unity Pointcloud Example from Github作为基础编写着色器,以便使用与默认蓝色/粉色不同的颜色渲染pointcloud。这是我第一次使用3D数据和着色器,因此我对事情如何运作的理解很可能已经消失。我注意到我所使用的pointcloud的密度与我使用的1280x720图像有很大不同,所以每次着色器进行纹理元素查找时,它都会变成黑色?我的pointcloud shows up as tiny black dots代替了我已经附加到其上有着色器的素材的RGB图像的预期颜色混合。这是我的着色器代码:
Shader "Tango/TextureTest" {
Properties {
_MainTex ("RGBA Texture Image", 2D) = "white" {}
}
SubShader {
Tags {"Queue" = "Geometry"}
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
uniform sampler2D _MainTex;
struct vertexInput {
float4 vertex : POSITION;
float4 texcoord : TEXCOORD0;
};
struct vertexOutput {
float4 pos : SV_POSITION;
float4 tex : TEXCOORD0;
};
vertexOutput vert(vertexInput input)
{
vertexOutput output;
output.tex = input.texcoord;
output.pos = mul(UNITY_MATRIX_MVP, input.vertex);
return output;
}
float4 frag(vertexOutput input) : COLOR
{
float4 textureColor = tex2D(_MainTex, input.tex);
return textureColor;
}
ENDCG
}
}
FallBack "Diffuse"
}
在Unity编辑器中,我创建了一个新材质,并为其添加了一个随机RGB图像。为了使用这个新材质+着色器,我将Pointcloud Unity示例中使用的Pointcloud材质+着色器替换为我的。所以我有两个问题:我的着色器不完整/不正确以及我在理解着色器中使用纹理的概念时缺少什么,特别是与此Tango pointcloud场景有关?
感谢。
我的Tango设备正在运行Nash。
答案 0 :(得分:1)
是的 - 除非你在固定视图中累积3d点击并希望他们最终获得完全覆盖,否则你不会取得任何成功 - 鉴于野兽的性质,这是非常不可能的
你有两个解决方案 - 第一种是使用Delauney三角剖分或任何其他技术生成网格,这些技术会将您所拥有的点拼接到曲面中。然后,您可以让图形引擎找出其间的所有点 - 为您知道的点生成纹理坐标,不知道插值的纹理坐标 - here's a movie of that -
现在,我必须首先承认,在追逐狙击两个月之后,由于所有错误的原因,它的方向错误 - tl; dr是Tango数据返回是一个统计过程,即你必须继续假设虽然随着时间的推移在统计上准确到某种程度,Tango返回的各个点既不准确也不可重复 - 因此体积可视化技术是可行的方法,如this - 在那一个,有各种booboos然而,在纹理应用中,它实际上是使用多轴融合模型,而前者仅在视图与采集时的摄像机轨迹和姿态直接对齐时才起作用。
至于着色器的实际创建,这是一个不同的反应 - 但我认为在选择着色器之前没有多大意义,直到你知道如何将这些点编织成一个表面(第一部电影)或第三部电影(第二部电影) - 我无法强调第一部电影是一个非常糟糕的想法"