OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 14:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Работа с OpenGL
СообщениеДобавлено: Понедельник, 14 Январь, 2008 11:50 
Аватара пользователя

Зарегистрирован: Понедельник, 07 Январь, 2008 21:26
Сообщения: 5
Откуда: Красноярск
Предлагаю обсудить изпользование OpenGL в BlackBox.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Понедельник, 14 Январь, 2008 11:55 
Аватара пользователя

Зарегистрирован: Понедельник, 07 Январь, 2008 21:26
Сообщения: 5
Откуда: Красноярск
Может у кого есть исходники как сделать Windows-приложение (.exe) используя модули WinApi и WinGL?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Понедельник, 14 Январь, 2008 12:54 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Есть пример с использованием 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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Понедельник, 14 Январь, 2008 14:26 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Илья, то есть, как я понял, OpenGL-окно создаётся средствами GLUT и получается аппаратное ускорение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Понедельник, 14 Январь, 2008 14:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Насколько я понял, зависит от режима, в котором создано окно.
Но то, что GLUT может использоваться в полноэкранном "аппаратном" режиме - это точно.
Тот движок, про который мы говорили, использует для создания окна именно GLUT (от ручного WinApi окна он в конце концов отказался. Да и кросслатформенность это есть гут). Собственно, мы с Темиргалеевым и написали этот пример и перевели заголовок, дабы "сподвигнуть" человека...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Вторник, 15 Январь, 2008 17:39 
Аватара пользователя

Зарегистрирован: Понедельник, 07 Январь, 2008 21:26
Сообщения: 5
Откуда: Красноярск
Попробовал выше приведённый пример с использованием GLUT, не могу понять почему при изменении размеров окна оно исчезает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Вторник, 15 Январь, 2008 18:53 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Странно... Ничего похожего не наблюдается. Может быть, старая версия ГЛУТа?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Вторник, 15 Январь, 2008 19:00 
Аватара пользователя

Зарегистрирован: Понедельник, 07 Январь, 2008 21:26
Сообщения: 5
Откуда: Красноярск
Илья Ермаков писал(а):
Странно... Ничего похожего не наблюдается. Может быть, старая версия ГЛУТа?


Использовал BB 1.6rc5, glut-3.7.6 скачал с opengl.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Вторник, 15 Январь, 2008 19:46 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Тогда не знаю... Мы на BB 1.5 работаем, но это вроде бы влиять не должно :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Среда, 16 Январь, 2008 09:07 

Зарегистрирован: Четверг, 01 Февраль, 2007 06:37
Сообщения: 13
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));
...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Среда, 16 Январь, 2008 09:51 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
О как, в 1.6 швяйцарцы поправили компилятор!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Среда, 16 Январь, 2008 13:07 
Аватара пользователя

Зарегистрирован: Понедельник, 07 Январь, 2008 21:26
Сообщения: 5
Откуда: Красноярск
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));
...



Удалял, было дело...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Четверг, 19 Июнь, 2008 20:36 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
prokopiy писал(а):
Предлагаю обсудить изпользование OpenGL в BlackBox.

Кстати, если кто не в курсе, у Зина подсистема Ogl - там прилада, чтобы во вьюшках рисовать и куча примеров.
OglGlut - как дополнение - вышеуказанный заголовок для glut.dll, доведенный до ума, и перевод на русский документации Ogl.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Воскресенье, 03 Август, 2008 00:11 

Зарегистрирован: Суббота, 02 Август, 2008 23:01
Сообщения: 43
Скажите, а как можно загрузить BMP-файл для использования его в качестве текстуры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Воскресенье, 03 Август, 2008 10:01 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Rafi писал(а):
Скажите, а как можно загрузить BMP-файл для использования его в качестве текстуры?
Для какого элемента управления или для чего вообще? Есть подозрение, что Вы попали не туда : ).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Воскресенье, 03 Август, 2008 11:18 

Зарегистрирован: Суббота, 02 Август, 2008 23:01
Сообщения: 43
Цитата:
Для какого элемента управления или для чего вообще?

Для того, чтобы использовать его в качестве параметра ф-ции GL.TexImage2D().
Я пробовал загружать BMP с помощью модуля ViBmp, но вот что с ним делать далее, не соображу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 21:49 

Зарегистрирован: Четверг, 04 Декабрь, 2008 20:41
Сообщения: 16
Приветствую!
Подскажите пожалуста...
Поставил в BlackBox пакеты Ogl и OglGlut. Все работает замечательно. Одного не могу понять - как у Евгения, автора OglGlut получается так просто и изящно получить исполняемый файл. Например в OglGLUTColors. С установкой версии ядра итп разобрался - все работает. Поражает краткость строки линкера - DevLinker.LinkExe OglGLUTColors.exe := National Kernel+ OglGLUTLib OglGLUTColors.
Не пойму - где перечисление кучи модулей, которые наверняка импортруются?
Пробовал сделать исполняемый файл из OglColors. Полуэмпирически пришел к строке вида:
"DevLinker.LinkExe test1.exe := National Kernel+ Log Files HostFiles Dialog Math Strings HostRegistry Fonts HostFonts Dialog Math Strings Ports Services HostPorts Stores Meta Converters Sequencers Models Views OglContexts Controllers Properties Mechanisms Containers TextModels TextMappers Dates Printers Printing TextRulers TextSetters TextViews Documents Windows OleData HostMechanisms HostWindows HostPrinters StdDialog StdApi StdCmds StdCFrames HostCFrames HostDialog TextControllers StdLog Out OglLib OglContexts OglColors"
Файл получается, но не работает, пишет (см. рисунок)
В чем тут дело?


Вложения:
trap.JPG
trap.JPG [ 21.36 КБ | Просмотров: 19542 ]


Последний раз редактировалось Алексей_В Пятница, 12 Декабрь, 2008 22:15, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 22:11 

Зарегистрирован: Четверг, 04 Декабрь, 2008 20:41
Сообщения: 16
Хм. Нашел в документации:

"Ограничения по использованию

Поскольку библиотека GLUT обеспечивает свой интерфейс управления окнами и управляет главным циклом обработки сообщений приложения, её использование ограничивается созданием автономных выполняемых файлов. Иными словами - средства GLUT не приспособлены для использования совместно с каркасом BlackBox.

Для использования графики OpenGL совместно с каркасом BlackBox - используйте средства модуля OglContext."
Опять вопросы...

1. Что значит "не приспособлены для использования совместно с каркасом BlackBox" ?
Что такое каркас и что например нельзя использовать из возможностей, предоставляемых им?
2. Можно ли получить автономный файл того же OglGLUTColors например? Без среды?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 22:39 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Под каркасом имеется в виду BlackBox FrameWork. Каркас занимается обработкой ввода и выводом. GLUT занимается тем же, поэтому "внутри" каркаса его не попользуешь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с OpenGL
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 22:57 

Зарегистрирован: Четверг, 04 Декабрь, 2008 20:41
Сообщения: 16
Ага, примерно понятно... спасибо.

Но - можно ли реализовать в этом графическом приложении с Glut например меню, типа как в играх, под мышь, и чтоб приложение написанное на BlackBox реагировало на него?
В принципе? Детали мне сейчас не важны... все равно еще разбираться и разбираться...

И например, если бы Вы собрались написать несложную игру или 3D редактор под Glut
чего именно не хватало бы из фреймворка? Так ли это серьезно, или этот функционал можно обеспечить и самому... Так на примере мне проще понять... Подскажите, пожалуста.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB