2017-07-01 5 views
-1

Ich bin ziemlich neu zu Shaderlab mit Einheit. Ich versuche die Scheitelpunkte so zu verzerren, dass sie nach hinten und in Richtung Kamera gedrückt werden, fast so, als würde man die Kamera aus einem Winkel von 45 Grad betrachten. Ich repliziere einen Effekt aus einem Spiel zum Spaß. This ist der Code für die Wirkung verwendetVertex Verzerrung in Shaderlab

IVE versucht, den Code in eine Shader-Skript implenting wie so:

float4 vert(appdata v){ 

      float3 position = mul(unity_ObjectToWorld, v.vertex).xyz; 

      float y = position.y; 
      float z = position.x; 

      float3 parentTranslation = ParentMatrix._m30_m31_m32; 

      position -= parentTranslation; 
      position.z += AlternateLayeringScale; 
      position.z -= y; 
      position.y += position.z; 
      position += parentTranslation + float3(0,parentTranslation.z,0); 

      return position; 

     } 

ich erhalte jedoch einen Fehler es besagen, kann von float3 nicht konvertieren float4, ich bin nicht sicher, wie es wurde implementiert

+0

@CamiloTerevinto Nicht wirklich C++. Shaderlab. Unity unterstützt auch GLSL. – Programmer

+1

@Programmer repariert es, dachte, es war C++. Immer noch sehr weit von C# sowieso –

+0

Das stimmt. Es ist weit entfernt von C# – Programmer

Antwort

0

Der vierte Teil ist "w" auch der umgekehrte Stretching-Faktor genannt. Um von vec4 zu vec3 zu konvertieren, ist es am besten, position.xyz/position.w zu tun und es wieder in ein vec4 zu schreiben. return fixed4(position, 1)

+0

ive versuchte den Code wie [so] (http://imgur.com/a/vLei2) aber das ist das Ergebnis so weit (http://imgur.com/a/fc7ax) – AlexNotTheLion

Verwandte Themen