2014-02-16 2 views
2

Итак, я создаю вершинный шейдер, чтобы сделать GameObject похожим на его сжатие/расширение (пульсирование?) Непрерывно.Как передать позицию преобразования GameObject в мой шейдер CG?

Я использую матрицу нормального масштаба, чтобы умножить положение каждой вершины, но я хочу, чтобы объект выглядел центрированным в том же положении. Если бы я смог получить transform.position объекта gameObject, который отображается, я знаю, что смогу сохранить центральную позицию одинаково.

Как я могу получить доступ к позиции игрового объекта в моем шейдере CG?

Или я неправильно подхожу к этой проблеме?

vertexOut vert(vertexIn v) 
{ 
    vertexOut o; 

    o.pos = mul(UNITY_MATRIX_MVP,v.vertex); 
    o.pos2 = mul(UNITY_MATRIX_MVP,v.vertex); 


    float scaleVal = sin(_Time.y*10)/8 + 1.0; 
    float4x4 scaleMat = float4x4(
    scaleVal, 0, 0, 0, 
    0, scaleVal, 0, 0, 
    0, 0, 1, 0, 
    0, 0, 0, 1); 

    o.pos = mul(scaleMat,o.pos); 
    return o; 
} 
+0

Любой код, который вы можете показать? – Durandal

+0

Ах, всем, кто хочет знать решение, вы можете использовать renderer.material.SetX для установки униформы. – Martin

ответ

2

Просто определим shader property типа Вектор. Затем вы можете обновить это свойство на каждом кадре, вызвав SetVector на материал.

Смежные вопросы