Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.20.90] |
|
Сообщ.
#1
,
|
|
|
Прошу писать сюда информацию в будущий FAQ.
Т.к. на некоторые вопросы ответы довольно объемные и воизбежании двойной работы, можно просто написать вопрос, а уже потом поправить сообщение (или мне в привать отослать). |
Сообщ.
#2
,
|
|
|
OpenGL
Вопрос: У меня постоянный (ограниченный) FPS. В чем может быть дело? Ответ: FPS может ограничивать вертикальная развертка монитора. В этом случае FPS не может превышать текущей частоты развертки монитора. Для того, чтобы FPS не ограничивался нужно отключить синхронизацию. Для этого в Windows предназанчены две функции: wglGetSwapIntervalEXT и wglSwapIntervalEXT. int wglGetSwapIntervalEXT(void) // Эта функция возвращает текущую развертку. BOOL wglSwapIntervalEXT(int interval) // Эта функция устанавливает развертку. Дополнительно: Для использования этих функций, уже должен быть установлен контекст OpenGL (wglMakeCurrent). Имя расширения WGL_EXT_swap_control. |
Сообщ.
#3
,
|
|
|
OpenGL
Вопрос: Я написал простейшее приложение, но оно работает очень медленно. В чем причина? Ответ: Причин может несколько: 1. Установленный формат пикселя может не поддерживаться текущим драйвером видеокарты. Чтобы определить поддержку, нужно сделать следующее: // Это небольшая функция, которая определяет аппаратную поддержку #define EMULATION 0 #define PART_ACCEL 1 #define FULL_ACCEL 2 int CheckHardwareSupport(HDC hdc) { int PixelFormat = GetPixelFormat(hdc); PIXELFORMATDESCRIPTOR pfd; DescribePixelFormat(hdc,PixelFormat,sizeof(PIXELFORMATDESCRIPTOR),&pfd); if ((pfd.dwFlags & PFD_GENERIC_FORMAT) && !(pfd.dwFlags & PFD_GENERIC_ACCELERATED)) return EMULATION; // Программная эмуляция OpenGL. else if ((pfd.dwFlags & PFD_GENERIC_FORMAT) && (pfd.dwFlags & PFD_GENERIC_ACCELERATED)) return PART_ACCEL; // Аппартная поддержка только некоторой части функций ( MCD-драйвер ). else if ( !(pfd.dwFlags & PFD_GENERIC_FORMAT) && !(pfd.dwFlags & PFD_GENERIC_ACCELERATED)) return FULL_ACCEL; // Полная аппаратная поддержка ( ICD-драйвер ). } 2. Могут использоваться расширения, которые эмулирует текущий драйвер видеокарты. Для решения этой проблемы, нужно скачать спецификацию видеокарт с сайта производителя. В спецификации обычно указаны какие расширения поддерживаются с какой версии драйверов, а какие эмулируются. 3. Может установлен старый драйвер и нужно всего лишь обновить его. |
Сообщ.
#4
,
|
|
|
DirectGraphics
Вопрос: В чем разница между HAL и REF устройствами Direct3D? Что использовать? Ответ: HAL (Hardware Abstraction Layer) - это основной тип Direct3D устройства, который базируется на аппаратной поддержке функций. REF (REFerence rasterizer) - этот тип устроства не использует аппаратную поддержку и, как следствие, работает медленно. REF device специально предназначен для отладки и тестирования различных функций, которые не поддерживаются аппаратно. Например, для тестирования вершинных/пиксельных шейдеров, которые ваша видеокарта не поддерживает. Или для выявления глюков: если при переходе с HAL на REF глюк исчез, значит виноват драйвер видеокарты, если остался, значит ошибка в вашем приложении. В конечной реализации, конечно, нужно использовать HAL устройство. |
Сообщ.
#5
,
|
|
|
DirectGraphics
Вопрос: Когда я устанавливаю software vertex processing, приложение работает быстрее, чем с hardware. Почему? Ответ: Существует ошибочное мнение, что HVP должен работать быстрее SVP. Это не так. Частота CPU намного превышает частоту GPU, поэтому вершины обрабатываются быстрее. Аппаратная обработка вершин используется для разгрузки CPU. |
Сообщ.
#6
,
|
|
|
DirectGraphics
Вопрос: После установки DirectX SDK в панели управления DX, появляется меню выбора версии Direct3D: Debug или Release (Retail) Run Times. Какая разница и что использовать? Ответ: Debug RT отличается от Release RT следующим: 1. Производится проверка передаваемых параметров. 2. Выводит отладочную информацию (не та которая содержится в exe-файле приложения, а сообщения выводимые окно MSVS). 3. И, конечно же, Debug RT медленнее Release RT. |
Сообщ.
#7
,
|
|
|
DirectGraphics
Вопрос: Что такое D3DX? Как это использовать и стоит ли? Ответ: Direct3D Extension - это дополнительная библиотека, предназначенная для облегчения программирования. В этой библиотеке содержатся математические функции (работа с матрицами, векторами, кватернионами и т.д.), функции работы с текстурами и множество др. полезных интерфейсов. Для небольших проектов это отличная библиотека, которая облегчит жизнь программистам. |
Сообщ.
#8
,
|
|
|
DirectGraphics
Вопрос: Я отлаживаю приложение, но чтобы я ни делал, но я не получаю сообщения от D3DX Library. В чем может быть дело? Ответ: Для отладки приложения лучше использовать Debug версию D3DX. Для этого к проекту нужно прилинковывать d3dx9d.lib. В конечном продукте лучше использовать d3dx9.lib. |
Сообщ.
#9
,
|
|
|
DirectGraphics
Вопрос: Я использую только функции D3DX, вдруг Microsoft уберет или изменит некоторые функции в этой библиотеке, ведь функция - это не COM-интерфейс? Ответ: В виде dll существует только Debug версия D3D Extension Library. Release версия, является статической библиотекой, функции которой присоединяются к приложению и ни от каких dll не зависят. |
Сообщ.
#10
,
|
|
|
DirectGraphics
Вопрос: Когда я рисую пустую сцену, fps = ~2500. Стоит отрисовать один треугольник, как fps падает до 1000. Почему такая большая разница? Ответ: 1. Многое зависит от размера треугольлника: чем больше треугольник, тем больше времени тратится на его растеризацию. 2. Падение с 2500 до 1000 не так страшно, как падение, например, со 100 до 40. К тому же падение fps обычно происходит нелинейно. 3. Измерять производительность приложение fps не очень хорошо. Лучше подходит вариант ft (Frame Time). Время рендера одного кадра лучше покажет производительность. |
Сообщ.
#11
,
|
|
|
OpenGL
Вопрос: Почти у каждого человека, который начинает программировать на OpenGL возникает два вопроса как сделать окно без рамки и поверх других окон(как в играх) и как поменять разрешение экрана Ответ Вот так создает окно без рамки hWnd = CreateWindowEx(WS_EX_TOPMOST,...,..., WS_POPUP | WS_VISIBLE,NULL,NULL, ..., ..., NULL, NULL, hInstance, NULL); А вот функция для смены разрешения: BOOL changeResolution(unsigned int iWidth, unsigned int iHeight) { // Change the resolution DEVMODE dmScreenSettings; // Zero ram to store settings memset(&dmScreenSettings, 0, sizeof(DEVMODE)); // Size of the devmode structure dmScreenSettings.dmSize = sizeof(DEVMODE); // Pixel mode dmScreenSettings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; dmScreenSettings.dmPelsWidth = iWidth; // Screen width dmScreenSettings.dmPelsHeight = iHeight; if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) return FALSE; return TRUE; } changeResolution(640, 480); А чтобы восстановить первоначальное разрешение: changeResolution(NULL, NULL); |
Сообщ.
#12
,
|
|
|
Ссылки по теме
Официальный сайт OpenGL: документация, спецификации, статьи, доп. библиотеки, примеры... http://www.opengl.org/ Империя Зла http://msdn.microsoft.com/ FAQ's (ЧАВО) - от дружественных и враждебных ресурсов SuperVGA/VESA programmer's notes http://www.faqs.org/faqs/pc-hardware-faq/supervga-programming/ FAQ по программированию OpenGL http://faqs.org.ru/progr/graph/opengl.htm FAQ по 3D yскоpителям и каpтам на них http://emanual.ru/get/3871/ FAQ по OpenGL (Elite Games) http://www.elite-games.ru/conference/viewtopic.php?t=35356 DEMO.DESIGN FAQ http://www.enlight.ru/demo/faq/ demo.design 3D programming FAQ http://www.enlight.ru/faq3d/content.htm Глоссарии 3D Глоссарий http://emanual.ru/get/3869/ Глосcарий и термины по цифровому видео, кодекам, сжатию, компрессии, носителям, цифровому вещанию и т.д. Ресурсы по сжатию: статьи и исходники GameDev FAQ для разработчиков игр (Программирование графики, DirectX Graphics (Direct3D), OpenGL, MAX SDK, Графическое оформление) На русском языке: http://www.gamedev.ru/faq/ Графика Графика "вообще": порталы, кватернионы, удаление невидимых граней, фильтрация, векторные/матричные преобразования, стенсельные тени, BSP деревья, Bump mapping, Статичный лайт-меп, частицы, ландшафты, Collision Detection (проверка столкновений), Инверсная кинематика, Скелетная анимация, Эффекты, Библиотеки... DirectX Обзор DirectX9 Direct3D: Первая программа под DirectX9 Урок 1: Создание D3D Устройства Программирование шейдеров на HLSL Вершинные шейдеры OpenGL OpenGL: Основы Основы программирования OpenGL в Borland С++Builder и Delphi. Трансформации в OpenGL Построение теней в OpenGL при помощи теневых буферов Работа с расширениями OpenGL с использованием NVIDIA OpenGL SDK 5.1. (Часть 1) OpenGL: Extensions (Расширения) OpenGL pixel and vertex shaders "Старший брат" этого сайта на англицком: http://www.GameDev.net/ Рекомендованное чтиво для начинающих изучать OpenGL!!! Примеры от Nehe Примеры от NeHe на русском Для продолжающих изучать OpenGL steps3d.narod.ru - статьи о некоторых расширениях OpenGL, шейдерах и не только. OpenGL изнутри Всем, кому интересно как же именно работают функции OpenGL и сопутствующих библиотек (ex. GLU) и по каким формулам происходят рассчеты. OpenGL® Sample Implementation от SGI - реализация API версии 1.2.1. Mesa - современная open source реализация OpenGL API. DELPHI DELPHI / FAQ / Графика http://e-dok.narod.ru/delphi/question1/graf/graf.html DelphiX на GameDev.ru ФАКу расти! Сообщения были разделены в тему "Спам" Сообщение отредактировано: barazuk - 22.04.08, 00:06 |
Сообщ.
#13
,
|
|
|
Библиотеки для работы с растровыми изображенниями
Безусловно, нижеописанными список не ограничивается. Просто лично я имел дело именно с ними, и поэтому могу указать на известные мне возможности/достоинства/недостатки. Просьба к желающим возопить "а вот библиотека ХХХ круче!" Подробные описания (а не сообщения типа "а вот есть еще суперлиба *** - всем рекомендую!") более других библиотек - только приветствуется - я же не могу скачать и освоить ВСЕ имеющиеся библиотеки 1. FreeImage Цитата is a library project for developers who would like to support popular graphics image formats (PNG, JPEG, TIFF, BMP and others). Some highlights are: extremely simple in use, not limited to the local PC (unique FreeImageIO) and Plugin driven! Лицензия: GNU GENERAL PUBLIC LICENSE (Version 2, June 1991) + открытые исходные коды + поддержка плугинов + открытое АПИ для плугинов + поддержка "научных" и специальных изображений с количеством бит на пиксель, большим 8 (32-bit IEEE floating point, 64-bit IEEE floating point, 48 [3 x 16-bit], 64 [4 x 16-bit], 96 [3 x 32-bit IEEE floating point], 128 бит на пиксель [4 x 32-bit IEEE floating point], "комплексные" изображения [2 x 64-bit IEEE floating point]); функции для работы с каналами - FreeImage_GetChannel, FreeImage_SetChannel, FreeImage_GetComplexChannel, FreeImage_SetComplexChannel. + работа с EXIF, IPTC + имеются интерфейсы для сжатия и подсчета CRC32 (FreeImage_ZLibCompress, FreeImage_ZLibUncompress, FreeImage_ZLibGZip, FreeImage_ZLibCRC32, FreeImage_ZlibGUnzip) + открывает/сохраняет файлы с Юникодными именами + умеет работать с "файлами" прямо в памяти (FreeImage_LoadFromMemory, FreeImage_SaveToMemory), что позволяет создавать собственные контейнеры и работать с архивами "на лету" + умеет загружать картинки из "хэндлов" - полностью задаваемые пользователем процедуры открытия/чтения/записи/закрытия. Позволяет реализовать абсолютно любые типц контейнеров/источников данных/что еще придет в голову (FreeImage_LoadFromHandle, FreeImage_SaveToHandle). + умеет определять тип картинки по сигнатуре (группа функций FreeImage_GetFileType*) - не умеет получать информацию о картинке без ее открытия + работа с многостраничными изображениями (лично не проверял) + целых 6 фильтров для ресамплинга (Box, Bilinear, B-Spline, Bicubic, Catmull-Rom, Lanczos) + есть реализация для Alpha Blend (FreeImage_Composite) + мощные функции для квантизации в 8 бит - на основе optimized octree и нейронных сетей (FreeImage_ColorQuantize, FreeImage_ColorQuantizeEx). Последняя функция может квантизовать в произвольное количество цветов + можно передать уже сформированную палитру. Удобно для квантизации в "Web-Safe" цвета. + умеет конвертировать в 16 бит (R5G5B5, R5G6B5). + есть "Tone mapping" - сжатие динамического диапазона изображений 48/96 (соотвественно, 16 либо 32 бита на канал), для отображения на 24-битных устройствах + есть несколько функций для цветокоррекции - FreeImage_AdjustCurve, FreeImage_AdjustGamma, FreeImage_AdjustBrightness, FreeImage_AdjustContrast, FreeImage_Invert, FreeImage_GetHistogram. - нет полутоновых алгоритмов для приведения к черно-белому изображению (HalfTone 45 dithering, HalfTone 90 dithering, Pattern dithering, Floyd-Steinberg dithering, Burkes, Stucki, и [виноват, не помню уже как это называется - передача яркости через размер точек - "клякс", как в газетах]). - нет никаких функций для "рисования" на битмапах - нет никаких "продвинутых" фильтров (General Convolution, Blur, Soften, Median, Average, Gaussian Blur, Sharpen, Emboss, Edge Detect и т.д.) 2. GFL SDK (v2.80) Цитата Is a powerful library for developers who would like to support graphics image formats easily. Лицензия: Freeware for private non-commercial or educational use (including non-profit organization) - закрытые исходные коды + поддержка плугинов - закрытое АПИ для плугинов + набор функций рисования на битмапах (простенько - точка, линия, полилайн, полигон, круг); вывод текста любым шрифтом на картинку (Юникод не поддерживается - только текущая кодовая страница АНСИ); кроме реализованных разработчиками фильтров, имеется возможность создания собственных филтров на основе convolution matrix. - Юникод при выводе текста не поддерживается - только текущая кодовая страница АНСИ + многозадачность + работа с EXIF, IPTC + намного больше (более 100) поддерживаемых форматов (в т.ч. через плугины - JBIG, JPEG-2000 и FlashPix), для меня особенно радостна поддержка RAW-формата моего цифровичка (Canon RAW, CRW). - нет поддрежки Юникода в именах файлов (приходится "обходить" через хэндлы или чтение/сохранение из памяти) + умеет работать с "файлами" прямо в памяти (gflLoadBitmapFromMemory, gflSaveBitmapIntoMemory), что позволяет создавать собственные контейнеры и работать с архивами "на лету" + умеет загружать картинки из "хэндлов" - полностью реализуемые пользователем процедуры открытия/чтения/записи/закрытия. Позволяет реализовать абсолютно любые типы контейнеров/источников данных/что еще придет в голову (gflLoadBitmapFromHandle, gflSaveBitmapIntoHandle) - например, реализовать шифрацию на лету, собственный контейнер или ещё что . + умеет получать информацию о картинке без ее открытия + умеет извлекать или производить thumbnailы заказанного размера - документация местами просто отвратная! Например (версия 2.70), для всех фильтров, кроме gflConvolve, в мане написано: "Applies a filter on a picture. To do." Очень информативно! "Рабочий" диапазон параметров изучается только методом научного тыка. Аналогично сохранение картинок - разобраться, к каким форматам относятся какие установки GFL_SAVE_PARAMS - только методом проб и ошибок. - ! некоторые заявленные в документации функции на самом деле либо не делают ничего, либо делают не совсем то, что заявлено (! проверялось на версии 2.40, в настоящее время, возможно, исправлено). А именно: * не удалось создать анимированную жифку * не все алгоритмы для уменьшния количества цветов реально работают * альфа-наложение заставить работать не удалось * в некоторых "расширенных" функциях "рабочий" диапазон параметров у документации не указан * еще несколько групп нерабочих [или настолько ужасно документированных, что непонятно, как их правильно использовать] функций + работа с изображениями 16 бит на цвет (не проверял) + работа с многостраничными изображениями (чтение - на 5, анимированную жифку создать не удалось) - всего два фильтра для ресамплинга (Box и Bilinear) - слабенькие функции для квантизации в 8 бит - причем многие выдают одинаковый результат. Не реализован даже простой Error Diffusion + заявлены несколько алгоритмов для квантизации в черно-белые полутоновые изображения (не проверял): GFL_MODE_NO_DITHER No dithering GFL_MODE_ADAPTIVE Adaptive without dithering GFL_MODE_PATTERN_DITHER Pattern dithering GFL_MODE_HALTONE45_DITHER HalfTone 45 dithering GFL_MODE_HALTONE90_DITHER HalfTone 90 dithering GFL_MODE_FLOYD_STEINBERG Floyd-Steinberg dithering + до чёрта разных фильтров и функций для цветокоррекции: gflNegative, gflBrightness, gflContrast, gflGamma, gflLogCorrection, gflNormalize, gflEqualize, gflEqualizeOnLuminance, gflBalance, gflAdjust, gflAdjustHLS, gflAutomaticContrast, gflAutomaticLevels, gflSwapColors; gflAverage, gflSoften, gflBlur, gflGaussianBlur, gflMaximum, gflMinimum, gflMedianBox, gflMedianCross, gflSharpen, gflEnhanceDetail, gflEnhanceFocus, gflFocusRestoration, gflEdgeDetectLight, gflEdgeDetectMedium, gflEdgeDetectHeavy, gflEmboss, gflEmbossMore, gflSepia, gflSepiaEx, gflReduceNoise, gflDropShadow, gflConvolve. - поддержка просто никакая Сообщения были разделены в тему "перерисовка экрана" |