прозрачность текстуры - PullRequest
       53

прозрачность текстуры

1 голос
/ 01 апреля 2012

У меня возникла проблема с прозрачностью текстур, надеюсь, вы поможете.

Подробности:

  • XNA 4.0
  • Источник текстуры - BMP,что я делаю прозрачным с помощью кода:

    public void Feketealapú(string Azonosító)
    {
      //textúra megállapítása
      Texture2D Textúra = Textúrák[TextúraSzáma(Azonosító)];
    
      //adatok lekérése
      Color[] buffer = new Color[Textúra.Width * Textúra.Height];
      Textúra.GetData<Color>(buffer);
    
      //adatok módosítása
      for (int i = 0; i < buffer.Length; i++)
      {
        Color szín = buffer[i];
        szín.A = ((byte)((szín.R + szín.B + szín.G) / 3));
        buffer[i] = szín;
      }
    
      //adatok visszaírása
      Textúra.SetData<Color>(buffer);
    }
    
  • Я использую следующее, прежде чем начать рисовать 3D-вещи:

    public void Rajzolj()
    {
      GStatic.Játék.GrafikaiCsatorna.BlendState = BlendState.AlphaBlend;
      GStatic.Játék.GrafikaiCsatorna.DepthStencilState = DepthStencilState.Default;
      GStatic.Játék.GrafikaiCsatorna.RasterizerState = RasterizerState.CullCounterClockwise;
      GStatic.Játék.GrafikaiCsatorna.SamplerStates[0] = SamplerState.LinearWrap;
    

    .. и т. д.

  • Если я использую BlendState.Opaque, у меня нет прозрачных текстур.

  • У меня возникают следующие проблемы: http://youtu.be/ZiPzyk7AWu8

  • Редактировать: Немного подробнее о проблеме: проблема с прозрачной текстурой, которая имитирует эффект огня.Огонь из нескольких прямоугольников с этими прозрачными текстурами.Если я вижу огонь под углом, я должен видеть прямоугольник другого эффекта огня через прозрачную текстуру, которая также является прозрачной.Проблема в том, что вместо этого вместо текстуры я вижу текстуру пола .

Так кто-нибудь может мне немного помочь?

Заранее спасибо: Петер

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

Не берите в голову, я не думаю, что прозрачность - проблема. Я думаю, что то, что происходит, - это первое, что в Z-Buffer - это ничья, и больше ничего за этим не стоит.

http://blogs.msdn.com/b/shawnhar/archive/2009/02/18/depth-sorting-alpha-blended-objects.aspx

Наиболее важной частью является то, где он указывает, как лучше упорядочить вашу сцену и манипулировать с DepthBuffer.

  1. Установите для DepthBufferEnable и DepthBufferWriteEnable значение true
  2. Нарисуйте всю непрозрачную геометрию
  3. Оставьте для DepthBufferEnable значение true, но для DepthBufferWriteEnable установите значение false
  4. Сортировка альфа-смешанных объектов по расстоянию от камеры, затем отрисовка их по порядку сзади вперед
0 голосов
/ 03 апреля 2012

Это не проблема прозрачности или проблема заказа, которую вы можете решить.

Характер вашего макета состоит в том, что все 4 квада перекрывают друг друга, так что каждый квад должен находиться как перед, так и позади другого квада одновременно.

Таким образом, установка порядка прорисовки не поможет, потому что половина четырехугольника А должна быть прорисована до четырехугольника В, а другая половина четырехугольника А должна быть прорисована после четырехугольника Б.

Может быть немного лучше, если вы разделите его на 8 четырехугольников, которые все встречаются посередине, и сортируете / рисуете по глубине от камеры. Но если вы пойдете по этому маршруту, 3 квадов может быть достаточно.

...