## MESHTOOL/OGFVIEWER README, FAQ [201102xx]

1. Что это?

2. Что умеем?

3. Комплектация пакета

4. Отличия, особенности версий ogfviewer

5. Управление клавиатурой, мышью

6. Предварительные действия

7. Какие форматы текстур умеем

8. Как (где) ищется конфигурация ogfviewer.cfg

9. Как ищутся текстуры

10. Как ассоциировать файлы с ogfviewer?

11. Как убрать ассоциацию c ogfviewer?

12. Как смотреть уровни

13. Как конвертировать ogf и omf-анимации в smd

14. Методичка по консольным утилитам

15. Директивы компиляции

16. История изменений

17. Планы

18. Использованные материалы и благодарности

1. Что это?

   MESHTOOL - комплект утилит для просмотра, конвертации 3d-моделей движка X-Ray (S.T.A.L.K.E.R. series) а также MSH (Orion engine v1 MSH - Stalin Subway, Red Veil, Метро-2, Метро-2:Смерть вождя), Autodesk 3DStudio MAX 3DS.

   Использовались "движки": Microsoft Directx, Microsoft OpenGL, SGI OpenGL, Mesa3D OpenGL, allegro library.

   Cистемные требования. Windows 9x/NT/2000/XP/Vista/Win7 [x32/x64] (а также Linux+Wine :) ) Возможна работа без аппаратной 3D-акселерации. ( OGFViewer cовместим с TransGaming SwiftShader, Realtech VR DXGL Wrapper, AltOpenGL, TechLand Soft OpenGL, mesaFX OpenGL. )

2. Что умеем?

   Смотрим:

   - X-Ray ogf v4 (builds 2xxx-3xxx), возможен экспорт анимаций в smd
   - X-Ray ogf v3 (builds 1xxx) - частично
   - X-Ray object v3 (builds 1xxx), только статика
   - X-Ray object v4 (builds 2xxx-3xxx), только статика
   - X-Ray level (builds 2xxx-3xxx), через ogf-конвертацию (parse_lev) или через object-конвертацию (xray_re converter)
   - Orion engine v1 MSH - Stalin Subway, Red Veil, Метро-2, Метро-2:Смерть вождя
   - Autodesk 3DStudio MAX 3DS

   Форматы экспорта:

   - Wavefront Object (*.OBJ)
   - Valve Software HalfLife (*.SMD)
   - Ascii Scene Export (*.ASE)
   - Autodesk 3dsMax (*.3DS)
   - LightWave 3D (*.LWO) - в разработке

   Конвертируем:

   - level -> ogf (parse_lev)
   - ogf,object,msh -> 3ds (ogfviewer, meshconv)
   - ogf -> obj (ogfviewer, ogf2obj)
   - object,msh -> obj (ogfviewer)
   - ogf -> ase (ogfviewer, ogf2obj)
   - object,msh -> ase (ogfviewer)
   - ogf,omf -> smd (ogf2smda)
   - object,msh -> smd (ogfviewer, без анимаций)

3. Комплектация пакета

       OGF\GUI\OGFViewer.exe - Win32 MS OpenGL версия.
       OGF\GUI\OGFViewer_sgi.exe - Win32 SGI/MMX OpenGL версия.
       OGF\GUI\OGFViewer_DX.exe - Win32 MS DirectX версия.
       OGF\GUI\ALT\OGFViewer.exe - Win32 MS OpenGL версия (альтернативное управление, для level-ов).
       OGF\GUI\ALT\OGFViewer_sgi.exe - Win32 SGI/MMX OpenGL версия (альтернативное управление, для level-ов).
       OGF\GUI\ALT\OGFViewer_DX.exe - Win32 MS DirectX версия (альтернативное управление, для level-ов).
       OGF\GUI\PROMO\OGFViewer.exe - Win32 MS OpenGL версия (альтернативное управление, для level-ов, c небом и VBO).
       OGF\GUI\PROMO\OGFViewer_DX.exe - Win32 MS DirectX версия (альтернативное управление, для level-ов, c небом).
       OGF\BETA\ogfconsa.exe - Win32 Allegro консольная версия.
       OGF\BETA\DOS32\ogfdos.exe - DOS32 консольная версия.
       OGF\BETA\DOS16\ogfdos16.exe - DOS16 консольная версия (320x200).
       OGF\BETA\OS2\ogf_tk.exe - OS/2 консольная версия.
       OGF\CONSOLE\Parse_Lev.exe - конвертер уровней в OGF формат, Console версия.
       OGF\CONSOLE\MeshConv.exe - конвертер моделей в 3DS формат, Console версия.
       OGF\CONSOLE\OGF2SMDa.exe - конвертер моделей/анимаций в SMD формат, Console версия.
       OGF\CONSOLE\glxinfo.exe - системная информация, Console MS OpenGL версия.
       OGF\CONSOLE\glxinfo_sgi.exe - системная информация, Console SGI/MMX OpenGL версия.
       +
       OGF\REF\MESH.TXT - Orion engine v1 MSH format datasheet
       OGF\REF\OGF3.H - xray ogf v.3 datasheet
       OGF\REF\OGF4.H - xray ogf v.4 datasheet
       OGF\REF\OBJECT.H - xray object datasheet
       OGF\SAMPLES - каталог с примерами (без текстур)
       OGF\REG\ - ветки реестра для ассоциаций
       OGF\SKY\ - текстуры неба для PROMO-версии (текстуры sky?.dds положить в textures\sky)
       OGF\soft_gl.7z - Mesa3D OpenGL 2.1 library v6.5.2, v7.3 (software OpenGL emulation)
       OGF\soft_dx.7z - Microsoft Software DirectX rasterizer library v8.x (software DirectX emulation)
       OGF\FAQ.HTM - FAQ & README (HTML)

