Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно пользоватся GLU_TESS_COMBINE 
:(
    Опции темы
inkognitum
Дата 16.2.2009, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.8.2006
Где: г. Набережные Чел ны

Репутация: нет
Всего: 1



Добрый день.

Помогите пожалуйста с GLU_TESS_COMBINE, мне надо закрасить полигон у которого линии пересекаются.
Пишу на C#, использую Tao.
Вот как делаю:

Код

private void UserControl1_Load(object sender, EventArgs e)
        {
            this.InitializeContexts();
            this.SwapBuffers();


            Gl.glClearColor(255f, 255f, 0f, 0f);
            ClearControl();
        }

        private void UserControl1_SizeChanged(object sender, EventArgs e)
        {
            ClearControl();
        }

        public void ClearControl()
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

            Gl.glViewport(0, 0, this.Width, this.Height);
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            Glu.gluOrtho2D(0, this.Width, 0, this.Height);
        }

        void MyBegin(int mode) 
        {
            Gl.glBegin(mode);
        }

        void MyEnd() 
        {
            Gl.glEnd();
        }

        /*void MyVertex3dv(double[] v)
        {
            Gl.glVertex3dv(v);
            //Gl.glVertex2dv(v);
        }*/

        void MyVertex2f(double[] db)
        {
            Gl.glVertex2d(db[0], 0);
        }

        private void MyVertex3dv(System.IntPtr vertexData)
        {
            double[] v = new double[3];
            System.Runtime.InteropServices.Marshal.Copy(vertexData, v, 0, 3);
            Gl.glVertex3dv(v);
        }
        
public void DrawPolygon(Pen pen, PointF[] pt)
        {
            Glu.GLUtesselator t = Glu.gluNewTess();

            Glu.gluTessProperty(t, Glu.GLU_TESS_WINDING_RULE, Glu.GLU_TESS_WINDING_POSITIVE);
            Glu.gluTessProperty(t, Glu.GLU_TESS_WINDING_RULE, Glu.GLU_TESS_WINDING_NONZERO); 
            Glu.gluTessProperty(t, Glu.GLU_TESS_BOUNDARY_ONLY, Gl.GL_FALSE); // закрашивать полигон
            
           
            Glu.gluTessCallback(t, Glu.GLU_TESS_BEGIN, new Glu.TessBeginCallback(MyBegin)); 
            Glu.gluTessCallback(t, Glu.GLU_TESS_END, new Glu.TessEndCallback(MyEnd));  
            Glu.gluTessCallback(t, Glu.GLU_TESS_VERTEX, new Glu.TessVertexCallback(MyVertex3dv)); 
            Glu.gluTessCallback(t, Glu.GLU_TESS_COMBINE, new Glu.TessCombineCallback1(Combine));

            
            Glu.gluTessNormal(t, 0, 0, 1);
            Glu.gluTessBeginPolygon(t, IntPtr.Zero);
            Glu.gluTessBeginContour(t);

            for (int i = 0; i <= pt.Length - 1; i++)
            {
                double[] dbPoint = new double[3];
                dbPoint[0] = pt[i].X;
                dbPoint[1] = this.Height - pt[i].Y;
                dbPoint[2] = 0;
                Glu.gluTessVertex(t, dbPoint, dbPoint); 
            }
            Glu.gluTessEndContour(t); 
            Glu.gluTessEndPolygon(t);
            Glu.gluDeleteTess(t); 
        }

        private static void Combine(double[] coordinates, double[] vertexData, float[] weight, double[] dataOut)
        {
            double[] vertex = new double[6];
            int i;

            vertex[0] = coordinates[0];
            vertex[1] = coordinates[1];
            vertex[2] = coordinates[2];

            for (i = 3; i < 5; i++)
            {
                vertex[i] = weight[0] * vertexData[i] + weight[1] * vertexData[i] + weight[2] * vertexData[i] + weight[3] * vertexData[i];
            }

            dataOut = vertex;



выдает ошибку на строке:
Код

 Glu.gluTessCallback(t, Glu.GLU_TESS_COMBINE, new Glu.TessCombineCallback1(Combine));


текст ошибки:
Array size control parameter must be an integral type.

может что упустил?


--------------------
"Убить всех людей!" (с) Bender
PM MAIL ICQ Skype   Вверх
arilou
Дата 17.2.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Цитата(inkognitum @  16.2.2009,  21:23 Найти цитируемый пост)
может что упустил?


Цитата

The combine callback is called to create a new vertex when the tessellation detects an intersection, or wishes to merge features. The function takes four arguments: an array of three elements each of type Double, an array of four pointers, an array of four elements each of type Single, and a pointer to a pointer. The delegate prototype for this callback is Glu.TessCombineCallback. 


А у вас new Glu.TessCombineCallback1(Combine)

м.б. в этом проблема.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
inkognitum
Дата 17.2.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.8.2006
Где: г. Набережные Чел ны

Репутация: нет
Всего: 1



Цитата(arilou @ 17.2.2009,  00:09)
Цитата(inkognitum @  16.2.2009,  21:23 Найти цитируемый пост)
может что упустил?


Цитата

The combine callback is called to create a new vertex when the tessellation detects an intersection, or wishes to merge features. The function takes four arguments: an array of three elements each of type Double, an array of four pointers, an array of four elements each of type Single, and a pointer to a pointer. The delegate prototype for this callback is Glu.TessCombineCallback. 


А у вас new Glu.TessCombineCallback1(Combine)

м.б. в этом проблема.

Добрый день.
Нет там есть две перезагруженые функции.
Glu.TessCombineCallback - другие входные параметры
Glu.TessCombineCallback1 - классический входные параметры.
--------------------
"Убить всех людей!" (с) Bender
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.1770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.