Unity Camera Patch
He estado luchando para que la muestra de parches de la cámara funcione en unidad.
Finalmente conseguí hacer que funcione en el editor, pero para la vida de mí no puede hacer que funcione en mi samsung galaxy s3 (android).
- Vuforia Videoplayback issue - El video está jugando invertido
- Creación de Player Baking Runtime Android Forever Cargando
- ¿Cómo hacer clics en parte del modelo en Vuforia (sin Unity)?
- Cómo iniciar la aplicación Vuforia AR sample android?
- Carga del modelo AR a través del toque de botón en Android
La única diferencia que puedo ver es cameraTextureRatio que es 1,0 1,0 en el editor de la textura y el tamaño de la imagen es idéntico. En mi teléfono es:
_CAMERATEXTURE_RATIO_X:0.625 _CAMERATEXTURE_RATIO_Y:0.9375
Con resoluciones de:
VideoTextureInfo 1024 512 640 480
Lo estoy calculando así:
cameraTextureRatio.x = (float)texInfo.imageSize.x / (float)texInfo.textureSize.x ; cameraTextureRatio.y = (float)texInfo.imageSize.y / (float)texInfo.textureSize.y ;
Mi sombreador es:
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 } }}
El tamaño del búfer es diferente al tamaño de la textura. Busqué y encontré que está relacionado con el poder de dos restricciones de hardware.
Cuando se ejecuta el parche capturado se muestra en frente de la cámara. Cuando intenté en mi moto g (androide) la resolución es 1280 * 720 (16: 9) el búfer es de 2048 * 1024. Y la cartografía es algo lo correcto.
La relación 1280/2048 = 0,62 y 720/1024 = 0,70 es algo más cercana con respecto a cuando la resolución es 4: 3:
640 * 480 (4: 3) el tampón es de tamaño 1024 * 512 y la relación 640/1024 = 0,62 y 480/512 = 0,93. Debe haber un escalamiento en la dirección x que pueda observar al ver el plano (RenderTargetView) en su dispositivo. He intentado cambiar el tamaño de la textura, pero la unidad no lo permitirá.
He hecho un proyecto de unidad limpio aquí: https://www.dropbox.com/s/e3nfs62fdm9ajsi/cameraPatch.unitypackage
El marcador utilizado está en Textures / ar.png
Estoy al borde de renunciar, creo que he intentado todo lo que hay por ahora ..: / ¿Alguien tiene una idea de cómo resolver este problema? Estaría eternamente agradecido si alguien pudiera echar un vistazo y quizás detectar un error. Gracias
- Uso de Android Studio con Vuforia
- No se puede instanciar la aplicación com.android.tools.fd.runtime.BootstrapApplication
- Vuforia vs Metaio SDK vs ARKit vs D'Fusion Mobile vs Layar SDK
- Vuforia - Introducción a Android
- Integración de jpct-ae con el motor Vuforia de Qualcomm en android
- vuforia AR SDK - no se puede reproducir video por url
- Integre Unity3D con Vuforia en la aplicación Cordova
- Captura de video en AR (Vuforia) con unidad en la plataforma Android
- Android Obtener la ruta de acceso de Uri a un archivo de Google Drive
- ¿Cómo hacer un linearLayout parcialmente transparente en android?