4. Отличия, особенности версий ogfviewer

   1. Для всех версий:

      Существует ограничение на количество материалов (до 500) и вложенных блоков (до 15000).

   2. Базовая:

      Вращается и двигается модель относительно центра координат. Вариант для просмотра отдельных моделей. Умеет VBO (OpenGL). Включен мипмэппинг и фильтрация текстур. Использование буфера VBO (OpenGL) имеет "обратную сторону" - при его переполнении эффективность от VBO пропадает.

   3. Альтернативная:

      Вращается и двигается свободная камера. Вариант для просмотра уровней и крупных объектов. Вместо скайбоксов используется туман. Включена DXT-компрессия (OpenGL), фильтрация текстур.

   4. Промо:

      Альтернативная версия вместе с VBO (OpenGL) и скайбоксами. Вращается и двигается свободная камера. Вариант для просмотра уровней и крупных объектов. Включена DXT-компрессия (OpenGL), фильтрация текстур. Использование буфера VBO (OpenGL) имеет "обратную сторону" - при его переполнении эффективность от VBO пропадает.

   5. На движке SGI OpenGL:

      OpenGL движок, программная его часть оптимизирована под инструкции MMX (Pentium и старше). Немного быстрее, чем движок MS OpenGL.

   6. Программный режим (OpenGL):

      MS OpenGL: Если при запуске идут сообщения об ошибках - положите в каталог программы opengl32.dll из soft_gl.7z.

      SGI OpenGL: Если при запуске идут сообщения об ошибках - отключите видеоакселерацию в панели управления.

      или впишите, импортируйте эту строчку в реестр, значение = 00000001:

          REGEDIT4
          [HKEY_LOCAL_MACHINE\SOFTWARE\Silicon Graphics\OpenGL]
          ;"OverrideDispatch"=dword:00000000 ; default (use OpenGL for Windows unless hardware accelerated)
          "OverrideDispatch"=dword:00000001 ; force use of OpenGL for Windows
          ;"OverrideDispatch"=dword:00000002 ; force use of Microsoft's OpenGL Implementation

   7. Программный режим (DirectX):

      Если при запуске программы она показывает пустой черный экран - положите в каталог WINDOWS\SYSTEM32 d3dref8.dll из из soft_dx.7z (или DirectX 8.x SDK).

      Если при запуске программы программы она тормозит или глючит - положите в каталог программы d3d8.dll из SwiftShader или DXGL Wrapper. На вопрос "Use software renderer?" ответить "No".

5. Управление клавиатурой, мышью

   Базовая GUI-версия (ogfviewer*.exe,ogfviewer_dx.exe,ogffscr.exe)

   - INSERT, DELETE, A, D = смещение по оси X
   - HOME, END, W, S = смещение по оси Z
   - PGUP, PGDOWN = смещение по оси Y
   - стрелки = вращение по осям X/Y на 1 градус
   - SHIFT, CONTROL = вращение по оси Z на 1 градус
   - < + >, < - > на цифровой клавиатуре = zoom in/out
   - < * > на цифровой клавиатуре меняет цвет фона
   - < / > на цифровой клавиатуре меняет гамма-коррекцию
   - BACKSPACE = сброс координат
   - TAB = режим просмотра wireframe / color / texture
   - M = выгрузка статистики в object.log
   - F1, G - сетка, небо, оси в(ы)кл
   - Сtrl+N = очистить все
   - F2, Сtrl+S = сохранить как
   - F3, Сtrl+O = открыть
   - F4, L = свет, фары, лампы в(ы)кл
   - F5 = меняет FOV (field of view)
   - F7 = шаг движения * 10
   - F8 = шаг движения / 10
   - F9 = режим фильтрации текстур
   - F11 = полный экран в(ы)кл
   - F12 = центрирует модель
   - I = информация о 3D-рендерере
   - движение с нажатой левой кнопкой = вращение по осям X/Y
   - движение вверх/вниз с нажатой правой кнопкой = zoom in/out
   - движение с нажатой cредней кнопкой (колесиком) = смещение по осям X/Y
   - вращение колесика = zoom in/out

   Альтернативная GUI-версия (ogfviewer*.exe,ogfviewer_dx.exe,ogffscr.exe)

   - HOME = поворот камеры вверх на 5 градусов
   - END = поворот камеры вниз на 5 градусов
   - DELETE = движение камеры влево
   - PGDOWN = движение камеры вправо
   - стрелка влево, A = поворот камеры влево на 5 градусов
   - стрелка вправо, D = поворот камеры вправо на 5 градусов
   - стрелка вверх, W = движение камеры вперед
   - стрелка вниз, S = движение камеры назад
   - SHIFT = движение камеры вверх
   - CONTROL = движение камеры вниз
   - < * > на цифровой клавиатуре меняет цвет фона
   - < / > на цифровой клавиатуре меняет гамма-коррекцию
   - BACKSPACE = сброс координат
   - TAB = режим просмотра wireframe / color / texture
   - M = выгрузка статистики в object.log
   - N = отсечение объектов в радиусе обзора в(ы)кл
   - F1, G - сетка, небо, оси в(ы)кл
   - Сtrl+N = очистить все
   - F2, Сtrl+S = сохранить как
   - F3, Сtrl+O = открыть
   - F4, L = свет, фары, лампы в(ы)кл
   - F5 = меняет FOV (field of view)
   - F6 = "качество" картинки draft/release
   - F7 = шаг движения * 10
   - F8 = шаг движения / 10
   - F9 = режим фильтрации текстур
   - F11 = полный экран в(ы)кл
   - I = информация о 3D-рендерере
   - движение с нажатой левой кнопкой = поворот камеры влево/вправо, вверх/вниз
   - движение вверх/вниз с нажатой правой кнопкой = движение камеры вперед/назад
   - движение с нажатой cредней кнопкой (колесиком) = движение камеры вперед/назад, влево/вправо
   - вращение колесика = движение камеры вперед/назад

   Базовая GUI-версия (ogf_glut.exe)

   - A, D = смещение по оси X
   - HOME, END, W, S = смещение по оси Z
   - PGUP, PGDOWN = смещение по оси Y
   - стрелки = вращение по осям X/Y на 1 градус
   - Z, X = вращение по оси Z на 1 градус
   - C, V на цифровой клавиатуре = zoom in/out
   - Y = меняет цвет фона
   - E, F10 = сброс координат
   - SPACE = режим просмотра wireframe / color / texture
   - G - сетка, небо, оси в(ы)кл
   - F1, 1 = "качество" картинки draft
   - F2, 2 = "качество" картинки release
   - F4, L = свет, фары, лампы в(ы)кл
   - F5, F = меняет FOV (field of view)
   - F7, 7 = шаг движения * 10
   - F8, 8 = шаг движения / 10
   - F9, M = режим фильтрации текстур
   - F11 = полный экран в(ы)кл
   - F12 = центрирует модель
   - I = информация о 3D-рендерере
   - движение с нажатой левой кнопкой = вращение по осям X/Y
   - движение вверх/вниз с нажатой правой кнопкой = zoom in/out
   - движение с нажатой cредней кнопкой (колесиком) = смещение по осям X/Y
   - вращение колесика = zoom in/out
   - Q = выход

   Альтернативная GUI-версия (ogf_glut.exe)

   - HOME, C = поворот камеры вверх на 5 градусов
   - END, V = поворот камеры вниз на 5 градусов
   - Z = движение камеры влево
   - X = движение камеры вправо
   - стрелка влево, A = поворот камеры влево на 5 градусов
   - стрелка вправо, D = поворот камеры вправо на 5 градусов
   - стрелка вверх, W = движение камеры вперед
   - стрелка вниз, S = движение камеры назад
   - PGUP, O = движение камеры вверх
   - PGDOWN, P = движение камеры вниз
   - Y = меняет цвет фона
   - F10, E = сброс координат
   - ПРОБЕЛ = режим просмотра wireframe / color / texture
   - N = отсечение объектов в радиусе обзора в(ы)кл
   - G - сетка, небо, оси в(ы)кл
   - F1, 1 = "качество" картинки draft
   - F2, 2 = "качество" картинки release
   - F4, L = свет, фары, лампы в(ы)кл
   - F5, F = меняет FOV (field of view)
   - F7, 7 = шаг движения * 10
   - F8, 8 = шаг движения / 10
   - F9, M = режим фильтрации текстур
   - F11 = полный экран в(ы)кл
   - I = информация о 3D-рендерере
   - движение с нажатой левой кнопкой = поворот камеры влево/вправо, вверх/вниз
   - движение вверх/вниз с нажатой cредней кнопкой = движение камеры вперед/назад
   - движение с нажатой правой кнопкой (колесиком) = движение камеры вперед/назад, влево/вправо
   - вращение колесика = движение камеры вперед/назад
   - Q = выход

