AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.11.2006, 16:57   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
OpenGL (вот что есть на данный момент)
Код:
static void Job5(Args _args)
{
    HWND mainWindow;
    HWND dc;
    HWND hrc;
    // Загрузка библиотек
    DLL  opengl32 = new DLL("opengl32.dll");
    DLL  glu32    = new DLL("glu32.dll");
    DLL  gdi32    = new DLL("gdi32.dll");
    //
 
    // Получение точек входа функций
    DLLFunction opengl32_wglCreateContext = new DLLFunction(opengl32, "wglCreateContext");
    DLLFunction opengl32_wglMakeCurrent   = new DLLFunction(opengl32, "wglMakeCurrent");
    DLLFunction opengl32_glEnable         = new DLLFunction(opengl32, "glEnable");
    DLLFunction gdi32_ChoosePixelFormat   = new DLLFunction(gdi32,    "ChoosePixelFormat");
    DLLFunction gdi32_SetPixelFormat      = new DLLFunction(gdi32, "SetPixelFormat");
    DLLFunction opengl32_glMatrixMode     = new DLLFunction(opengl32, "glMatrixMode");
    DLLFunction opengl32_glLoadIdentity   = new DLLFunction(opengl32, "glLoadIdentity");
    DLLFunction glu32_gluPerspective      = new DLLFunction(glu32, "gluPerspective");
    //
    Binary  pixelFormatDescriptor = new Binary(40);
    void setDCPixelFormat()
    {
        int nPixelFormat;
        ;
        pixelFormatDescriptor.Word(0, 40);                // nSize
        pixelFormatDescriptor.Word(2, 1);                 // nVersion
        pixelFormatDescriptor.dWord(4, 4 | 32 | 1);     // dwFlags
        pixelFormatDescriptor.byte(8, 0);                 // iPixelType
        pixelFormatDescriptor.byte(9, 24);                // cColorBits
        pixelFormatDescriptor.byte(10, 0);  // cRedBits;
        pixelFormatDescriptor.byte(11, 0);  // cRedShift;
        pixelFormatDescriptor.byte(12, 0);  // cGreenBits;
        pixelFormatDescriptor.byte(13, 0);  // cGreenShift;
        pixelFormatDescriptor.byte(14, 0);  // cBlueBits;
        pixelFormatDescriptor.byte(15, 0);  // cBlueShift;
        pixelFormatDescriptor.byte(16, 0);  // cAlphaBits;
        pixelFormatDescriptor.byte(17, 0);  // cAlphaShift;
        pixelFormatDescriptor.byte(18, 0);  // cAccumBits;
        pixelFormatDescriptor.byte(19, 0);  // cAccumRedBits;
        pixelFormatDescriptor.byte(20, 0);  // cAccumGreenBits;
        pixelFormatDescriptor.byte(21, 0);  // cAccumBlueBits;
        pixelFormatDescriptor.byte(22, 0);  // cAccumAlphaBits;
        pixelFormatDescriptor.byte(23, 32); // cDepthBits;
        pixelFormatDescriptor.byte(24, 0);  // cStencilBits;
        pixelFormatDescriptor.byte(25, 0);  // cAuxBuffers;
        pixelFormatDescriptor.byte(26, 0);  // iLayerType;
        pixelFormatDescriptor.byte(27, 0);  // bReserved;
        pixelFormatDescriptor.dWord(28, 0); // dwLayerMask;
        pixelFormatDescriptor.dWord(32, 0); // dwVisibleMask;
        pixelFormatDescriptor.dWord(36, 0); // dwDamageMask
        nPixelFormat = gdi32_ChoosePixelFormat.call(dc, pixelFormatDescriptor);
        gdi32_SetPixelFormat.call(dc, nPixelFormat, pixelFormatDescriptor);
 
    }
    void initializeRC()
    {
        opengl32_glEnable.call(2929);
        opengl32_glEnable.call(2896);
        opengl32_glEnable.call(16384);
    }
 
    void repaint()
    {
    }
    ;
    // Установка функций
    opengl32_wglCreateContext.returns(ExtTypes::DWord);
    opengl32_wglCreateContext.arg(ExtTypes::DWord);
    opengl32_wglMakeCurrent.returns(ExtTypes::DWord);
    opengl32_wglMakeCurrent.arg(ExtTypes::DWord, ExtTypes::DWord);
    opengl32_glEnable.returns(ExtTypes::void);
    opengl32_glEnable.arg(ExtTypes::DWord);
    gdi32_ChoosePixelFormat.returns(ExtTypes::DWord);
    gdi32_ChoosePixelFormat.arg(ExtTypes::DWord, ExtTypes::Pointer);
    gdi32_SetPixelFormat.returns(ExtTypes::DWord);
    gdi32_SetPixelFormat.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer);
    opengl32_glMatrixMode.returns(ExtTypes::void);
    opengl32_glMatrixMode.arg(ExtTypes::DWord);
    opengl32_glLoadIdentity.returns(ExtTypes::void);
    opengl32_glLoadIdentity.arg();       // возможно нужно добавить
    glu32_gluPerspective.returns(ExtTypes::void);
    glu32_gluPerspective.arg(ExtTypes::Double, ExtTypes::Double, ExtTypes::Double, ExtTypes::Double);
    //
    mainWindow = infolog.hWnd();
    dc         = WinAPI::getWindowDC(mainWindow);
    setDCPixelFormat();
    hrc = opengl32_wglCreateContext.call(dc);
    opengl32_wglMakeCurrent.call(dc, hrc);
    initializeRC();
    opengl32_glMatrixMode.call(5889);
    opengl32_glLoadIdentity.call();
    glu32_gluPerspective.call(10.0, 1.0, 1.0, 10.0);
 
 
 
    info(mainWindow?"mainWindow = OK":"mainWindow = Error");
    info(dc?"dc = OK":"dc = Error");
    info(opengl32?"openGL = OK": "opengL = Error");
    info(glu32?"glu32 = OK": "glu32 = Error");
    info(gdi32?"gdi32 = OK": "gdi32 = Error");
    info(opengl32_wglCreateContext?"opengl32_wglCreateContext = OK":"opengl32_wglCreateContext = ERROR");
    info(opengl32_wglMakeCurrent?"opengl32_wglMakeCurrent = OK": "opengl32_wglMakeCurrent = ERROR");
    info(opengl32_glEnable?"opengl32_glEnable = OK": "opengl32_glEnable = ERROR");
    info(gdi32_ChoosePixelFormat?"gdi32_ChoosePixelFormat = OK":"gdi32_ChoosePixelFormat = OK");
    info(gdi32_SetPixelFormat?"gdi32_SetPixelFormat = OK":"gdi32_SetPixelFormat = ERROR");
    info(opengl32_glMatrixMode?"opengl32_glMatrixMode = OK":"opengl32_glMatrixMode = ERROR");
    info(glu32_gluPerspective?"glu32_gluPerspective = OK":"glu32_gluPerspective = ERROR");
    // устанавливаем формат пиксела
    WinAPI::releaseDC(mainWindow, dc);
}
нужно создать еще классы для объектов библиотеки, но пока нехватает времени....

