사용자 정의 쉐이더 (WP7)가 없으면 단순 UV 텍스처 애니메이션은 어떻게 가능합니까? 이 비디오 에서처럼 오프셋 할 필요가 있습니다. https://www.youtube.com/watch?feature=player_detailpage&v=VbDjHMer0Bw#t=309sWindows Phone 7 UV 텍스처 오프셋 애니메이션
모델 또는 정점 만해도됩니까?
사용자 정의 쉐이더 (WP7)가 없으면 단순 UV 텍스처 애니메이션은 어떻게 가능합니까? 이 비디오 에서처럼 오프셋 할 필요가 있습니다. https://www.youtube.com/watch?feature=player_detailpage&v=VbDjHMer0Bw#t=309sWindows Phone 7 UV 텍스처 오프셋 애니메이션
모델 또는 정점 만해도됩니까?
그려지는 정점을 변경하면 사용자 정의 쉐이더없이 가능합니다.
당신이 어딘가에 정점 배열이있는 경우, 당신은 Update
에서 다음을 수행 할 수 있습니다 정점이 너무 자주 변경되기 때문에
var speed = new Vector2(0.1f, 0.1f);
Vector2 uvOffset = speed * (float)gameTime.ElapsedGameTime.TotalSeconds;
for (int i = 0; i < vertices.Length; ++i)
{
vertices[i].TextureCoordinate += uvOffset;
}
, 그들을 잡아 직접 DrawUserPrimitives
또는 DrawUserIndexedPrimitives
, 예를 사용하는 것이 좋습니다 :.
Model
모든 비 동적
VertexBuffer
의에 저장된 XNA에
GraphicsDevice.DrawUserPrimitives<VertexPositionNormalTexture>(PrimitiveType.TriangleList, vertices, 0, vertices.Length/3);
은 모델이 얼마나 복잡한 지에 따라 잠재적으로 매우 느리고 메모리 호깅이 될 수 있음을주의하십시오. 그러니 이것을 명심하십시오.
var speed = new Vector2(0.1f, 0.1f);
Vector2 uvOffset = speed * (float)gameTime.ElapsedGameTime.TotalSeconds;
//unset first
GraphicsDevice.SetVertexBuffer(null);
foreach (ModelMesh mesh in model.Meshes)
{
foreach (ModelMeshPart mp in mesh.MeshParts)
{
//copy array first to change it
var newVertices = new VertexPositionNormalTexture[mp.VertexBuffer.VertexCount];
mp.VertexBuffer.GetData<VertexPositionNormalTexture>(newVertices);
//offset all texture coords
for (int i = 0; i < newVertices.Length; ++i)
{
newVertices[i].TextureCoordinate += uvOffset;
}
//set data back into buffer
mp.VertexBuffer.SetData<VertexPositionNormalTexture>(newVertices);
}
}
배열에서 초기 텍스처 좌표를 캡처하면 일정량 후에 항상 원래대로 되돌릴 수 있습니다. 그런 식으로 전체 질감을 끊임없이 감싸는 것에 국한되지 않습니다.