6. Предварительные действия

   Распаковываем ресурсы игры:

   Используя converter.exe из xray_re_tools:

       converter.exe -unpack -2215 gamedata.xdb
       converter.exe -unpack -2945 gamedata.xdb
       converter.exe -unpack -2947ru gamedata.xdb
       converter.exe -unpack -2947ww gamedata.xdb
       converter.exe -unpack -xdb gamedata.xdb

   Ключи после -unpack позволяют указать тип архива с игровым контентом.

   В результате имеем:

   - модели gamedata\meshes
   - уровни gamedata\levels
   - текстуры gamedata\textures

   Если просмотр моделей с текстурами нам необходим, в ogfviewer.cfg записывем путь к текстурам. Если игра лежит у нас в C:\GSC\STALKER, то в в ogfviewer.cfg пишем:

       C:\GSC\STALKER\gamedata\textures\

   Возможен запуск нескольких копий ogfviewer одновременно.

7. Какие форматы текстур умеем

   - OpenGL(Microsoft, SGI, Mesa3D): bmp, dib, dds, jpg, pcx ,png, psd, tga, tif
   - Microsoft DirectX: bmp, dds, dib, jpg, png, ppm, tga
   - allegro: BMP, LBM, PCX, TGA

8. Как (где) ищется конфигурация ogfviewer.cfg

   1. В каталоге откуда запустили
   2. В каталоге где лежит ogfviewer.exe

9. Как ищутся текстуры

   - При отсутствии ogfviewer.cfg - gamedata\textures
   - Если есть ogfviewer.cfg - пути по тексту, разделенные \0

   Размер ogfviewer.cfg - 255 символов максимум.
   OpenGL: Если размер текстуры для объекта превышает допустимый, то он масштабируется до максимально допустимого размера.
   Если в итоге указанная текстура для объекта не находится, то в drawmode #2 объект с данной текстурой не отображается.

10. Как ассоциировать файлы с ogfviewer?

    Требуются права администратора!

    редактировать REG\instogf.reg, исправить там путь к файлу.

    затем:

        regedit instogf.reg

11. Как убрать ассоциацию c ogfviewer?

    Требуются права администратора!

    затем:

        regedit delogf.reg

12. Как смотреть уровни

    Предположим, что имя нашего уровня - testers_mp_railroad

    - Первый вариант - через ogf-экспорт:

      Для конвертации используем parse_lev.exe.

      Из gamedata\levels\testers_mp_railroad запустить:

          parse_lev 1 testers_mp_railroad.ogf

      Скопировать террейны:

          gamedata\levels\testers_mp_railroad\terrain\*.dds -> gamedata\textures\terrain\

      Полученный файл testers_mp_railroad.ogf открывать:

          ALT\ogfviewer.exe
          ALT\ogfviewer_sgi.exe
          ALT\ogfviewer_dx.exe

    - Второй вариант - через object-экспорт:

      Для конвертации используем converter.exe из xray_re_tools.

      При данном виде конвертации - деревья, кусты, техника, некоторые прочие объекты - не переносятся.

      Cкопировать террейны:

          gamedata\levels\name\terrain\*.dds -> gamedata\textures\terrain\

      Редактировать converter.ini, прописать там пути к папкам с распакованными ресурсами игры.

      В той же папке где лежит gamedata\ создать rawdata\objects\levels

      Запускаем из папки, где лежат converter.exe, converter.ini:

          converter.exe -level testers_mp_railroad -out testers_mp_railroad -mode maya

      Полученный файл testers_mp_railroad.object открывать:

          ALT\ogfviewer.exe
          ALT\ogfviewer_sgi.exe
          ALT\ogfviewer_dx.exe

    Для открытия крупных уровней вроде marsh_bench, pripyat - необходимо много оперативной памяти! Рекомендуется при этом закрыть ВСЕ прочие запущенные программы.