Последний раз редактировалось Eldar9x; 22.11.2006 в 13:08.
За это сообщение автора поблагодарили: PavelX (1).
Старый 21.11.2006, 16:58   #2  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
не обращайте внимания пока на

// устанавливаем формат пиксела

потом добавлю
Старый 21.11.2006, 17:42   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Так неправильно
Цитата:
4 || 32 || 1
для побитовых операций используются операторы | и & (одиночные). А у вас в результате получается единица
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 21.11.2006, 17:54   #4  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Да фигня это всё, не работает ничего. Чёрный экран и всё.

А ещё попробуйте линию нарисовать, в каком формате отправлять координаты так и не разобрался . . .
Старый 22.11.2006, 13:01   #5  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
так не работает это потому, что нужно вывод то на экран еще сделать, а тут только подготовительные операции. Пока что нужно описать один из классов библиотеки glu32.dll, а затем вызывать функцию вывода объекта. Насчет рисования линии, координаты можно отправлять в любом формате, это зависит от того какую функцию Вы будете использовать. Обычно я использовал тип float, в Аксапте по видимому это тип Double, то есть функция будет описываться с параметрами ExtTypes:ouble
Старый 22.11.2006, 13:04   #6  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
AndyD, спасибо за поправку, это я пока привыкаю к X++ )
Старый 22.11.2006, 15:04   #7  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Тогда уж лучше всё в класс запихивать с самого начала.
А зачем оно вам - opengl - в Аxапте? Типа отчёт в 3d?
Старый 22.11.2006, 15:45   #8  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Цитата:
Сообщение от Delfins Посмотреть сообщение
А зачем оно вам - opengl - в Аxапте? Типа отчёт в 3d?
Ну как тебе сказать Вот я раньше в недвижимости работал, там доходило до вставки роликов для демонстрации домов, участков, а как было бы просто если б вместо ролика на 100мб просто загружалась сцена весом ну скажем в два мегабайта, при чём степень свободы на сколько увеличивается
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 23.11.2006, 14:38   #9  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от Dronas Посмотреть сообщение
Ну как тебе сказать Вот я раньше в недвижимости работал, там доходило до вставки роликов для демонстрации домов, участков, а как было бы просто если б вместо ролика на 100мб просто загружалась сцена весом ну скажем в два мегабайта, при чём степень свободы на сколько увеличивается
где-то в недрах форума, лежит мой маленький проектик с баловством на тему VRML может это подойдет?
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 23.11.2006, 14:44   #10  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Цитата:
Сообщение от blokva Посмотреть сообщение
где-то в недрах форума, лежит мой маленький проектик с баловством на тему VRML может это подойдет?

