Подтвердить что ты не робот

Патч для камеры Unity

Я изо всех сил пытался заставить образец патча камеры работать в единстве.

Мне, наконец, удалось заставить его работать в редакторе, но я не могу заставить его работать на моем 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

4b9b3361