13. Как конвертировать ogf и omf-анимации в smd

    Предположим, что имя нашей модели - сat.ogf

    Если к ней есть анимация cat_animation.omf, объединяем их:

        copy /b cat.ogf + cat_animation.omf cat_full.ogf
        ogf2smda.exe cat_full.ogf

    Иначе - пропускаем этот шаг и делаем:

        ogf2smda.exe cat.ogf

    В итоге имеем каталог SMD, там:

    SMD\reference.smd - базовая, остальные - отдельные анимации.

    Далее, используя плагин SMDImporter.mzp к Autodesk 3DStudio MAX, можно импортировать полученные SMD файлы.

14. Методичка по консольным утилитам.

    Утилита: dx7capsG
    Запуск: dx7capsG
    Результат: статистка памяти directx на экране

    Утилита: glxinfo
    Запуск: glxinfo.exe [ > parse.log ]
    Результат: показывает microsoft opengl info на экран, при указании parse.log пишется в файл

    Утилита: glxinfo_sgi
    Запуск: glxinfo_sgi.exe [ > parse.log ]
    Результат: показывает sgi opengl info на экран, при указании parse.log пишется в файл

    Утилита: meshconv
    Запуск: meshconv имя_модели.ext
    имя_модели.ext: xray ogf, object или orion msh
    Результат: конверсия в файл 'export.3ds' (3DStdio MAX 3ds файл)

    Утилита: ogf2obj
    Запуск: ogf2obj имя_модели.ogf [ имя_модели.object ] [ > parse.log ]
    если имя_модели.object опущено - показывает структурированный дамп содержимого модели на экран, при указании parse.log пишется в файл, иначе конверсия в имя_модели.object ( wavefront obj формат )

    Утилита: ogf2smd
    Запуск: ogf2smd имя_модели.ext
    имя_модели.ext: xray ogf v4 ( составная модель, склеивается так: copy /b cat.ogf + cat_animation.omf )
    Результат: конверсия в каталог /smd анимаций (smd формат), reference.smd - базовая модель

    Утилита: parse_lev
    Запуск: parse_lev < режим > [ имя_модели.ogf ] [ > parse.log ]
    режим 0: показывает структурированный дамп содержимого модели на экран, при указании parse.log пишется в файл
    режим 1: конверсия в имя_модели.ogf
    режим 2: конверсия в имя_модели.ogf (с оптимизацией вертексов) - не рекомендуется!!!

    Утилита: parse_msh, parse_ogf, parse_obj
    Запуск: parse_msh (или parse_ogf, parse_obj) имя_модели.ext [ > parse.log ]
    Результат: показывает структурированный дамп содержимого модели на экран, при указании parse.log пишется в файл

    Утилита: make_ogf
    Запуск: make_ogf < к-во вертексов > < к-во индексов > < имя_модели.оgf >
    вертексы: от 3 до 2^32 (отсекается до кратного 3)
    индексы: от 3 до 65535 (отсекается до кратного 3)
    имя_модели.оgf: имя файла - приёмника
    Результат: создание "мусорной" псевдослучайной модели 2 x 2 метра для тестирования нагрузки на движок и видеокарту.

    Все консольные утилиты удобнее запускать из Far Manager (или cmd.exe) :)

15. Директивы компиляции

         * ALT_CONTROLS - compile as alternate "level-only" version (ALL)
         * DISABLE_CULL - disable invisible faces culling (ALL)
         * DISABLE_TEXTURING - no texturing support (ALL)
         * COMPACT_NVTS - use nvtristrip library to convert tris to strips (OpenGL)
         * COMPACT_WF - linestrip, for w/frame, speedup for drawmode #0 (ALL)
         * DX_REND - DX8 render (DirectX)
         * SGI_GL - SGI/MMX OpenGL linking (OpenGL)
         * USE_GL10 - OpenGL 1.0 compatibility (OpenGL)
         * USE_CVA - CVA compiled_vertex_array extention (OpenGL)
         * USA_VBO - VBO vertex_buffer_object extension (OpenGL)
         * USE_DXT - DXT1/DXT5 compr. (OpenGL)
         * USE_MIPMAP - use mipmapping (ALL)
         * NO_3DS - no 3ds import/export
         * USE_ANISO - anisothr. filtering (OpenGL)
         * USE_FOG - fog (ALL)
         * USE_SKY - use skyboxes (OpenGL)
         * USE_LOG - verbose logging (ALL)
         * LIMIT_DDS - limit texture size to 256x256 max (3dfx compat?, OpenGL)
         * DISABLE_ARRAYS - don't use glDrawElements(),glDrawArrays() (OpenGL)
         * USE_SUBST - substitute missing textures by generic one (ALL)
         * USE_ALLEG - allegro restrictions
         * NO_SAVE - do not export, save (ALL)
         * USE_ANIM - read and display animations, also ogfv3 bones (wip)
         * USE_SINGLE - single buffering (OpenGL)
         * USE_CONV - do export, save (ALL)
         * USE_ZTRICK - z-trick (OpenGL)

