OberonCore https://forum.oberoncore.ru/ |
|
Работа с OpenGL https://forum.oberoncore.ru/viewtopic.php?f=24&t=825 |
Страница 1 из 3 |
Автор: | prokopiy [ Понедельник, 14 Январь, 2008 11:50 ] |
Заголовок сообщения: | Работа с OpenGL |
Предлагаю обсудить изпользование OpenGL в BlackBox. |
Автор: | prokopiy [ Понедельник, 14 Январь, 2008 11:55 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Может у кого есть исходники как сделать Windows-приложение (.exe) используя модули WinApi и WinGL? |
Автор: | Илья Ермаков [ Понедельник, 14 Январь, 2008 12:54 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Есть пример с использованием GLUT - стандартной кроссплатформенной библиотеки создания Опенгль-окон. (в винде нужен glut.dll, есть на OpenGL.org, под Linux с Wine новых версий заработает сразу, там он уже есть). OpenGL-заголовки в примере не из WinOGL, а из подсистемы Ogl из коллекции http://www.zinnamturm.eu (там поудобней именование, лишний префикс gl убран, в Обероне он не нужен, т.к. модуль и так префиксуется). Заголовок GLUT перенесён с дельфовской версии. Программа рисует многоугольник, по клавишам-цифрам меняет "угольчатость", по Esc выходит. Писали с Евгением Темиргалеевым. Линкуется командером DevLinker.LinkExe SimpleApp.exe := National Kernel+ Math F3dSimpleApp$ Код: MODULE OglSimpleApp; IMPORT GL := OglOpenGL32, GLUT := OglGLUT, Math, Kernel, WinApi, S := SYSTEM; TYPE Triade = ARRAY 3 OF GL.Ubyte; VAR width, height: GL.Int; n, nn: INTEGER; colors: ARRAY 7 OF Triade; PROCEDURE [ccall] Display; VAR ox, oy, x, y, r: REAL; i: INTEGER; BEGIN ox := width / 2; oy := height / 2; r := MIN(width, height) / 2; GL.ClearColor(0, 0, 0, 1); GL.Clear(GL.GL_COLOR_BUFFER_BIT); GL.Begin(GL.GL_POLYGON); FOR i := 0 TO n - 1 DO GL.Color3ubv(colors[i MOD 7, 0]); x := ox + r * Math.Cos(i * 2 * Math.Pi() / n); y := oy + r * Math.Sin(i * 2 * Math.Pi() / n); GL.Vertex2f(SHORT(x), SHORT(y)) END; GL.End; GL.Finish END Display; PROCEDURE [ccall] Reshape (w, h: INTEGER); BEGIN width := w; height := h; GL.Viewport(0, 0, w, h); GL.MatrixMode(GL.GL_PROJECTION); GL.LoadIdentity; GL.Ortho(0, w, 0, h, -1.0, 1.0); GL.MatrixMode(GL.GL_MODELVIEW); GL.LoadIdentity END Reshape; PROCEDURE [ccall] Keyboard (key: SHORTCHAR; x, y: INTEGER); BEGIN CASE key OF | CHR(27): Kernel.Quit(0) | CHR(13): IF (nn >= 3) & (nn <= 360) & (nn # n) THEN n := nn; GLUT.PostRedisplay END; nn := 0 | '0'..'9': nn := nn * 10 + ORD(key) - ORD('0') ELSE END END Keyboard; PROCEDURE Main; VAR argc: INTEGER; argv: ARRAY 1 OF WinApi.PtrSTR; s: ARRAY 16 OF CHAR; wnd: INTEGER; BEGIN argc := 0; s := ""; argv[0] := S.VAL(WinApi.PtrSTR, S.ADR(s)); GLUT.Init(argc, argv); GLUT.InitDisplayMode(GLUT.RGB); GLUT.InitWindowSize(width, height); wnd := GLUT.CreateWindow("My beauty window"); GLUT.DisplayFunc(Display); GLUT.ReshapeFunc(Reshape); GLUT.KeyboardFunc(Keyboard); GLUT.MainLoop END Main; PROCEDURE PutTriade (r, g, b: SHORTINT; OUT t: Triade); BEGIN t[0] := SHORT(CHR(r)); t[1] := SHORT(CHR(g)); t[2] := SHORT(CHR(b)) END PutTriade; PROCEDURE InitColors; BEGIN PutTriade(255, 0, 255, colors[0]); PutTriade(0, 0, 255, colors[1]); PutTriade(0, 255, 255, colors[2]); PutTriade(0, 255, 0, colors[3]); PutTriade(255, 255, 0, colors[4]); PutTriade(255, 128, 0, colors[5]); PutTriade(255, 0, 0, colors[6]) END InitColors; BEGIN n := 3; width := 400; height := 300; InitColors; Main END OglSimpleApp. Код: MODULE OglGLUT['glut32'];
IMPORT GL := OglOpenGL32; CONST (* Display mode bit masks *) RGB* = {}; RGBA* = RGB; INDEX* = {0}; SINGLE* = {}; DOUBLE* = {1}; ACCUM* = {2}; ALPHA* = {3}; DEPTH* = {4}; STENCIL* = {5}; MULTISAMPLE* = {7}; STEREO* = {8}; LIMINANCE* = {9}; (* Mouse buttons *) LEFT_BUTTON* = 0; MIDDLE_BUTTON* = 1; RIGHT_BUTTON* = 2; (* Mouse button state *) DOWN* = 0; UP* = 1; (* function keys *) KEY_F1* = 1; KEY_F2* = 2; KEY_F3* = 3; KEY_F4* = 4; KEY_F5* = 5; KEY_F6* = 6; KEY_F7* = 7; KEY_F8* = 8; KEY_F9* = 9; KEY_F10* = 10; KEY_F11* = 11; KEY_F12* = 12; (* directional keys *) KEY_LEFT* = 100; KEY_UP* = 101; KEY_RIGHT* = 102; KEY_DOWN* = 103; KEY_PAGE_UP* = 104; KEY_PAGE_DOWN* = 105; KEY_HOME* = 106; KEY_END* = 107; KEY_INSERT* = 108; (* Entry/exit state *) LEFT* = 0; ENTERED* = 1; (* Menu usage state *) MENU_NOT_IN_USE* = 0; MENU_IN_USE* = 1; (* Visibility state *) NOT_VISIBLE* = 0; VISIBLE* = 1; (* Window status state *) HIDDEN* = 0; FULLY_RETAINED* = 1; PARTIALLY_RETAINED* = 2; FULLY_COVERED* = 3; (* Color index component selection values *) RED* = 0; GREEN* = 1; BLUE* = 2; (* Layers for use *) NORMAL* = 0; OVERLAY* = 1; (* Stroke font constants (use these in GLUT program) *) STROKE_ROMAN* = 0; STROKE_MONO_ROMAN* = 1; (* Bitmap font constants (use these in GLUT program) *) BITMAP_9_BY_15* = 2; BITMAP_8_BY_13* = 3; BITMAP_TIMES_ROMAN_10* = 4; BITMAP_TIMES_ROMAN_24* = 5; BITMAP_HELVETICA_10* = 6; BITMAP_HELVETICA_12* = 7; BITMAP_HELVETICA_18* = 8; (* glutGet parameters *) WINDOW_X* = 100; WINDOW_Y* = 101; WINDOW_WIDTH* = 102; WINDOW_HEIGHT* = 103; WINDOW_BUFFER_SIZE* = 104; WINDOW_STENCIL_SIZE* = 105; WINDOW_DEPTH_SIZE* = 106; WINDOW_RED_SIZE* = 107; WINDOW_GREEN_SIZE* = 108; WINDOW_BLUE_SIZE* = 109; WINDOW_ALPHA_SIZE* = 110; WINDOW_ACCUM_RED_SIZE* = 111; WINDOW_ACCUM_GREEN_SIZE* = 112; WINDOW_ACCUM_BLUE_SIZE* = 113; WINDOW_ACCUM_ALPHA_SIZE* = 114; WINDOW_DOUBLEBUFFER* = 115; WINDOW_RGBA* = 116; WINDOW_PARENT* = 117; WINDOW_NUM_CHILDREN* = 118; WINDOW_COLORMAP_SIZE* = 119; WINDOW_NUM_SAMPLES* = 120; WINDOW_STEREO* = 121; WINDOW_CURSOR* = 122; SCREEN_WIDTH* = 200; SCREEN_HEIGHT* = 201; SCREEN_WIDTH_MM* = 202; SCREEN_HEIGHT_MM* = 203; MENU_NUM_ITEMS* = 300; DISPLAY_MODE_POSSIBLE* = 400; INIT_WINDOW_X* = 500; INIT_WINDOW_Y* = 501; INIT_WINDOW_WIDTH* = 502; INIT_WINDOW_HEIGHT* = 503; INIT_DISPLAY_MODE* = 504; ELAPSED_TIME* = 700; (* glutDeviceGet parameters *) HAS_KEYBOARD* = 600; HAS_MOUSE* = 601; HAS_SPACEBALL* = 602; HAS_DIAL_AND_BUTTON_BOX* = 603; HAS_TABLET* = 604; NUM_MOUSE_BUTTONS* = 605; NUM_SPACEBALL_BUTTONS* = 606; NUM_BUTTON_BOX_BUTTONS* = 607; NUM_DIALS* = 608; NUM_TABLET_BUTTONS* = 609; (* glutLayerGet parameters *) OVERLAY_POSSIBLE* = 800; LAYER_IN_USE* = 801; HAS_OVERLAY* = 802; TRANSPARENT_INDEX* = 803; NORMAL_DAMAGED* = 804; OVERLAY_DAMAGED* = 805; (* glutVideoResizeGet parameters *) VIDEO_RESIZE_POSSIBLE* = 900; VIDEO_RESIZE_IN_USE* = 901; VIDEO_RESIZE_X_DELTA* = 902; VIDEO_RESIZE_Y_DELTA* = 903; VIDEO_RESIZE_WIDTH_DELTA* = 904; VIDEO_RESIZE_HEIGHT_DELTA* = 905; VIDEO_RESIZE_X* = 906; VIDEO_RESIZE_Y* = 907; VIDEO_RESIZE_WIDTH* = 908; VIDEO_RESIZE_HEIGHT* = 909; (* glutGetModifiers return mask *) ACTIVE_SHIFT* = {0}; ACTIVE_CTRL* = {1}; ACTIVE_ALT* = {2}; (* glutSetCursor parameters *) (* Basic arrows *) CURSOR_RIGHT_ARROW* = 0; CURSOR_LEFT_ARROW* = 1; (* Symbolic cursor shapes *) CURSOR_INFO* = 2; CURSOR_DESTROY* = 3; CURSOR_HELP* = 4; CURSOR_CYCLE* = 5; CURSOR_SPRAY* = 6; CURSOR_WAIT* = 7; CURSOR_TEXT* = 8; CURSOR_CROSSHAIR* = 9; (* Directional cursors *) CURSOR_UP_DOWN* = 10; CURSOR_LEFT_RIGHT* = 11; (* Sizing cursors *) CURSOR_TOP_SIDE* = 12; CURSOR_BOTTOM_SIDE* = 13; CURSOR_LEFT_SIDE* = 14; CURSOR_RIGHT_SIDE* = 15; CURSOR_TOP_LEFT_CORNER* = 16; CURSOR_TOP_RIGHT_CORNER* = 17; CURSOR_BOTTOM_RIGHT_CORNER* = 18; CURSOR_BOTTOM_LEFT_CORNER* = 19; (* Inherit from parent window *) CURSOR_INHERIT* = 100; (* Blank cursor *) CURSOR_NONE* = 101; (* Fullscreen crosshair (if available) *) CURSOR_FULL_CROSSHAIR* = 102; TYPE Address* = GL.Address; PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR; (* GLUT Initialization sub-API *) PROCEDURE Init* ['glutInit'] (VAR argc: INTEGER; VAR argv: ARRAY [untagged] OF PtrSTR); PROCEDURE InitDisplayMode* ['glutInitDisplayMode'] (mode: SET); PROCEDURE InitDisplayString* ['glutInitDisplayString'] (string: PtrSTR); PROCEDURE InitWindowPosition* ['glutInitWindowPosition'] (x, y: INTEGER); PROCEDURE InitWindowSize* ['glutInitWindowSize'] (width, height: INTEGER); PROCEDURE MainLoop* ['glutMainLoop']; (* GLUT Window sub-API *) PROCEDURE CreateWindow* ['glutCreateWindow'] (title: PtrSTR): INTEGER; PROCEDURE CreateSubWindow* ['glutCreateSubWindow'] (win, x, y, width, height: INTEGER): INTEGER; PROCEDURE DestroyWindow* ['glutDestroyWindow'] (win: INTEGER); PROCEDURE PostRedisplay* ['glutPostRedisplay']; PROCEDURE PostWindowRedisplay* ['glutPostWindowRedisplay'] (win: INTEGER); PROCEDURE SwapBuffers* ['glutSwapBuffers']; PROCEDURE GetWindow* ['glutGetWindow'] (): INTEGER; PROCEDURE SetWindow* ['glutSetWindow'] (win: INTEGER); PROCEDURE SetWindowTitle* ['glutSetWindowTitle'] (name: PtrSTR); PROCEDURE SetIconTitle* ['glutSetIconTitle'] (name: PtrSTR); PROCEDURE PositionWindow* ['glutPositionWindow'] (x, y: INTEGER); PROCEDURE ReshapeWindow* ['glutReshapeWindow'] (width, height: INTEGER); PROCEDURE PopWindow* ['glutPopWindow']; PROCEDURE PushWindow* ['glutPushWindow']; PROCEDURE IconifyWindow* ['glutIconifyWindow']; PROCEDURE ShowWindow* ['glutShowWindow']; PROCEDURE HideWindow* ['glutHideWindow']; PROCEDURE FullScreen* ['glutFullScreen']; PROCEDURE SetCursor* ['glutSetCursor'] (cursor: INTEGER); PROCEDURE WrapPointer* ['glutWrapPointer'] (x, y: INTEGER); (* GLUT Overlay sub-API *) PROCEDURE EstablishOverlay* ['glutEstablishOverlay']; PROCEDURE RemoveOverlay* ['glutRemoveOverlay']; PROCEDURE UseLayer* ['glutUseLayer'] (layer: GL.Enum); PROCEDURE PostOverlayRedisplay* ['glutPostOverlayRedisplay']; PROCEDURE PostWindowOverlayRedisplay* ['glutPostWindowOverlayRedisplay'] (win: INTEGER); PROCEDURE ShowOverlay* ['glutShowOverlay']; PROCEDURE HideOverlay* ['glutHideOverlay']; (* GLUT Menu sub-API *) PROCEDURE CreateMenu* ['glutCreateMenu'] (func: PROCEDURE (value: INTEGER)): INTEGER; PROCEDURE DestroyMenu* ['glutDestroyMenu'] (menu: INTEGER); PROCEDURE GetMenu* ['glutGetMenu'] (): INTEGER; PROCEDURE SetMenu* ['glutSetMenu'] (menu: INTEGER); PROCEDURE AddMenuEntry* ['glutAddMenuEntry'] (name: PtrSTR; value: INTEGER); PROCEDURE AddSubMenu* ['glutAddSubMenu'] (name: PtrSTR; menu: INTEGER); PROCEDURE ChangeToMenuEntry* ['glutChangeToMenuEntry'] (entry: INTEGER; name: PtrSTR; value: INTEGER); PROCEDURE ChangeToSubMenu* ['glutChangeToSubMenu'] (entry: INTEGER; name: PtrSTR; value: INTEGER); PROCEDURE RemoveMenuItem* ['glutRemoveMenuItem'] (entry: INTEGER); PROCEDURE AttachMenu* ['glutAttachMenu'] (button: INTEGER); PROCEDURE DetachMenu* ['glutDetachMenu'] (button: INTEGER); (* GLUT sub-API *) PROCEDURE DisplayFunc* ['glutDisplayFunc'] (f: PROCEDURE); PROCEDURE ReshapeFunc* ['glutReshapeFunc'] (f: PROCEDURE (width, height: INTEGER)); PROCEDURE KeyboardFunc* ['glutKeyboardFunc'] (f: PROCEDURE (key: SHORTCHAR; x, y: INTEGER)); PROCEDURE MouseFunc* ['glutMouseFunc'] (f: PROCEDURE (button, state, x, y: INTEGER)); PROCEDURE MotionFunc* ['glutMotionFunc'] (f: PROCEDURE (x, y: INTEGER)); PROCEDURE PassiveMotionFunc* ['glutPassiveMotionFunc'] (f: PROCEDURE (x, y: INTEGER)); PROCEDURE EntryFunc* ['glutEntryFunc'] (f: PROCEDURE (state: INTEGER)); PROCEDURE VisibilityFunc* ['glutVisibilityFunc'] (f: PROCEDURE (state: INTEGER)); PROCEDURE IdleFunc* ['glutIdleFunc'] (f: PROCEDURE); PROCEDURE TimerFunc* ['glutTimerFunc'] (msecs: INTEGER; f: PROCEDURE (value: INTEGER); value: INTEGER); PROCEDURE MenuStateFunc* ['glutMenuStateFunc'] (f: PROCEDURE (status: INTEGER)); PROCEDURE SpecialFunc* ['glutSpecialFunc'] (f: PROCEDURE (key, x, y: INTEGER)); PROCEDURE SpaceballMotionFunc* ['glutSpaceballMotionFunc'] (f: PROCEDURE (x, y, z: INTEGER)); PROCEDURE SpaceballRotateFunc* ['glutSpaceballRotateFunc'] (f: PROCEDURE (x, y, z: INTEGER)); PROCEDURE SpaceballButtonFunc* ['glutSpaceballButtonFunc'] (f: PROCEDURE (button, state: INTEGER)); PROCEDURE ButtonBoxFunc* ['glutButtonBoxFunc'] (f: PROCEDURE (button, state: INTEGER)); PROCEDURE DialsFunc* ['glutDialsFunc'] (f: PROCEDURE (dial, value: INTEGER)); PROCEDURE TabletMotionFunc* ['glutTabletMotionFunc'] (f: PROCEDURE (x, y: INTEGER)); PROCEDURE TabletButtonFunc* ['glutTabletButtonFunc'] (f: PROCEDURE (button, state, x, y: INTEGER)); PROCEDURE MenuStatusFunc* ['glutMenuStatusFunc'] (f: PROCEDURE (status, x, y: INTEGER)); PROCEDURE OverlayDisplayFunc* ['glutOverlayDisplayFunc'] (f: PROCEDURE); PROCEDURE WindowStatusFunc* ['glutWindowStatusFunc'] (f: PROCEDURE (state: INTEGER)); (* GLUT color index sub-API *) PROCEDURE SetColor* ['glutSetColor'] (cell: INTEGER; red, green, blue: GL.Float); PROCEDURE GetColor* ['glutGetColor'] (cell, component: INTEGER): GL.Float; PROCEDURE CopyColormap* ['glutCopyColormap'] (win: INTEGER); (* GLUT retrieval sub-API *) PROCEDURE Get* ['glutGet'] (state: GL.Enum): INTEGER; PROCEDURE DeviceGet* ['glutDeviceGet'] (info: GL.Enum): INTEGER; PROCEDURE ExtensionSupported* ['glutExtensionSupported'] (extension: PtrSTR): INTEGER; PROCEDURE GetModifiers* ['glutGetModifiers'] (): SET; PROCEDURE LayerGet* ['glutLayerGet'] (info: GL.Enum): INTEGER; (* GLUT font sub-API *) PROCEDURE BitmapCharacter* ['glutBitmapCharacter'] (font: Address; character: INTEGER); PROCEDURE BitmapWidth* ['glutBitmapWidth'] (font: Address; character: INTEGER): INTEGER; PROCEDURE StrokeCharacter* ['glutStrokeCharacter'] (font: Address; character: INTEGER); PROCEDURE StrokeWidth* ['glutStrokeWidth'] (font: Address; character: INTEGER): INTEGER; PROCEDURE BitmapLength* ['glutBitmapLength'] (font: Address; string: PtrSTR): INTEGER; PROCEDURE StrokeLength* ['glutStrokeLength'] (font: Address; string: PtrSTR): INTEGER; (* GLUT pre-build models sub-API *) PROCEDURE WireSphere* ['glutWireSphere'] (radius: GL.Double; slices, stacks: GL.Int); PROCEDURE SolidSphere* ['glutSolidSphere'] (radius: GL.Double; slices, stacks: GL.Int); PROCEDURE WireCone* ['glutWireCone'] (base, height: GL.Double; slices, stacks: GL.Int); PROCEDURE SolidCone* ['glutSolidCone'] (base, height: GL.Double; slices, stacks: GL.Int); PROCEDURE WireCube* ['glutWireCube'] (sizet: GL.Double); PROCEDURE SolidCube* ['glutSolidCube'] (size: GL.Double); PROCEDURE WireTorus* ['glutWireTorus'] (innerRadius, outerRadius: GL.Double; sides, rings: GL.Int); PROCEDURE SolidTorus* ['glutSolidTorus'] (innerRadius, outerRadius: GL.Double; sides, rings: GL.Int); PROCEDURE WireDodecahedron* ['glutWireDodecahedron']; PROCEDURE SolidDodecahedron* ['glutSolidDodecahedron']; PROCEDURE WireTeapot* ['glutWireTeapot'] (sizet: GL.Double); PROCEDURE SolidTeapot* ['glutSolidTeapot'] (size: GL.Double); PROCEDURE WireOctahedron* ['glutWireOctahedron']; PROCEDURE SolidOctahedron* ['glutSolidOctahedron']; PROCEDURE WireTetrahedron* ['glutWireTetrahedron']; PROCEDURE SolidTetrahedron* ['glutSolidTetrahedron']; PROCEDURE WireIcosahedron* ['glutWireIcosahedron']; PROCEDURE SolidIcosahedron* ['glutSolidIcosahedron']; (* GLUT video resize sub-API *) PROCEDURE VideoResizeGet* ['glutVideoResizeGet'] (param: GL.Enum); PROCEDURE SetupVideoResizing* ['glutSetupVideoResizing']; PROCEDURE StopVideoResizing* ['glutStopVideoResizing']; PROCEDURE VideoResize* ['glutVideoResize'] (x, y, width, height: INTEGER); PROCEDURE VideoPan* ['glutVideoPan'] (x, y, width, height: INTEGER); (* GLUT debugging sub-API *) PROCEDURE ReportErrors* ['glutReportErrors']; END OglGLUT. |
Автор: | Иван Кузьмицкий [ Понедельник, 14 Январь, 2008 14:26 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Илья, то есть, как я понял, OpenGL-окно создаётся средствами GLUT и получается аппаратное ускорение? |
Автор: | Илья Ермаков [ Понедельник, 14 Январь, 2008 14:36 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Насколько я понял, зависит от режима, в котором создано окно. Но то, что GLUT может использоваться в полноэкранном "аппаратном" режиме - это точно. Тот движок, про который мы говорили, использует для создания окна именно GLUT (от ручного WinApi окна он в конце концов отказался. Да и кросслатформенность это есть гут). Собственно, мы с Темиргалеевым и написали этот пример и перевели заголовок, дабы "сподвигнуть" человека... |
Автор: | prokopiy [ Вторник, 15 Январь, 2008 17:39 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Попробовал выше приведённый пример с использованием GLUT, не могу понять почему при изменении размеров окна оно исчезает? |
Автор: | Илья Ермаков [ Вторник, 15 Январь, 2008 18:53 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Странно... Ничего похожего не наблюдается. Может быть, старая версия ГЛУТа? |
Автор: | prokopiy [ Вторник, 15 Январь, 2008 19:00 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Илья Ермаков писал(а): Странно... Ничего похожего не наблюдается. Может быть, старая версия ГЛУТа? Использовал BB 1.6rc5, glut-3.7.6 скачал с opengl.org |
Автор: | Илья Ермаков [ Вторник, 15 Январь, 2008 19:46 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Тогда не знаю... Мы на BB 1.5 работаем, но это вроде бы влиять не должно |
Автор: | serge [ Среда, 16 Январь, 2008 09:07 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
prokopiy писал(а): Попробовал выше приведённый пример с использованием GLUT, не могу понять почему при изменении размеров окна оно исчезает? А Вы случаем [ccall] из описания процедур не удаляли? У меня под 1.6 вообще не компилировался из за несоответствия типов. Для это примера достаточно поправить в OglGLUT: ... (* GLUT sub-API *) PROCEDURE DisplayFunc* ['glutDisplayFunc'] (f: PROCEDURE [ccall]); PROCEDURE ReshapeFunc* ['glutReshapeFunc'] (f: PROCEDURE [ccall] (width, height: INTEGER)); PROCEDURE KeyboardFunc* ['glutKeyboardFunc'] (f: PROCEDURE [ccall] (key: SHORTCHAR; x, y: INTEGER)); ... |
Автор: | Илья Ермаков [ Среда, 16 Январь, 2008 09:51 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
О как, в 1.6 швяйцарцы поправили компилятор! |
Автор: | prokopiy [ Среда, 16 Январь, 2008 13:07 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
serge писал(а): prokopiy писал(а): Попробовал выше приведённый пример с использованием GLUT, не могу понять почему при изменении размеров окна оно исчезает? А Вы случаем [ccall] из описания процедур не удаляли? У меня под 1.6 вообще не компилировался из за несоответствия типов. Для это примера достаточно поправить в OglGLUT: ... (* GLUT sub-API *) PROCEDURE DisplayFunc* ['glutDisplayFunc'] (f: PROCEDURE [ccall]); PROCEDURE ReshapeFunc* ['glutReshapeFunc'] (f: PROCEDURE [ccall] (width, height: INTEGER)); PROCEDURE KeyboardFunc* ['glutKeyboardFunc'] (f: PROCEDURE [ccall] (key: SHORTCHAR; x, y: INTEGER)); ... Удалял, было дело... |
Автор: | Евгений Темиргалеев [ Четверг, 19 Июнь, 2008 20:36 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
prokopiy писал(а): Предлагаю обсудить изпользование OpenGL в BlackBox. Кстати, если кто не в курсе, у Зина подсистема Ogl - там прилада, чтобы во вьюшках рисовать и куча примеров. OglGlut - как дополнение - вышеуказанный заголовок для glut.dll, доведенный до ума, и перевод на русский документации Ogl. |
Автор: | Rafi [ Воскресенье, 03 Август, 2008 00:11 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Скажите, а как можно загрузить BMP-файл для использования его в качестве текстуры? |
Автор: | Valery Solovey [ Воскресенье, 03 Август, 2008 10:01 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Rafi писал(а): Скажите, а как можно загрузить BMP-файл для использования его в качестве текстуры? Для какого элемента управления или для чего вообще? Есть подозрение, что Вы попали не туда : ).
|
Автор: | Rafi [ Воскресенье, 03 Август, 2008 11:18 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Цитата: Для какого элемента управления или для чего вообще? Для того, чтобы использовать его в качестве параметра ф-ции GL.TexImage2D(). Я пробовал загружать BMP с помощью модуля ViBmp, но вот что с ним делать далее, не соображу. |
Автор: | Алексей_В [ Пятница, 12 Декабрь, 2008 22:11 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Хм. Нашел в документации: "Ограничения по использованию Поскольку библиотека GLUT обеспечивает свой интерфейс управления окнами и управляет главным циклом обработки сообщений приложения, её использование ограничивается созданием автономных выполняемых файлов. Иными словами - средства GLUT не приспособлены для использования совместно с каркасом BlackBox. Для использования графики OpenGL совместно с каркасом BlackBox - используйте средства модуля OglContext." Опять вопросы... 1. Что значит "не приспособлены для использования совместно с каркасом BlackBox" ? Что такое каркас и что например нельзя использовать из возможностей, предоставляемых им? 2. Можно ли получить автономный файл того же OglGLUTColors например? Без среды? |
Автор: | Иван Кузьмицкий [ Пятница, 12 Декабрь, 2008 22:39 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Под каркасом имеется в виду BlackBox FrameWork. Каркас занимается обработкой ввода и выводом. GLUT занимается тем же, поэтому "внутри" каркаса его не попользуешь. |
Автор: | Алексей_В [ Пятница, 12 Декабрь, 2008 22:57 ] |
Заголовок сообщения: | Re: Работа с OpenGL |
Ага, примерно понятно... спасибо. Но - можно ли реализовать в этом графическом приложении с Glut например меню, типа как в играх, под мышь, и чтоб приложение написанное на BlackBox реагировало на него? В принципе? Детали мне сейчас не важны... все равно еще разбираться и разбираться... И например, если бы Вы собрались написать несложную игру или 3D редактор под Glut чего именно не хватало бы из фреймворка? Так ли это серьезно, или этот функционал можно обеспечить и самому... Так на примере мне проще понять... Подскажите, пожалуста. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |