1
의 사본은 내가 이렇게 할 경우 :XNA - 동일한 소스 모델
Model test1 = content.Load<Model>(@"Models/floorTile");
Model test2 = content.Load<Model>(@"Models/floorTile");
Model test3 = content.Load<Model>(@"Models/floorTile");
foreach (ModelMesh mesh in test1.Meshes)
foreach (Effect effect in mesh.Effects)
((BasicEffect)effect).DiffuseColor = Color.Red.ToVector3();
세 가지 모델은 TEST1하지, 색상이 빨간색으로 지정됩니다.
이
은 실제 버전에서, 나는 실제 HLSL 효과를 내 문제의 단순화 된 버전을 사용하고있다, 나는 여러 독특한 fbxs에서 작동 할 수있는 하나의 효과를 복제하는 방법을 알고 있지만, 내가 만드는 방법을 모르겠습니다 3dmodel의 인스턴스를 두 개 이상 할당하고 각 텍스처에 하나의 텍스처/효과를 참조하는 대신 자체 텍스처를 할당하므로 내 장면의 모든 "floorTile"은 항상 동일하게 보입니다.내가 생각할 수있는 유일한 해결 방법은 각 모델마다 다른 floortile fbx 모델을 만드는 것이지만 많은 타일이 있으므로 이상적이라고 할 수 있습니다.
foreach (var mesh in Model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.TextureEnabled = true;
effect.Texture = modelTexture;
effect.Projection = Camera.Projection;
effect.View = Camera.View;
effect.World = AbsoluteBoneTransforms[mesh.ParentBone.Index] * FinalWorldTransforms;
}
mesh.Draw();
}
둘 이상의 Model
가 다른 modelTexture
(모델 1, 모델 2 및 Model3 같은) 그 (것)들에 적용 할 수 있습니다 : 내가 생각할 수있는
감사합니다. BasicEffects 없이도 효과가있을 것이라고 생각합니다. 각 그리기 호출 내에서 동일한 모델에 대해 색상을 바꾸고 다른 색상을 얻을 수 있다는 것은 사실입니다. 30 개의 사각형과 모든 색이 다르기 때문에 사각형의 실제 색이 결코 색을 변경하지 않더라도 각 그리기 호출을 30 번 바꿔 놓아야합니다. 나는 아직도 그보다 나은 방법이 있기를 바라고 있습니다. – user1693188
그랬 으면 좋겠지 만 3D 및 효과에 대한 경험이 너무 많아서 도움이되지 않았습니다. – pinckerman
텍스처 교환은 하나의 프레임에서 30 회의 무승부 호출을 수행하는 것보다 관련성이 적습니다. 이것은 장면을 어떻게 만드는지에 대한 최적화를 필요로합니다. 이러한 추가 최적화가 없다면이 솔루션이 표준적인 방법입니다. 일반적으로 전체 모델을 복사하지 않고 다른 방식으로 그릴 수 있습니다 *. –