Я изо всех сил пытался заставить образец патча камеры работать в единстве.
Мне, наконец, удалось заставить его работать в редакторе, но я не могу заставить его работать на моем Samsung Galaxy S3 (Android).
Единственное отличие, которое я вижу, это cameraTextureRatio, который в редакторе равен 1.0 1.0, текстура и размер изображения идентичны. На моем телефоне это:
_CAMERATEXTURE_RATIO_X:0.625
_CAMERATEXTURE_RATIO_Y:0.9375
с разрешениями:
VideoTextureInfo 1024 512 640 480
Я рассчитываю это так:
cameraTextureRatio.x = (float)texInfo.imageSize.x / (float)texInfo.textureSize.x ;
cameraTextureRatio.y = (float)texInfo.imageSize.y / (float)texInfo.textureSize.y ;
Мой шейдер:
Shader "Custom/VidTexPatch" {
Properties {
_MainTex("Texture", 2D) = "white" { }
}
SubShader{
Pass{
Cull Back
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4x4 _MATRIX_MVP;
float _CAMERATEXTURE_RATIO_X ;
float _CAMERATEXTURE_RATIO_Y ;
struct v2f{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
v2f vert(appdata_base v){
v2f o;
float2 targetSize = float2(15,15);
float2 cameraTextureRatio = float2 (_CAMERATEXTURE_RATIO_X, _CAMERATEXTURE_RATIO_Y);
float4 targetPoint = float4(targetSize.x * (v.texcoord.x - 0.5), targetSize.y * (v.texcoord.y - 0.5), 0.0, 1.0);
float4 clipCoords = mul(_MATRIX_MVP, targetPoint);
float3 normalizedDeviceCoords = clipCoords.xyz / clipCoords.w;
float2 cameraTexCoords = float2((normalizedDeviceCoords.x + 1.0) / 2.0, ((normalizedDeviceCoords.y * -1.0) + 1.0) / 2.0);
float2 finalCoords = float2(cameraTexCoords.x * cameraTextureRatio.x, cameraTexCoords.y * cameraTextureRatio.y);
// float2 finalCoords = float2(cameraTexCoords.x * cameraTextureRatio.y, cameraTexCoords.y * cameraTextureRatio.y);
o.uv = finalCoords;
//o.uv=cameraTexCoords;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
}
half4 frag(v2f i) : COLOR{
half4 texcol = tex2D(_MainTex, i.uv);
return texcol;
}
ENDCG
}
}}
Размер буфера отличается от размера текстуры. Я искал и обнаружил, что это связано с мощностью двух ограничений оборудования.
При запуске захваченный патч отображается перед камерой. когда я пытался в моем мото г (андроид) разрешение 1280 * 720 (16: 9), буфер 2048 * 1024. и отображение - это то, что правильно.
соотношение 1280/2048 = 0,62 и 720/1024 = 0,70 несколько ближе по сравнению с разрешением 4: 3:
Размер буфера 640 * 480 (4: 3) составляет 1024 * 512, а соотношение 640/1024 = 0,62 и 480/512 = 0,93. Там должно быть некоторое масштабирование в направлении х, которое вы можете наблюдать при просмотре плоскости (RenderTargetView) в вашем устройстве. Я пытался изменить размер текстуры, но единство не позволит этого.
Я сделал проект чистого единства здесь: DropBox
используемый маркер находится в Textures/ar.png