Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закраская невып-ого полигона с пом-ю TESS в OpenGL 
:(
    Опции темы
Afrodiziac
Дата 26.12.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

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



Общая схема рисования невыпуклого полигона, как говорит MSDN такова: 

gluTessCallback(tess, GLU_TESS_BEGIN, glBegin);  
gluTessCallback(tess, GLU_TESS_VERTEX, glVertex3dv);  
gluTessCallback(tess, GLU_TESS_END, glEnd);  
gluTessBeginPolygon(tess, NULL); 
    gluTessBeginContour(tess); 
        gluTessVertex(tess, v, v); 
        . .  
    gluTessEndContour(tess); 
gluTessEndPolygon(tess); 

Я попытался приспособить этот код под C# в итоге получил следующее:

Код

..............
          GLUtesselator tess = GL.gluNewTess();

          GL.gluTessCallback(tess, GL.GLU_TESS_BEGIN,  GL.glBegin);
          GL.gluTessCallback(tess, GL.GLU_TESS_VERTEX, GL.glVertex3dv);
          GL.gluTessCallback(tess, GL.GLU_TESS_END, GL.glEnd);

          GL.gluTessBeginPolygon(tess, IntPtr.Zero);
          GL.gluTessBeginContour(tess);

          for (int j = 0; j < Массив_Упорядоченных_Точек_Разреза[i].Точки.Length; j++)
                  Вершина_OpenGL(tess, Массив_Упорядоченных_Точек_Разреза[i].Точки[j]);
            
          GL.gluTessEndContour(tess);
          GL.gluTessEndPolygon(tess);
          GL.glEnd();
...............

    private void Вершина_OpenGL(GLUtesselator tobj, Точка_3Д точка)
    {
      double[] точ = new double[3];
      точ[0] = точка.X;
      точ[1] = точка.Y;
      точ[2] = точка.Z;
      GL.gluTessVertex(tobj, точ, точ);
    }


То есть Массив_Упорядоченных_Точек_Разреза содержит i полигонов, каждому из которых соответствует j точек, которые я последовательно пытаюсь пихать в полигон...

В результате получаю следующие ошибки:

GL.gluTessCallback(tess, GL.GLU_TESS_BEGIN,  GL.glBegin);   -  Error    1    The call is ambiguous between the following methods or properties: 'CsGL.OpenGL.GLU.gluTessCallback(CsGL.OpenGL.GLUtesselator, uint, CsGL.OpenGL.GLUtessErrorProc)' and 'CsGL.OpenGL.GLU.gluTessCallback(CsGL.OpenGL.GLUtesselator, uint, CsGL.OpenGL.GLUtessBeginProc)'

GL.gluTessCallback(tess, GL.GLU_TESS_VERTEX, GL.glVertex3dv);   -  Error    2    The best overloaded method match for 'CsGL.OpenGL.GLU.gluTessCallback(CsGL.OpenGL.GLUtesselator, uint, void*)' has some invalid arguments

GL.glVertex3dv - Error    3    Argument '3': cannot convert from 'method group' to 'void*'

GL.gluTessVertex(tobj, точ, точ);   -  Error    4    The best overloaded method match for 'CsGL.OpenGL.GL.gluTessVertex(CsGL.OpenGL.GLUtesselator, double[], System.IntPtr)' has some invalid arguments

точ (на второй)  -   Error    5    Argument '3': cannot convert from 'double[]' to 'System.IntPtr'


Я так понимаю дело в указателях... Скажите пожалуйста как можно решить такую проблему?..

я нашел пример тут но он тоже не работает...

Заранее спасибо.
PM MAIL   Вверх
mr.DUDA
Дата 26.12.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

Репутация: 110
Всего: 232



Пишете на C# ? Пример с koders.com должен работать. Вместо указателей используем делегаты.


--------------------
user posted image
PM MAIL WWW   Вверх
Afrodiziac
Дата 26.12.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

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



Цитата(mr.DUDA @ 26.12.2007,  18:37)
Пишете на C# ? Пример с koders.com должен работать. Вместо указателей используем делегаты.

Можно по-подробнее про делегаты?.. пример с кодерс.ком но судя по всему для mono а у меня микрософстский вариант...
PM MAIL   Вверх
Afrodiziac
Дата 27.12.2007, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

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



Я вообще не понимаю как применять делегаты в моем случае... 
Я же привел конкретный код... функция требует среди прочих параметов указатель на другую void функцию... Такого в C# вообще насколько я знаю организовать нельзя...
PM MAIL   Вверх
Afrodiziac
Дата 27.12.2007, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

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



Пишу так:

Код

delegate void MyBegin(uint mode);
.......................

          MyBegin myBegin = new MyBegin(GL.glBegin);

          GL.gluTessCallback(tess, GL.GLU_TESS_BEGIN, myBegin);


на последней строчек на myBegin получаю эррор: Argument '3': cannot convert from 'YAGUDINIGS3.Поверхность.MyBegin' to 'void*'
PM MAIL   Вверх
mr.DUDA
Дата 27.12.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

Репутация: 110
Всего: 232



Странно вообще-то, по идее Tao не должна использовать указатели, хоть в mono, хоть под win.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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