本文整理汇总了C#中UnityEngine.MaterialPropertyBlock.AddVector方法的典型用法代码示例。如果您正苦于以下问题:C# MaterialPropertyBlock.AddVector方法的具体用法?C# MaterialPropertyBlock.AddVector怎么用?C# MaterialPropertyBlock.AddVector使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UnityEngine.MaterialPropertyBlock
的用法示例。
在下文中一共展示了MaterialPropertyBlock.AddVector方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: LateUpdate
public virtual void LateUpdate()
{
if(m_id==0)
{
m_id = ++s_idgen;
}
m_local_time += Time.deltaTime;
if (m_mpb == null)
{
m_renderer = GetComponent<Renderer>();
m_trans = GetComponent<Transform>();
m_mpb = new MaterialPropertyBlock();
m_mpb.AddVector("_Position", Vector4.zero);
m_mpb.AddVector("_Rotation", Vector4.zero);
m_mpb.AddVector("_Scale", Vector4.one);
m_mpb.AddFloat("_LocalTime", m_local_time);
m_mpb.AddFloat("_ID", m_id);
}
var rot = m_trans.rotation;
m_mpb.SetVector("_Position", m_trans.position);
m_mpb.SetVector("_Rotation", new Vector4(rot.x, rot.y, rot.z, rot.w));
m_mpb.SetVector("_Scale", m_trans.localScale);
m_mpb.SetFloat("_LocalTime", m_local_time);
for (int i = 0; i < m_params.Length; ++i)
{
m_mpb.SetFloat(m_params[i].key, m_params[i].value);
}
m_renderer.SetPropertyBlock(m_mpb);
}
示例2: SetOffset
public void SetOffset(Vector4 offset)
{
MaterialPropertyBlock props = new MaterialPropertyBlock();
GetComponent<Renderer>().GetPropertyBlock(props);
props.AddVector(offsetID, offset);
GetComponent<Renderer>().SetPropertyBlock(props);
}
示例3: OnWillRenderObject
public virtual void OnWillRenderObject()
{
if(m_mpb == null) {
m_mpb = new MaterialPropertyBlock();
m_mpb.AddVector("_Position", Vector4.zero);
m_mpb.AddVector("_Rotation", Vector4.zero);
m_mpb.AddVector("_Scale", Vector4.one);
m_renderer = GetComponent<Renderer>();
m_trans = GetComponent<Transform>();
}
var rot = m_trans.rotation;
m_mpb.SetVector("_Position", m_trans.position);
m_mpb.SetVector("_Rotation", new Vector4(rot.x, rot.y, rot.z, rot.w));
m_mpb.SetVector("_Scale", m_trans.localScale);
m_renderer.SetPropertyBlock(m_mpb);
}
示例4: Start
// Use this for initialization
void Start()
{
// We use the default fractal color set in the Mandelbrot shader
m_propBlock = new MaterialPropertyBlock();
m_propBlock.AddVector("_ColorRatio", new Vector4(1.0f,1.0f,1.0f,1.0f));
Viewport.GetComponent<Renderer>().SetPropertyBlock(m_propBlock);
StartMusic();
}
示例5: AddToMaterialPropertyBlock
public void AddToMaterialPropertyBlock(MaterialPropertyBlock block)
{
UIPanelMaterialPropertyBlock.Node node = this.first;
int num = this.count;
while (true)
{
int num1 = num;
num = num1 - 1;
if (num1 <= 0)
{
break;
}
switch (node.type)
{
case UIPanelMaterialPropertyBlock.PropType.Float:
{
block.AddFloat(node.property, [email protected]);
break;
}
case UIPanelMaterialPropertyBlock.PropType.Vector:
{
block.AddVector(node.property, [email protected]);
break;
}
case UIPanelMaterialPropertyBlock.PropType.Color:
{
block.AddColor(node.property, [email protected]);
break;
}
case UIPanelMaterialPropertyBlock.PropType.Matrix:
{
block.AddMatrix(node.property, [email protected]);
break;
}
}
node = node.next;
}
}
示例6: ApplyToBlock
private void ApplyToBlock(ref MaterialPropertyBlock block, ShaderIDs bids) {
#if USE_PROPERTY_BLOCKS
block.AddVector(bids.exposureIBL, exposures);
block.AddVector(bids.exposureLM, exposuresLM);
block.AddMatrix(bids.skyMatrix, skyMatrix);
block.AddMatrix(bids.invSkyMatrix, invMatrix);
block.AddVector(bids.skyMin, skyMin);
block.AddVector(bids.skyMax, skyMax);
if(specularCube) block.AddTexture(bids.specCubeIBL, specularCube);
else block.AddTexture(bids.specCubeIBL, blackCube);
block.AddVector(bids.SH[0], SH.cBuffer[0]);
block.AddVector(bids.SH[1], SH.cBuffer[1]);
block.AddVector(bids.SH[2], SH.cBuffer[2]);
block.AddVector(bids.SH[3], SH.cBuffer[3]);
block.AddVector(bids.SH[4], SH.cBuffer[4]);
block.AddVector(bids.SH[5], SH.cBuffer[5]);
block.AddVector(bids.SH[6], SH.cBuffer[6]);
block.AddVector(bids.SH[7], SH.cBuffer[7]);
block.AddVector(bids.SH[8], SH.cBuffer[8]);
#endif
}
示例7: Update
void Update()
{
if (_needsReset) ResetResources();
// Call the kernels.
UpdateKernelShader();
Graphics.Blit(null, _positionBuffer, _kernelMaterial, 0);
Graphics.Blit(null, _rotationBuffer, _kernelMaterial, 1);
Graphics.Blit(null, _scaleBuffer, _kernelMaterial, 2);
// Make a material property block for the following drawcalls.
var props = new MaterialPropertyBlock();
props.AddTexture("_PositionTex", _positionBuffer);
props.AddTexture("_RotationTex", _rotationBuffer);
props.AddTexture("_ScaleTex", _scaleBuffer);
props.SetVector("_ColumnRow", new Vector2(_columns, _rows));
props.SetVector("_UVOffset", UVOffset);
// Temporary variables.
var mesh = _bulkMesh.mesh;
var position = transform.position;
var rotation = transform.rotation;
var material = _material ? _material : _defaultMaterial;
var uv = new Vector2(0.5f / _positionBuffer.width, 0);
position += transform.right * XOffset;
position += transform.up * YOffset;
// Draw mesh segments.
for (var i = 0; i < _positionBuffer.height; i++)
{
uv.y = (0.5f + i) / _positionBuffer.height;
props.AddVector("_BufferOffset", uv);
Graphics.DrawMesh(
mesh, position, rotation,
material, 0, null, 0, props,
_castShadows, _receiveShadows);
}
}
示例8: Update
// Update is called once per frame
void Update()
{
m_playCenter = UserProfile.SafeAreaCenter;
m_playRadius = UserProfile.SafeAreaRadius;
for (int i = 0; i < m_warning.Length; i++)
{
var w = m_warning[i];
float wdist = m_warnDistance;
Vector3 center = transform.position + transform.rotation * m_playCenter;
Vector3 track;
Quaternion r;
if (i == 0)
{
m_solver.GetTrackerTransform(Tracker.LEFT, out track, out r);
var con = m_avatar.GetInput(Tracker.LEFT);
if (con == null)
{
w.enabled = false;
continue;
}
w.transform.localScale = Vector3.one * 0.5f;
wdist *= 0.5f;
}
else if (i == 1)
{
m_solver.GetTrackerTransform(Tracker.RIGHT, out track, out r);
var con = m_avatar.GetInput(Tracker.RIGHT);
if (con == null)
{
w.enabled = false;
continue;
}
w.transform.localScale = Vector3.one * 0.5f;
wdist *= 0.5f;
}
else
{
var con = m_avatar.GetInput(Tracker.HEAD);
if (con == null)
{
w.enabled = false;
continue;
}
m_solver.GetEyeTransform(out track, out r);
w.transform.localScale = Vector3.one * 1f;
}
Vector3 delta = track - center;
delta.y = 0;
float dist = m_playRadius * m_playRadius - delta.sqrMagnitude;
float t = 1f - dist / (m_playRadius * m_playRadius);
if (t > 0.1f && m_playRadius != 0)
{
w.enabled = true;
delta.Normalize();
Vector3 pos = delta * m_playRadius + center;
pos.y = track.y;
w.transform.position = pos;
w.transform.LookAt(track);
float heading = Mathf.Atan(delta.z / delta.x);
if (delta.x < 0)
heading += Mathf.PI;
float arc = heading * m_playRadius;
float height = pos.y;
if (t > 1)
{
arc *= -1;
}
float bright = wdist - dist;
MaterialPropertyBlock block = new MaterialPropertyBlock();
if (t > 1 && i == 2)
block.AddColor("_TintColor", new Color(0, 1, 0, 0.1f));
else
block.AddColor("_TintColor", new Color(1, 0, 0, Mathf.Clamp01(bright) * 0.75f));
block.AddVector("_GridOffset", new Vector4(arc, height, w.transform.lossyScale.x, w.transform.lossyScale.y));
w.SetPropertyBlock(block);
}
else
w.enabled = false;
}
}
示例9: Update
void Update()
{
if (_needsReset) ResetResources();
UpdateKernelShader();
if (Application.isPlaying)
{
// Swap the particle buffers.
var temp = _positionBuffer1;
_positionBuffer1 = _positionBuffer2;
_positionBuffer2 = temp;
temp = _rotationBuffer1;
_rotationBuffer1 = _rotationBuffer2;
_rotationBuffer2 = temp;
// Call the kernel shader.
Graphics.Blit(_positionBuffer1, _positionBuffer2, _kernelMaterial, 2);
Graphics.Blit(_rotationBuffer1, _rotationBuffer2, _kernelMaterial, 3);
}
else
{
InitializeAndPrewarmBuffers();
}
// Make a material property block for the following drawcalls.
var props = new MaterialPropertyBlock();
props.SetTexture("_PositionBuffer", _positionBuffer2);
props.SetTexture("_RotationBuffer", _rotationBuffer2);
props.SetFloat("_ScaleMin", _minScale);
props.SetFloat("_ScaleMax", _maxScale);
props.SetFloat("_RandomSeed", _randomSeed);
// Temporary variables
var mesh = _bulkMesh.mesh;
var position = transform.position;
var rotation = transform.rotation;
var material = _material ? _material : _defaultMaterial;
var uv = new Vector2(0.5f / _positionBuffer2.width, 0);
// Draw a bulk mesh repeatedly.
for (var i = 0; i < _positionBuffer2.height; i++)
{
uv.y = (0.5f + i) / _positionBuffer2.height;
props.AddVector("_BufferOffset", uv);
Graphics.DrawMesh(
mesh, position, rotation,
material, 0, null, 0, props,
_castShadows, _receiveShadows);
}
}
示例10: SetUniforms
/**
* Sets the shader uniforms that are necessary to project on screen the
* given TerrainQuad. This method can set the uniforms that are specific to
* the given quad.
*/
public virtual void SetUniforms(TerrainNode node, TerrainQuad quad, MaterialPropertyBlock matPropertyBlock)
{
if(matPropertyBlock == null || node == null || quad == null) return;
double ox = quad.GetOX();
double oy = quad.GetOY();
double l = quad.GetLength();
double distFactor = (double)node.GetDistFactor();
int level = quad.GetLevel();
matPropertyBlock.AddVector(m_uniforms.offset, new Vector4((float)ox, (float)oy, (float)l, (float)level));
Vector3d2 camera = node.GetLocalCameraPos();
matPropertyBlock.AddVector(m_uniforms.camera, new Vector4( (float)((camera.x - ox) / l), (float)((camera.y - oy) / l),
(float)((camera.z - node.GetView().GetGroundHeight()) / (l * distFactor)),
(float)camera.z));
Vector3d2 c = node.GetLocalCameraPos();
Matrix3x3d m = m_localToTangent * (new Matrix3x3d(l, 0.0, ox - c.x, 0.0, l, oy - c.y, 0.0, 0.0, 1.0));
matPropertyBlock.AddMatrix(m_uniforms.tileToTangent, m.ToMatrix4x4());
SetScreenUniforms(node, quad, matPropertyBlock);
}
示例11: SetScreenUniforms
protected override void SetScreenUniforms(TerrainNode node, TerrainQuad quad, MaterialPropertyBlock matPropertyBlock)
{
double ox = quad.GetOX();
double oy = quad.GetOY();
double l = quad.GetLength();
Vector3d2 p0 = new Vector3d2(ox, oy, R);
Vector3d2 p1 = new Vector3d2(ox + l, oy, R);
Vector3d2 p2 = new Vector3d2(ox, oy + l, R);
Vector3d2 p3 = new Vector3d2(ox + l, oy + l, R);
Vector3d2 pc = (p0 + p3) * 0.5;
double l0 = 0.0, l1 = 0.0, l2 = 0.0, l3 = 0.0;
Vector3d2 v0 = p0.Normalized(ref l0);
Vector3d2 v1 = p1.Normalized(ref l1);
Vector3d2 v2 = p2.Normalized(ref l2);
Vector3d2 v3 = p3.Normalized(ref l3);
Matrix4x4d deformedCorners = new Matrix4x4d(v0.x * R, v1.x * R, v2.x * R, v3.x * R,
v0.y * R, v1.y * R, v2.y * R, v3.y * R,
v0.z * R, v1.z * R, v2.z * R, v3.z * R,
1.0, 1.0, 1.0, 1.0);
matPropertyBlock.AddMatrix(m_uniforms.screenQuadCorners, (m_localToScreen * deformedCorners).ToMatrix4x4());
Matrix4x4d deformedVerticals = new Matrix4x4d( v0.x, v1.x, v2.x, v3.x,
v0.y, v1.y, v2.y, v3.y,
v0.z, v1.z, v2.z, v3.z,
0.0, 0.0, 0.0, 0.0);
matPropertyBlock.AddMatrix(m_uniforms.screenQuadVerticals, (m_localToScreen * deformedVerticals).ToMatrix4x4());
matPropertyBlock.AddVector(m_uniforms.screenQuadCornerNorms, new Vector4((float)l0, (float)l1, (float)l2, (float)l3));
Vector3d2 uz = pc.Normalized();
Vector3d2 ux = (new Vector3d2(0,1,0)).Cross(uz).Normalized();
Vector3d2 uy = uz.Cross(ux);
Matrix4x4d ltow = node.GetLocalToWorld();
Matrix3x3d tangentFrameToWorld = new Matrix3x3d(ltow.m[0,0], ltow.m[0,1], ltow.m[0,2],
ltow.m[1,0], ltow.m[1,1], ltow.m[1,2],
ltow.m[2,0], ltow.m[2,1], ltow.m[2,2]);
Matrix3x3d m = new Matrix3x3d( ux.x, uy.x, uz.x,
ux.y, uy.y, uz.y,
ux.z, uy.z, uz.z);
matPropertyBlock.AddMatrix(m_uniforms.tangentFrameToWorld, (tangentFrameToWorld * m).ToMatrix4x4());
}
示例12: Update
void Update()
{
if (_needsReset) ResetResources();
// Advance the time variables.
_rotationNoiseTime += _rotationNoiseSpeed * Time.deltaTime;
// Call the kernels.
UpdateKernelShader();
if (_needsReset || _positionUpdateFlag)
Graphics.Blit(null, _positionBuffer, _kernelMaterial, 0);
Graphics.Blit(null, _rotationBuffer, _kernelMaterial, 1);
if (_needsReset || _scaleUpdateFlag)
Graphics.Blit(null, _scaleBuffer, _kernelMaterial, 2);
// Make a material property block for the following drawcalls.
var props = new MaterialPropertyBlock();
props.AddTexture("_PositionTex", _positionBuffer);
props.AddTexture("_RotationTex", _rotationBuffer);
props.AddTexture("_ScaleTex", _scaleBuffer);
// Temporary variables.
var mesh = _bulkMesh.mesh;
var position = transform.position;
var rotation = transform.rotation;
var material = _material ? _material : _defaultMaterial;
var uv = new Vector2(0.5f / _positionBuffer.width, 0);
// Draw mesh segments.
for (var i = 0; i < _positionBuffer.height; i++)
{
uv.y = (0.5f + i) / _positionBuffer.height;
props.AddVector("_BufferOffset", uv);
Graphics.DrawMesh(
mesh, position, rotation,
material, 0, null, 0, props,
_castShadows, _receiveShadows);
}
// Clear flag variables.
_positionUpdateFlag = true;
_scaleUpdateFlag = true;
_needsReset = false;
}