Проблема с GL / LineRenderer[Решено]

Общие вопросы о Unity3D

Проблема с GL / LineRenderer[Решено]

Сообщение Maxim 21 дек 2011, 09:48

Проблема заключается в том, что когда я рисую линию вот этим кодом:

Синтаксис:
Используется csharp
public static void CreateLineMaterial() //Параметры материала линии (взято из стандартной справки)
        {
        if( !lineMaterial )
                {
                lineMaterial = new Material( "Shader \"Lines/Colored Blended\" {" +
                "SubShader { Pass { " +
                    "    Blend SrcAlpha OneMinusSrcAlpha " +
                "    ZWrite Off Cull Off Fog { Mode Off } " +
                "    BindChannels {" +
                "      Bind \"vertex\", vertex Bind \"color\", color }" +
                "} } }" );
                lineMaterial.hideFlags = HideFlags.HideAndDontSave;
                lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;
        }
        }

public static void DrawLine(Vector3 p1, Vector3 p2, Color colr)
        {
                CreateLineMaterial();
                lineMaterial.SetPass( 0 );
                GL.Begin( GL.LINES );
                GL.Color(colr);
                GL.Vertex(p1);
                GL.Vertex(p2);
                GL.End();
        }
 


... то линия рисуется вполне нормально (нужным цветом по нужным координатам), но как только я начинаю передвигать камеру неважно в каком направлении, то вокруг это линии (в некоторых рандомных местах на расстоянии 1-2 пикселя от лини) начинают мерцать белые полоски. После того как камера останавливается, то о5 все ОК. Подскажите пожалуйсто как убрать это мерцание? Заранее всем спасибо.
Последний раз редактировалось Maxim 24 дек 2011, 09:10, всего редактировалось 4 раз(а).
Maxim
UNIт
 
Сообщения: 70
Зарегистрирован: 22 дек 2009, 17:40
Откуда: г. Пермь

Re: Проблема с GL

Сообщение Maxim 22 дек 2011, 15:44

Проблема к сожалению не исчезла. Сейчас использую не GL а LineRenderer. При движении камеры остается белая линия как будто бы с прошлого кадра как тень. В зависимости от того куда движется камера, эта тень от линии мерцает с разных сторон. Как только камера остановилась то мерцание исчезает( такое ощущение, что не исчезает, а просто текущее положение линии перекрывает это мерцание). ПОМОГИТЕ ПОЖАЛУЙСТА !!!! Уже запарился искать причину((((
Maxim
UNIт
 
Сообщения: 70
Зарегистрирован: 22 дек 2009, 17:40
Откуда: г. Пермь

Re: Проблема с GL / LineRenderer

Сообщение Woolf 22 дек 2011, 16:23

Стесняюсь спросить, а вы glClear делаете перед началом отрисовки? )
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Проблема с GL / LineRenderer

Сообщение Maxim 22 дек 2011, 16:33

Нет, что это такое?? как быть??? ААААААА!!!! Расскажи пожалуйсто.
Maxim
UNIт
 
Сообщения: 70
Зарегистрирован: 22 дек 2009, 17:40
Откуда: г. Пермь

Re: Проблема с GL / LineRenderer

Сообщение Woolf 22 дек 2011, 17:05

Maxim писал(а):Нет, что это такое?? как быть??? ААААААА!!!! Расскажи пожалуйсто.


http://unity3d.com/support/documentatio ... Clear.html
Очищает все буферы от информации с прошлых кадров.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Проблема с GL / LineRenderer

Сообщение Maxim 23 дек 2011, 07:01

Подскажите пожалуйста, где следует вызывать GL.Clear() и с какими флагами?
P.S. Всем спасибо за помощь.
Maxim
UNIт
 
Сообщения: 70
Зарегистрирован: 22 дек 2009, 17:40
Откуда: г. Пермь

Re: Проблема с GL / LineRenderer

Сообщение Maxim 23 дек 2011, 07:23

Вот код:
Синтаксис:
Используется csharp
public class Render : MonoBehaviour
{
        public delegate void render_delegate();
        public event render_delegate Rendering;

        void OnPostRender()
        {
                if(Rendering != null)
                {
                        GL.Clear(true, false, Color.blue);
                        GL.PushMatrix();
                        Rendering();
                        GL.PopMatrix();
                }
        }
}
 


Rendering - event , генерируемый в OnPostRender(), сам скрипт висит на камере. На этот эвент подписан класс, рисующий линию. Мерцание осталось прежним.
Maxim
UNIт
 
Сообщения: 70
Зарегистрирован: 22 дек 2009, 17:40
Откуда: г. Пермь

Re: Проблема с GL / LineRenderer

Сообщение Woolf 23 дек 2011, 14:51

Maxim писал(а):Вот код:
Синтаксис:
Используется csharp
public class Render : MonoBehaviour
{
        public delegate void render_delegate();
        public event render_delegate Rendering;

        void OnPostRender()
        {
                if(Rendering != null)
                {
                        GL.Clear(true, false, Color.blue);
                        GL.PushMatrix();
                        Rendering();
                        GL.PopMatrix();
                }
        }
}
 


Rendering - event , генерируемый в OnPostRender(), сам скрипт висит на камере. На этот эвент подписан класс, рисующий линию. Мерцание осталось прежним.


GL.Clear(true, true, Color.blue); - вам же надо очистить не только буфер цветов, но и буфер глубины.

Ps а зачем такие сложности с делегированием функции рендера?
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Проблема с GL / LineRenderer

Сообщение Maxim 24 дек 2011, 09:13

Woolf писал(а):
Maxim писал(а):Вот код:
Синтаксис:
Используется csharp
public class Render : MonoBehaviour
{
        public delegate void render_delegate();
        public event render_delegate Rendering;

        void OnPostRender()
        {
                if(Rendering != null)
                {
                        GL.Clear(true, false, Color.blue);
                        GL.PushMatrix();
                        Rendering();
                        GL.PopMatrix();
                }
        }
}
 


Rendering - event , генерируемый в OnPostRender(), сам скрипт висит на камере. На этот эвент подписан класс, рисующий линию. Мерцание осталось прежним.


GL.Clear(true, true, Color.blue); - вам же надо очистить не только буфер цветов, но и буфер глубины.

Ps а зачем такие сложности с делегированием функции рендера?


Проблема решилась вот таким образом:
Синтаксис:
Используется csharp
public class Render : MonoBehaviour
{
        public delegate void render_delegate();
        public event render_delegate Rendering;
       
        void OnPreRender()
        {
                GL.Clear(true, true, Color.blue);
        }
       
        void OnPostRender()
        {
                if(Rendering != null)
                {
                        GL.PushMatrix();
                        Rendering();
                        GL.PopMatrix();
                }
        }
}
 


У меня как раз буфер цветов не очищался, а буфер глубины как раз очищался. Вот.
P.S.Woolf Спасибо за GL.Clear. Не знал про него.
Maxim
UNIт
 
Сообщения: 70
Зарегистрирован: 22 дек 2009, 17:40
Откуда: г. Пермь

Re: Проблема с GL / LineRenderer[Решено]

Сообщение Woolf 24 дек 2011, 17:11

Вообще, про glClear это у вас спросил, чтобы вы общие принципы поняли ) А так, то-же самое можно было бы сделать установив нужные значения в параметре камеры ClearFlags ))
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8