Сдаётся мне, что VRML тоже ActiveX или что-то подобное . . .
Старый 23.11.2006, 14:50   #11  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от Dronas Посмотреть сообщение
Сдаётся мне, что VRML тоже ActiveX или что-то подобное . . .
Правильно сдается, но этот активчик, бесплатная примочка к IE насколько мне помнится...
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 22.11.2006, 19:15   #12  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
А может какой CAD-activex использовать?
Помоему естьмнго компонентов именно для такой задачи!
Старый 23.11.2006, 12:26   #13  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Цитата:
Сообщение от Delfins Посмотреть сообщение
А может какой CAD-activex использовать?
Помоему естьмнго компонентов именно для такой задачи!
Вот именно потому, что это ActiveX и не хочется, его ж надо будет на всех машинах регистрить . . .
Старый 22.11.2006, 19:40   #14  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань

Delfins, Ваше предложение не является решением проблемы. Какой толк от такого компилятора (...или интерпретатора), если его нельзя использовать в полной мере (я имею ввиду программирование)....
Старый 04.12.2006, 08:55   #15  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
AndyD, спасибо за поправку, это я пока привыкаю к X++ )
Цитата:
Сообщение от Eldar9x
Какой толк от такого компилятора (...или интерпретатора), если его нельзя использовать в полной мере (я имею ввиду программирование)....
Интересно, как руководство Ваше смотрит на Ваше привыкание к языку, судя по всему занять Вас больше не чем кроме этих игр разума.
Старый 22.11.2006, 19:41   #16  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань

Delfins, Ваше предложение не является решением проблемы. Какой толк от такого компилятора (...или интерпретатора), если его нельзя использовать в полной мере (я имею ввиду программирование)....в
Старый 23.11.2006, 14:19   #18  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Цитата:
Сообщение от belugin Посмотреть сообщение
Замечательно, а как быть с правами?
Старый 23.11.2006, 13:18   #19  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Аргументаы функции
- решение проблемы с неверным вызовом функции glClearColor()

Цитата:
DLLFunction glClearColor = new DLLFunction(opengl32, "glClearColor");COMVariant parm1 = new COMVariant();COMVariant parm2 = new COMVariant();COMVariant parm3 = new COMVariant();COMVariant parm4 = new COMVariant();;glClearColor.returns(ExtTypes::void);glClearColor.arg(ExtTypes:Word, ExtTypes:Word, ExtTypes:Word, ExtTypes:Word);parm1.float(1.0);parm2.float(0.0);parm3.float(0.0);parm4.float(1.0);glClearColor.call(parm1.int(), parm2.int(), parm3.int(), parm4.int());
Старый 23.11.2006, 14:27   #20  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Аргументаы функции
- решение проблемы с неверным вызовом функции glClearColor()
Вот интересно, прежде чем запостить попробовал? А потом, нафига туда int-то передавать?
Теги
opengl, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить имена полей, которые есть у таблицы? 3oppo DAX: Программирование 2 22.12.2006 14:30
ALEG: Software-as-a-service есть ли у них будущее в России Blog bot DAX Blogs 0 28.10.2006 16:10
Fullscope - Процессное производство для Axapta есть. mazzy DAX: Функционал 33 28.08.2006 13:22
Есть ли возможность вызывать код с вышележащих слоев ? FishLog DAX: Программирование 5 07.09.2004 17:24
Что есть для Inernet-а ? bucken DAX: Функционал 6 29.10.2003 12:31

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:40.