16. История изменений

        Изменения (19.02.2010) :

        OGFViewer: Масштабирование не вызывает геометрических искажений
        OGFViewer: Оси x/y/z yвеличены до 5 единиц
        OGFViewer: Поддержка колесика мыши
        OGFViewer: Исправлена поддержка вложенных (CHILDREN) моделей (напр. wpn_gauss.ogf)
        OGFViewer: Сохранение в *.object
        OGFViewer: Исправлена совместимость с MESA3D OpenGL
        OGFViewer: Исправлены "косяки" с ориентацией тесктур (из-за nv_dds.obj)
        OGFViewer: Снято ограничение DXT-compressed DDS - поддержка ARB_texture_compression не актуальна
        OGF2obj: новая версия

        Изменения (21.02.2010) :

        OGFViewer: Исправлено падение программы при отмене открытия OGF-файла
        OGFViewer: Исправлена точность вращения по левой кнопке мыши
        OGFViewer: Исправлен глюк с "мерцающими" цветами осей и путей DDS
        OGFViewer: режим просмотра wireframe (сетка) / normal по ср.кн.м. (или колесику)

        Изменения (28.02.2010) :

        OGFViewer: Исправлено 8-bit/4-bit OpenGL render
        OGFViewer: Исправлена точность вращения
        OGFViewer: Добавлено управление с клавиатуры
        OGFViewer: Исправлена ошибка: не создавался ogfmodel.mtl
        OGFViewer: Шрифт для DDS: Lucida Console (Normal)
        OGFViewer: Коррекная конвертация "многотекстурных" моделей
        OGF2obj: Коррекная конвертация "многотекстурных" моделей

        Изменения (06.03.2010) :

        OGFViewer: Оптимизация ( удаление невидимых граней, glVertex3fv(), glDrawElements() )
        OGFViewer: Показываем "вменяемую" ошибку glTexImage2D()
        OGFViewer: Ограничение вращений -360.0 ... +360.0
        OGFViewer: Имя файла и версия программы в заголовке окна
        OGFViewer: Цветные подписи ( FPS, dds[?] )
        OGFViewer: Исправлена утечка памяти при загрузке текстур
        OGFViewer: 3 режима фигуры - wireframe, colored, textured
        OGFViewer: Поддержка командной строки, фикс на относительные пути
        OGFViewer: Файл реестра для ассоциации моделей с программой
        OGFViewer: Выбор пути к текстурам по клавише F5
        OGFViewer: При отсутствии OGFViewer.cfg путь по умолчанию - "textures\"
        OGFViewer: "Горячие" клавиши F3 - открыть, F2 - сохранить.

        Изменения (14.03.2010) :

        OGFViewer: Cетка 20x20 метров (как в X-Ray SDK ActorEditor), F1 - в(ы)кл
        OGFViewer: Новое освещение для colored-режима
        OGFViewer: Чтение моделей X-Ray object (частично)
        OGFViewer: Чтение моделей XRay ogf #0x0112 (экспорт-модель из X-Ray SDK)
        OGFViewer: Поддержка до 1000 материалов в модели (veh\niva, veh\mi-26)
        OGFViewer: Исправление управляющих клавиш и движения камеры (см. выше).
        OGFViewer: Поддержка текстур TGA (Targa)
        OGF2obj: Чтение моделей XRay ogf #0x0112 (экспорт-модель из X-Ray SDK)
        OGF2obj: Поддержка до 1000! материалов в модели (veh\niva, veh\mi-26)

        Изменения (21.03.2010) :

        OGFViewer: Свет F9 on/off, шаг движения F7 (*10), F8 (/10), F11 - OpenGL info
        OGFViewer: Считывание bounding box-ов (окр. прямоугольника)
        OGFViewer: Стандартизация форматов 3d векторов, небольшая оптимизация скорости загрузки (для уровней в *.object)
        OGFViewer: Увеличение materialcount до 100000 (для уровней в *.object)
        OGFViewer: Поддержка текстур RGB24 = 8/8/8
        OGFViewer: Поддержка прозрачных текстур (стёкла, фары и т.п., veh\niva)
        OGFViewer: Экспорт в Autodesk ASE, 3DS (только геометрия)
        OGFViewer: Исправлено - утечка при незакрытии файла
        OGFViewer: Импорт Orion engine v1 MSH (1 материал)
        OGFViewer: Исправлено - падение при экспорте object в obj,ase
        OGFViewer: ogfcons3 - тестовая console версия OGFViewer

        Изменения (28.03.2010) :

        OGFViewer: Экспорт в ASE теперь с текстурами
        OGFViewer: Microsoft Directx рендерер (рендерит быстрее GL :), но модели отражаются зеркально :( )
        OGFViewer: SGI GL рендерер (+ opengl.dll, glu.dll), немного быстрее MS GL :)
        OGFViewer: F12 центрирует модель по bounding box
        OGFViewer: в OGF моделях одинаковые текстуры не загружаются повторно

        Изменения (11.04.2010) :

        OGFViewer: Не работаем в 1/4/8-бит цвете (DirectX)
        OGFViewer: Выбор аппаратной/программной отрисовки (DirectX)
        OGFViewer: Теперь все модели ориентированы правильно (DirectX)
        OGFViewer: F4 - режим прозрачности
        OGFViewer: Уточнены коррдинатные системы (dx:x/y/z,gl:x/-y/z)
        OGFViewer: Msh модели теперь ориентированы правильно
        OGFViewer: Загрузка и сохранение в 3DS формат
        OGFViewer: Исправлены ошибки при загрузки 'огромных' объектов (уровни в object)
        OGFViewer: Рендерер на базе allegro gaming library (DOS32/WIN32)

        Изменения (23.04.2010) :

        OGFViewer: Сделано альтернативное управление (в OpenGL - с туманом)
        OGFViewer: Fov = 46.0f (как в S.T.A.L.K.E.R.)
        OGFViewer: Ускорение FPS в wireframe-режиме
        OGFViewer: Исправлены фиктивные ошибки загрузки текстур (OpenGL, MS/SGI)
        OGFViewer: Исправлен СNT-счётчик
        OGFViewer: "Правильное" освещение и "радуга" в colored-режиме (OpenGL)
        OGFViewer: Расчёт нормалей для 3DS/object
        OGFViewer: Оптимизация рендеринга - без задержек (glFlush/glFinish), VBO (OpenGL)
        OGFViewer: Многопроцессорность в рендерере (DirectX)
        OGFViewer: Исправлен перебор текстур в object-моделях (DirectX)
        OGFViewer: Не вылетаем с ошибкой при выходе из проги :) (DirectX)
        OGFViewer: Текущая версия требует наличия расширения GL_ARB_vertex_buffer_object (OpenGL)
        OGFViewer: Исправлено обработка сообщений палитры в 8-bpp (OpenGL, MS)
        OGFViewer: Приложена новая библиотека Mesa3D 7.3 (стандарт OpenGL 2.1)
        OGFViewer: Шрифт сообщений - "Verdana"

        Изменения (10.05.2010) :

        MeshConv: Исправлен экспорт моделей
        OGFViewer: CNT-cчетчик форматируется корректно (000xxx.00)
        OGFViewer: Исправлен расчёт нормалей, при отключенном свете они не нужны
        OGFViewer: Изменения состояний и свет считаем один раз
        OGFViewer: [ * ] на цифровой клавиатуре меняет цвет фона
        OGFViewer: [ / ] на цифровой клавиатуре меняет гамма-коррекцию
        OGFViewer: Дальность обзора - 300 метров
        OGFViewer: Туман - 100...300 метров (OpenGL)
        OGFViewer: Не запускаем glGetError() без необходимости (OpenGL)
        OGFViewer: Неточность при запуске glNewList() (OpenGL)
        OGFViewer: Поддержка света (DirectX)
        OGFViewer: Исправлен выбор пути для текстур
        OGFViewer: Исправлен расчёт текстурных координат для object
        OGFViewer: Корректный выход из программы при открытии "битых" object-файлов
        OGFViewer: Теперь умеем читать object-модели с костями (spesnaz_run.object)
        OGFViewer: Ускорена загрузка текстур у object моделей
        OGFViewer: Существенно ускорена загрузка текстур у Orion engine v1 моделей
        OGFViewer: Теперь умеем читать Orion engine v1 модели без привязанных текстур
        OGFViewer: Отключаем сглаживание (blending) для terrain-текстур
        OGFViewer: Для ускорения вращения/движения сцены сбрасываем настройки качества на минимум
        OGFViewer: Исправлено форматирование в выходном файле экспорта (ASE-формат)
        OGFViewer: В обычной версии временно включена поддержка VBO + mipmap-сглаживание (OpenGL)
        OGFViewer: В ALT-версии временно включено mipmap-сглаживание (OpenGL)

        Изменения (26.05.2010) :

        OGFViewer: Моделей с "встроенными" анимациями (cat.ogf) считываются без лишней геометрии
        OGFViewer: Экспорт в HalfLife SMD (cтатика + текстуры)
        OGFViewer: Корректно считываем блоки 0x1008, 0x1012 (object)
        OGFViewer: Скорректированы трансформации и вращение (DirectX)
        OGFViewer: Исправлено незакрытие ogf-файлов
        OGFViewer: Унифицировано управление (OpenGL <-> DirectX)
        OGFViewer: Новая документация (каталог \REF)
        OGFViewer: Cчитаем что везде красная ось - X, зеленая ось - Y, синяя ось - Z
        OGFСons: Убраны буквы осей X,Y,Z
        parse_lev: Новая утилита, анализирующая геометрию уровней
        parse_obj, parse_ogf, parse_msh: Утилиты, анализирующая структуру моделей
        OGF2SMDa: "воскрешен" экспорт OGF,OMF анимаций в HalfLife SMD (на базе OGF2SMD SRC 2.03)
        OGF2SMDa: Читаем все модели OGFv4 (2215, ТЧ, ЧН, ЗП)
        OGF2SMDa: Читаем OMF ('copy /b man.ogf + man_animation.omf man_full.ogf', затем 'OGF2SMDa man_full.ogf')
        OGF2SMDa: Для "беспозвоночных" моделей формируются фейковые кости
        OGF2SMDa: Модели и текстуры ориентированы правильно

        Изменения (25.07.2010) :

        OGFViewer: убраны лишние вызовы RenderScene(), txload()
        OGFViewer: Cоздаем координаты p,n,t однократно
        OGFViewer: Общая оптимизация утилитой Мicrosoft Prefast
        OGFViewer: Работает статусная строка
        OGFViewer: Балансировка альт. версии - работает DXT, но отключен мипмэппинг
        OGFViewer: Для скорости удаление невидимых линий включено, может вызывать глюки на уровнях
        OGFViewer: Опция использовать программный рендерер (OpenGL)
        OGFViewer: Инфо панель (F11) показывыет тип акселерации (OpenGL)
        OGFViewer: Более темный цвет материала, может ухудшаться освещение в colored-режиме (DirectX)
        OGFViewer: Текстуре воды (water*) не нужен блендинг (карта limansk)
        OGFViewer: Aвтомасштабирования текстур "вниз" для поддержки старых видеокарт (3Dfx, ATI Rage, Trident, S3)
        OGFViewer: Исправлены ошибки в программном редеринге 16bpp (MS OpenGL)
        OGFViewer: Не перерисовываем экран при нажатии < KPad / > "Гамма"
        OGFViewer: FOV меняется 45-60-75-90 (шаг 15), < KPad 5 >
        OGFViewer: Глубина обзора - 0.2/500.0 метров - базовая, 1.0/500.0 метров - альтернативная
        OGFViewer: Туман 100 - 500 метров (OpenGL)
        OGFViewer: Альфасмешивание в альт. версии (OpenGL)
        OGFViewer: Новые директивы компиляции USE_ANISO, NO_3DS, USE_GL10
        glxinfo: новая информационная утилита для OpenGL
        glxinfo: испралены глюки glxinfo на картах nVidiа
        parse_lev: исправленная версия, в перспективе войдет в состав парсера OGFViewer

        Изменения (15.08.2010) :

        parse_lev: Cчитывание level-ов (билды 2xxx, 3xxx), и конвертация их в ogf
        OGFViewer: Клавиша FOV - < F5 >
        OGFViewer: Глубина обзора - 0.2/500.0 метров - базовая, 0.2/1500.0 метров - альтернативная
        OGFViewer: В некоторых текстурах просвечивает фон заднего плана :(
        OGFViewer: Разбор шейдеров, материалов
        OGFViewer: Текстуры грузятся отдельно от модели, пригодится для анимаций
        OGFViewer: Текстурирование работает в OpenGL 1.0
        OGFViewer: Несколько путей до текстур в ogfviewer.cfg
        OGFViewer: Поддержка текстур PNG, BMP
        OGFViewer: Туман (DirectX, alt)
        OGFViewer: Клавиша < F9 > в colored-режиме в(ы)ключает освещение.
        OGFViewer: Клавиша < F9 > в textured-режиме в(ы)ключает фары, светильники, и проч.
        OGFViewer: Очередная бета DOS32-версии OGFViewer :)
        OGFViewer: Исправлены глюки с alphablend (DirectX)
        OGFViewer: Клавиша < F1 > показывает список материалов и шейдеров, в командной строке - статистика
        OGFViewer: В ALT-версия рисуется небо (текстуры sky?.dds положить в textures\sky)
        OGFViewer: ALT-версия значится в заголовке как 1.0.5@ (базовая без @)

        Изменения (27.08.2010) :

        OGFViewer: Правильная ориентация граней в cubemap-е неба, промо-версия (GL)
        OGFViewer: Клавиши < W >< A >< S >< D > - управление с клавиатуры
        OGFViewer: Ogfview.cfg - сначала ищем в каталоге программы, затем в каталоге запуска
        OGFViewer: Cетка перемещается вместе с моделью
        OGFViewer: Новый механизм удаления невидимых объектов в альт. версии (видимы только объекты перед наблюдателем на дистанции 150m)
        OGFViewer: Альфасмешивание включено всегда
        OGFViewer: Не переключаем мипмэппинг при движении сцены
        OGFViewer: Клавиша < F4 > теперь управляет освещением/фарами
        OGFViewer: Клавиша < F9 > переключает фильтрацию текстур
        OGFViewer: Рассчитываем bounding box и bounding sphere, radius для ogf, object
        OGFViewer: Не рисуем сцену после < F7 >, < F8 >, < F11 >
        OGFViewer: Автонормализация векторов в mode #1
        OGFViewer: Количество материалов ограничено до максимум 500
        OGFViewer: Количество объектов в модели ограничено до максимум 15000

        Изменения (13.11.2010) :

        OGFViewer: Skybox cubemap (DirectX, alt, Promo)
        OGFViewer: Корректное отсечение невидимых объектов на 150м (alt)
        OGFViewer: Исправлена медленная загрузка программы при отсутствии текстур
        OGFViewer: Сжатие/оптимизация линий в drawmode#0 быстрее
        OGFViewer: Не используем OpenGL glCallList() в OpenGL 1.0 (GL)
        OGFViewer: Отключаем drawmode#2 если disable_texturing=1 (DirectX)
        OGFViewer: Выложен подробный FAQ / README по OGFVIEWER
        OGFViewer: Исправлено падение на выходе (Allegro)
        OGFViewer: Новая версия библиотеки DevIL (OpenIL) 1.7.8, поддержка новых форматов (GL)
        OGFViewer: Общая оптимизация переменных
        OGFViewer: Корректное перемещение свободной камеры (alt)
        OGFViewer: Клавиша "N" отключает отсечение невидимых объектов на 150м (alt)
        OGFViewer: Увеличен радиус вращения с 1 до 5 углов (alt)
        OGFViewer: Клавиша "L" управляет светом, фарами
        OGFViewer: Клавиша "I" - информация о рендерере
        OGFViewer: Клавиша "F11" - полный экран
        OGFViewer: Клавиша "F6" - "качество" картинки
        OGFViewer: Расчет радиуса для ogfv3, object
        OGFViewer: Корректное отсечение прозрачных объектов в object-уровнях (alt)
        OGFViewer: Считываем всех IFF-секций (на потом)

        Изменения (26.12.2010) :

        [New features]
        OGFViewer: Единственный источник света в ALT-версии (drawmode #1)
        OGFViewer: Новое меню, кнопки (отдельно base/alt), MFC-иконка теперь видна
        OGFViewer: Не используется отсечение невидимых граней для прозрачных объектов
        OGFViewer: Опциональная поддержка single-buffering (GL)
        OGFViewer: Поддержка ogfv3 тип 0x00000112, формат AE/LE 1xxx
        OGFViewer: Начальная позиция камеры 0,-3(или 3),-10 - согласно GSC AE/LE (alt)
        OGFViewer: Дистанция отсечения base/alt ~150 м
        OGFViewer: Дистанция отсечения (alt+fog) alt версии 200 м
        OGFViewer: Дистанция отсечения (alt+sky) promo версии 1500 м
        OGFViewer: Поддержка 32,24 bpp ZBuffer (DirectX, alt)
        OGFViewer: ZBuffer info по клавише "I" (GL)
        OGFViewer: Клавиша "M" - дамп статистики в object.log
        OGFViewer: Переделан счетчик FPS/ms
        meshconv: Новая утилита для конвертации
        make_ogf: Новая утилита для создания тестовых бенчмарк OGF моделей из "мусора"
        ogfdos16: Поддержка OpenWatcom compiler

        [Fixed bugs]
        OGFViewer: В диалоге открытия файла показываются по маске все поддерживаемые форматы
        OGFViewer: При экспорте в wavefront obj одинаковое имя для obj- и mtl- файлов
        OGFViewer: В режиме VBO работает отключение vsync (GL)
        OGFViewer: Новый порядок отрисовки drawmode #2 - сначала "обычные" меши, затем меши с alphablend
        OGFViewer: Корректная отрисовка water, wallmarks, down skybox в drawmode #2
        OGFViewer: Блокируется F12 если модель не загружена (base)
        OGFViewer: ilShutdown() на выходе (GL)
        OGFViewer: Баги GL 1.0 (single-(multi-)texture, mipmap, visible[], proxy, txload() err chk)
        OGFViewer: Не отсекались невидимые грани в drawmode #2 - GL_CULL_FACE (GL)
        OGFViewer: Карты nVidia требуют glFinish() перед выводом в GDI (GL)
        OGFViewer: Предустановка света только для drawmode #1
        parse_lev: Корректный экспорт в OGF без "мусора" (учёт swidata, swicntr)

        [Optimizations]
        OGFViewer: Вызываем SetTexture(NULL) один раз (DirectX)
        OGFViewer: Не грузить текстуры повторно если у них один растр, а шейдеры разные
        OGFViewer: Исправлена ошибка в классах MFC - OnXXX (palettes, m/wheel)
        OGFViewer: Не используем Lstr... функции (Lstr... -> str...)
        OGFCons: Не линкуем MFCxx.LIB
        OGFViewer: Не используем нормали в drawmode #2 (GL)
        OGFViewer: Опция USE_ZTRICK для ATIRage, Permedia, 3Dfx (GL)
        OGFViewer: Отдельная функция для выгрузки иодели
        OGFViewer: Начата поддержка экспорта в LWO формат

17. Планы

        Чтение анимаций (ogf,omf), секций S_BONE_NAMES, S_IKDATA, S_MOTIONS
        Чтение анимаций (object,skl,bones)
        Чтение particles
        Чтение level из билдов 1xxx (XRLC формат 0x0C и ранее)
        Импорт/экспорт *.lwo (LightWave3D)
        Импорт/экспорт плагин для 3DSMax, Maya
        Экспорт в *.ogf/*.object (XRay SDK)
        Fullscreen режим (есть OpenGL бета - ogffscr.exe)
        Полностью программный рендерер.
        Ini-фaйл для OGFViewer (meshtool.ini?)
        Версия для OS/2, DOS32, Linux (есть беты DOS32 - allegro+djgpp, dos16 и OS2 - OpenGL)

18. Использованные материалы и благодарности

        batya: исходники OGFViewer 1.0.2 (26 Nov 2006)
        batya: исходники LevelEditor 0.0.2 (07 Apr 2007)
        bardak: исходники X-RAY RE-Tools-SRC (10 Sep 2008)
        kasper, haron: исходники OGF2SMD SRC 2.03
        Stalkerin wiki: http://stalkerin.gameru.net/wiki/index.php/Категория:Форматы_файлов
        Wavefront obj format: http://en.wikipedia.org/wiki/Obj
        Wavefront mtl format: http://en.wikipedia.org/wiki/Material_Template_Library
        OpenIL: http://openil.sourceforge.net/, DDS,TGA reading support
        lib3ds: http://lib3ds.sourceforge.net, 3DS import, export
        Mesa3D: http://www.mesa3d.org/, software OpenGL
        SGI OpenGL 1.1.1/MMX (ver 2.0): opengl2.exe
        TransGaming SwiftShader (ver 2.01): http://www.transgaming.com/business/swiftshader/technology/
        Realtech OpenGL Extensions Viewer: http://www.realtech-vr.com/glview/
        Realtech VR DXGL Wrapper: http://www.realtech-vr.com/directx/
        ATI Radeon 9700 OpenGL SDK: http://developer.amd.com/downloads/Gl_sdk.zip
        GL_ARB_vertex_buffer_object: http://www.nvidia.com/dev_content/nvopenglspecs/GL_ARB_vertex_buffer_object.txt
        GL_EXT_compiled_vertex_array: http://www.opengl.org/registry/specs/EXT/compiled_vertex_array.txt
        GL_ARB_texture_compression: http://www.opengl.org/registry/specs/ARB/texture_compression.txt
        GL_SGIS_generate_mipmap: http://www.opengl.org/registry/specs/SGIS/generate_mipmap.txt
        GL_EXT_cull_vertex: http://www.opengl.org/registry/specs/EXT/cull_vertex.txt
        Graphic Remedy gDEBugger version 4.5: http://www.gremedy.com/
        GMax 1.2, free game modeling tool (3DSMax compatible): http://www.turbosquid.com/gmax/
        Blender 3D cross platform suite: http://www.blender.org/
        NVIDIA DDS plug-in: http://www.nvidia.com/object/photoshop_dds_plugins.html
        NvTriStrip Library: http://developer.nvidia.com/object/nvtristrip_library.html
        Allegro - A game programming library: http://alleg.sourceforge.net/
        UniLink: ftp://ftp.styx.cabel.net/pub/UniLink (by Юрий Харон)
        level format: http://haperpage.narod.ru/format/
        level format: http://www.gamedev.ru/community/gde/articles/
        camera: http://pmg.org.ru/nehe/nehe_camera.htm
        culling: http://www.flipcode.com/archives/Frustum_Culling.shtml
        lwo format: http://www.sandbox.de/osg/lightwave.htm
        soft. raster.: http://pmg.org.ru/basic3d/index.html
        VBO whitepaper: http://www.spec.org/gwpg/gpc.static/vbo_whitepaper.html
        "Batch": http://developer.nvidia.com/docs/io/8230/batchbatchbatch.pdf
        Techland MiniGL driver: http://www.techlandsoft.com/english/minigl. htm
        GLIntercept v0.5: http://glintercept.nutty.org/
        OpenGL on OS/2: http://www.edm2.com/common/authors/pnewhook.html

    2011.02.xx