|
21.11.2006, 16:57 | #1 |
MCTS
|
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 |
MCTS
|
не обращайте внимания пока на
// устанавливаем формат пиксела потом добавлю |
|
21.11.2006, 17:42 | #3 |
Участник
|
Так неправильно
Цитата:
4 || 32 || 1
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
21.11.2006, 17:54 | #4 |
Участник
|
Да фигня это всё, не работает ничего. Чёрный экран и всё.
А ещё попробуйте линию нарисовать, в каком формате отправлять координаты так и не разобрался . . . |
|
22.11.2006, 13:01 | #5 |
MCTS
|
так не работает это потому, что нужно вывод то на экран еще сделать, а тут только подготовительные операции. Пока что нужно описать один из классов библиотеки glu32.dll, а затем вызывать функцию вывода объекта. Насчет рисования линии, координаты можно отправлять в любом формате, это зависит от того какую функцию Вы будете использовать. Обычно я использовал тип float, в Аксапте по видимому это тип Double, то есть функция будет описываться с параметрами ExtTypes:ouble
|
|
22.11.2006, 13:04 | #6 |
MCTS
|
AndyD, спасибо за поправку, это я пока привыкаю к X++ )
|
|
22.11.2006, 15:04 | #7 |
Участник
|
Тогда уж лучше всё в класс запихивать с самого начала.
А зачем оно вам - opengl - в Аxапте? Типа отчёт в 3d? |
|
22.11.2006, 15:45 | #8 |
Участник
|
Ну как тебе сказать Вот я раньше в недвижимости работал, там доходило до вставки роликов для демонстрации домов, участков, а как было бы просто если б вместо ролика на 100мб просто загружалась сцена весом ну скажем в два мегабайта, при чём степень свободы на сколько увеличивается
|
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
23.11.2006, 14:38 | #9 |
Пенсионер
|
Цитата:
Сообщение от Dronas
Ну как тебе сказать Вот я раньше в недвижимости работал, там доходило до вставки роликов для демонстрации домов, участков, а как было бы просто если б вместо ролика на 100мб просто загружалась сцена весом ну скажем в два мегабайта, при чём степень свободы на сколько увеличивается
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
23.11.2006, 14:44 | #10 |
Участник
|
|
|
23.11.2006, 14:50 | #11 |
Пенсионер
|
Правильно сдается, но этот активчик, бесплатная примочка к IE насколько мне помнится...
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
22.11.2006, 19:15 | #12 |
Участник
|
А может какой CAD-activex использовать?
Помоему естьмнго компонентов именно для такой задачи! |
|
23.11.2006, 12:26 | #13 |
Участник
|
|
|
22.11.2006, 19:40 | #14 |
MCTS
|
Delfins, Ваше предложение не является решением проблемы. Какой толк от такого компилятора (...или интерпретатора), если его нельзя использовать в полной мере (я имею ввиду программирование).... |
|
04.12.2006, 08:55 | #15 |
Участник
|
Цитата:
Сообщение от Eldar9x
Какой толк от такого компилятора (...или интерпретатора), если его нельзя использовать в полной мере (я имею ввиду программирование)....
|
|
22.11.2006, 19:41 | #16 |
MCTS
|
Delfins, Ваше предложение не является решением проблемы. Какой толк от такого компилятора (...или интерпретатора), если его нельзя использовать в полной мере (я имею ввиду программирование)....в |
|
23.11.2006, 14:19 | #18 |
Участник
|
|
|
23.11.2006, 13:18 | #19 |
MCTS
|
Аргументаы функции
- решение проблемы с неверным вызовом функции 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 |
Участник
|
Цитата:
Сообщение от Eldar9x
Аргументаы функции
- решение проблемы с неверным вызовом функции glClearColor() |
|