HLFX.Ru Forum Страницы (2): « 1 [2]
Показать все 223 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- Нубские вопросы (https://hlfx.ru/forum/showthread.php?threadid=2218)


Отправлено erfty 07-03-2023 в 20:48:

если сделал эффекты opengl, ьудут ли они работать в других режимах(софтварь, directx)?


Отправлено XaeroX 07-03-2023 в 21:02:

erfty
конечно будут, но только если ты из них переключишься обратно в opengl, посмотришь эффект, а потом обратно в софтварь/directx вернёшься.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено erfty 07-03-2023 в 21:06:

Цитата:
XaeroX писал:
erfty
конечно будут, но только если ты из них переключишься обратно в opengl, посмотришь эффект, а потом обратно в софтварь/directx вернёшься.

понятно, то есть нет универсального решения для всех рендерингов. Эхххх а блум эфыект есть туториал как сделать?


Отправлено XaeroX 07-03-2023 в 21:36:

erfty
Нет универсального решения, надо делать отдельно под каждый рендеринг.
Особенно проблематичен софтвар, т.к. там довольно жёсткие лимиты по производительности.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено erfty 08-03-2023 в 08:02:

а там хоть какие то сходства есть? Иль нужно с нуля переучиваттся с opengl на софтварь/directX?


Отправлено KiQ 10-03-2023 в 21:06:

Цитата:
Дядя Миша писал:
Камера или изометрическая или 3Д, ты определись. Изометрия не юзает перспективу поидее. Следовательно и FOV там нет.

Карта изометрическая, то бишь из плоских тайлов. А камера 3D с углом в 45 градусов для имитации классической изометрии.

Цитата:
Дядя Миша писал:
вот у меня с меню такая же фигня и тоже еще не решил как лучше.

Для всяких форм просто формулу расчёта с привязкой к ширине/высоте экрана. Как это сделано в вебе для адаптивных сайтов, используются единицы vw, vh, завязанные на размер вьюпорта браузера. И второй вариант, как это всегда раньше делалось, элементы меню разбивались на тайлы, навроде "верхний левый угол", "вертикальная стенка", "левый нижний угол", ну и потом комбинировались

Цитата:
erfty писал:
понятно, то есть нет универсального решения для всех рендерингов

В HLSDK есть TriAPI, по идее. Но он весьма ограничен и без шейдеров, конечно

__________________
-Brain is dead-


Отправлено XaeroX 10-03-2023 в 21:30:

Цитата:
KiQ писал:
Но он весьма ограничен и без шейдеров, конечно

Да. Блум в софтваре сделать ещё можно (как вы видели в Headcrab Frenzy), но что-то серьёзнее, увы, проблематично.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено KiQ 10-03-2023 в 22:05:

XaeroX к слову, насколько сейчас критично использование кэша шейдеров вместо компиляции налету? Просто, насколько я помню, в той же Паранойе убер-шейдеры собирались прямо во время загрузки уровня. А допустим, кто-то захочет прикрутить в TriAPI шейдеры, логичнее для этого использовать какой-то универсальный язык, по типу того, что был в системе материалов в третьей кваке, а затем уже компилировать в зависимости от выбранного рендера. И вот тогда вопрос, когда лучше проводить эту компиляцию

__________________
-Brain is dead-


Отправлено XaeroX 11-03-2023 в 00:51:

KiQ
Мне кажется, сейчас главное - сделать быстро (в плане скорости разработки) и правильно (без багов). А оптимизировать такие моменты, как кеширование бинарников, можно и потом, если удастся убедить менеджмент в том, что это вообще нужно, с цифрами статистики...

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено KiQ 11-03-2023 в 14:29:

XaeroX но по идее оптимизация должна закладываться уже на уровне прототипа? Или не должна?

__________________
-Brain is dead-


Отправлено SNMetamorph 12-03-2023 в 12:13:

Цитата:
KiQ писал:
А допустим, кто-то захочет прикрутить в TriAPI шейдеры, логичнее для этого использовать какой-то универсальный язык, по типу того, что был в системе материалов в третьей кваке, а затем уже компилировать в зависимости от выбранного рендера.

А нету таких языков. Вот байт-код универсальный есть, да. SPIR-V называется. Но он в OpenGL поддерживается только в самых крайних версиях.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено XaeroX 12-03-2023 в 12:23:

Цитата:
SNMetamorph писал:
А нету таких языков

Cg

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено KiQ 12-03-2023 в 17:52:

SNMetamorph я не совсем о том гвоорил. Я имел в виду, что самому разработать упрощённый шейдерный язык с конечным значением основных комманд и два транслятора, в GLSL и что там в директе используется

__________________
-Brain is dead-


Отправлено XaeroX 12-03-2023 в 18:10:

KiQ
Так я не понял, чем вас Cg не устраивает?
В Volatile шейдеры при сборке компилируются сразу в большое число профилей, часть из которых D3D, а часть GL. Соответственно, простые эффекты будут работать на условной GeForceFX, ну а сложные используют всё преимущество полноценного ветвления, неразвёртываемых циклов и других радостей модели 3+.

C++ Source Code:
1
enum {
2
  PROG_PROFILE_UNKNOWN,
3
  PROG_PROFILE_VS_2_0,
4
  PROG_PROFILE_VS_2_X,
5
  PROG_PROFILE_VS_3_0,
6
  PROG_PROFILE_VS_4_0,
7
  PROG_PROFILE_VS_5_0,
8
  PROG_PROFILE_ARBVP1,
9
  PROG_PROFILE_GP4VP,
10
  PROG_PROFILE_GP5VP,
11
  PROG_PROFILE_GLSLV,
12
  PROG_PROFILE_GLSLV3,
13
  PROG_PROFILE_PS_2_0,
14
  PROG_PROFILE_PS_2_X,
15
  PROG_PROFILE_PS_3_0,
16
  PROG_PROFILE_PS_4_0,
17
  PROG_PROFILE_PS_5_0,
18
  PROG_PROFILE_ARBFP1,
19
  PROG_PROFILE_GP4FP,
20
  PROG_PROFILE_GP5FP,
21
  PROG_PROFILE_GLSLF,
22
  PROG_PROFILE_GLSLF3,
23
  PROG_NUM_PROFILES
24
};

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено KiQ 12-03-2023 в 19:03:

XaeroX помню ещё пытался с Cg водичкой для халфы разобраться, и как-то сразу мне оно не зашло именно тем, что это C for graphics. Отсюда и издержки синтаксиса и в целом некая перегруженность. Я же имел в виду некий высокоуровневый универсальный язык, который может транслироваться в API-зависимые конструкции. В общем, скриптинг для шейдеров. Старый GLSL был к этому приближен, потом в него тоже ввели кучу нагромождений типа чтобы отвязать от фиксированного пайплайна. В итоге да, контроль есть, а удобства уже такого нет. Все эти раскладки переменных и т.д, которые нужно делать вручную. Это мне напомнило переход от LWJGL2 к LWJGL3. Да, дали значительно больше контроля, но теперь вместо условного Display.create() нужно прописывать по сути те же обёртки над GL, так и спрашивается, на кой чёрт такой фреймворк, который заставляет делать пользователя то же самое, только переименованными методами?

__________________
-Brain is dead-


Отправлено Дядя Миша 13-03-2023 в 05:28:

Старый GLSL по прежнему можно использовать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено 0r@ngE 13-03-2023 в 19:32:

Вопрос к XaeroX - гуглил "oblique frustum with inversed depth" и ничего толком не нашел, кроме, походу, твоей работы по линеаризации глубины в шейдере при юзании oblique frustum с инвертированной глубиной (потому что сам по себе oblique frustum там портит глубину и потому Unigine от него отказались)

К чему это я - не подскажешь как подправить оригинальный код Эрика для модификации матрицы проекции если эта самая матрица уже с инвертированной глубиной ?

У меня в рендере юзается инвертированный депс, и я пытаюсь запилить зеркало, если оно попадает во фрустум - отражаю камеру и рисую в рендертаргет, потом шлепаю на это зеркало.
Хочу клипать все по этому зеркалу чтоб не рисовалось то что за ним, и потому подумаю использовать oblique frustum, но кривизна рук и бедность мозга не позволяет получить результат.


Отправлено XaeroX 13-03-2023 в 19:45:

Цитата:
0r@ngE писал:
потому что сам по себе oblique frustum там портит глубину и потому Unigine от него отказались

Ничего он не портит, что за глупости? Прекрасно она линеаризуется, что я в статье и показал.
Собственно, я и писал статью для тех, кто пугается "порчи" глубины и не хочет закапываться в матан.
Цитата:
0r@ngE писал:
не подскажешь как подправить оригинальный код Эрика для модификации матрицы проекции если эта самая матрица уже с инвертированной глубиной ?

К сожалению, у меня нет необходимых формул, но полагаю, что ты можешь проделать те же выкладки, что в статье, с учётом отличий в матрице проекции. Они вроде не критичные.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено 0r@ngE 13-03-2023 в 19:52:

Цитата:
XaeroX писал:
К сожалению, у меня нет необходимых формул, но полагаю, что ты можешь проделать те же выкладки, что в статье, с учётом отличий в матрице проекции. Они вроде не критичные.


Проблема в том, что я сделал, но ничего не клипается, объекты за плоскостью зеркала рисуются, а не должны по идее.

code:
// See: Oblique frustum: Eric Lengyel static void ClipProjectionMatrix(const Matrix& matView, Matrix& matProj, const Plane& inClipPlane) { Plane transformedPlane = matView.TransformPlane(inClipPlane); Vector clipPlane(transformedPlane.Normal()); clipPlane.SetScalar(3, -transformedPlane.Distance()); // Calculate the clip-space corner point opposite the clipping plane // as (Sgn(clipPlane.x), Sgn(clipPlane.y), 1, 1) and // transform it into camera space by multiplying it // by the inverse of the projection matrix float m0 = matProj.GetScalar(0, 0); float m5 = matProj.GetScalar(1, 1); float m8 = matProj.GetScalar(2, 0); float m9 = matProj.GetScalar(2, 1); float m10 = matProj.GetScalar(2, 2); float m14 = matProj.GetScalar(3, 2); Vector q ( (Sgn(clipPlane.GetScalar(0)) + m8) / m0, (Sgn(clipPlane.GetScalar(1)) + m9) / m5, 1.0f, (1.0f - m10) / m14 ); // Calculate the scaled plane vector Vector c = clipPlane * (1.0f / clipPlane.Dot4(q)); // Replace the third row of the projection matrix matProj.SetScalar(0, 2, -c.GetScalar(0)); matProj.SetScalar(1, 2, -c.GetScalar(1)); matProj.SetScalar(2, 2, -c.GetScalar(2)); matProj.SetScalar(3, 2, c.GetScalar(3)); }


Отправлено XaeroX 13-03-2023 в 19:58:

0r@ngE
Для начала рекомендую вернуть обычную (не инвертированную) матрицу проекции и убедиться, что oblique clipping в принципе работает. А уж потом можно будет доработать для инверсии.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено Дядя Миша 13-03-2023 в 20:05:

Цитата:
0r@ngE писал:
Хочу клипать все по этому зеркалу чтоб не рисовалось то что за ним

При правильной реализации это автоматически получается.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено 0r@ngE 13-03-2023 в 20:36:

Цитата:
XaeroX писал:
Для начала рекомендую вернуть обычную (не инвертированную) матрицу проекции и убедиться, что oblique clipping в принципе работает. А уж потом можно будет доработать для инверсии.

Да вот сижу откручиваю инвертированную глубину назад чтоб проверить.

Цитата:
Дядя Миша писал:
При правильной реализации это автоматически получается.

В смысле? Мы модифицируем near plane чтоб оно клипалось, ибо clip planes умерли вместе с fixed pipeline. В этом и есть смысле oblique frustum. Проблема в том чтоб адаптировать его для проекционной матрицы которая построена для инвертированной глубины (считай far и near поменяны местами)


Отправлено Дядя Миша 13-03-2023 в 20:42:

Цитата:
0r@ngE писал:
ибо clip planes умерли вместе с fixed pipeline

Да нет, они по прежнему работают. Ну по крайней мере в режиме совместимости.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено 0r@ngE 13-03-2023 в 20:43:

XaeroX

Открутил inversed depth (он тут у меня везде прибит гвоздями), вернул оригинальную функцию и теперь все клипается как положено.
Отличия моего кода от оригинального от Эрика только в том, что у него там OpenGL, и потому clip space depth в [-1;1] а у меня Vulkan и [0;1]

code:
// See: Oblique frustum: Eric Lengyel static void ClipProjectionMatrix(const Matrix& matView, Matrix& matProj, const Plane& inClipPlane) { Plane transformedPlane = matView.TransformPlane(inClipPlane); Vector clipPlane(transformedPlane.Normal()); clipPlane.SetScalar(3, -transformedPlane.Distance()); // Calculate the clip-space corner point opposite the clipping plane // as (Sgn(clipPlane.x), Sgn(clipPlane.y), 1, 1) and // transform it into camera space by multiplying it // by the inverse of the projection matrix float m0 = matProj.GetScalar(0, 0); float m5 = matProj.GetScalar(1, 1); float m8 = matProj.GetScalar(2, 0); float m9 = matProj.GetScalar(2, 1); float m10 = matProj.GetScalar(2, 2); float m14 = matProj.GetScalar(3, 2); Vector q ( (Sgn(clipPlane.GetScalar(0)) + m8) / m0, (Sgn(clipPlane.GetScalar(1)) + m9) / m5, -1.0f, (1.0f + m10) / m14 ); // Calculate the scaled plane vector Vector c = clipPlane * (1.0f / clipPlane.Dot4(q)); // Replace the third row of the projection matrix matProj.SetScalar(0, 2, c.GetScalar(0)); matProj.SetScalar(1, 2, c.GetScalar(1)); matProj.SetScalar(2, 2, c.GetScalar(2)); matProj.SetScalar(3, 2, c.GetScalar(3)); }


Задача в том, чтоб ее адаптировать под inversed depth (который уже в matProj), и вот тут я чот буксую к сожалению.

Подумал раз ты в Volatile Engine это сделал, может подскажешь


Отправлено 0r@ngE 14-03-2023 в 14:03:

Вопрос отпадает всем спасибо, ночь выдалась продуктивной порешал.


Отправлено XaeroX 14-03-2023 в 14:32:

0r@ngE
Поделись тогда уж формулами с народом, вдруг кому пригодится.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено erfty 20-03-2023 в 11:33:

Что выбрать для 3д рендеринга, SDL иль Opengl? По критериям поддерживаемых устройств и производительности.


Отправлено FiEctro 28-03-2023 в 08:23:

Такой вопрос, есть уровень 2д из тайлов, например размером 100х100 тайлов, что будет лучше, склеить их в одну картинку при загрузке или отрисовать все 10000 прямоугольников отдельно с текстурой тайлов? При том учитывая что текстура одного тайла может быть например 256x256 пикселей, и я так посчитал что клеить их в одну текстуру что то уж дофига большое разрешение получается. Отрисовка DirectX 9.


Отправлено ZGreen 28-03-2023 в 09:06:

Исходя из информации (слухах) о принципах работы современных видеокарт, тебе надо надо все склеивать в атласы максимально возможного размера.

Добавлено 28-03-2023 в 16:06:

И не при загрузке, а при вгрузке надо склеить. Кстати, 10000 уникальных тайлов это крутовато, у тебя пример просто теоретический?


Отправлено FiEctro 28-03-2023 в 10:18:

Цитата:
ZGreen писал:
10000 уникальных тайлов это крутовато


Не обязательно уникальных. Просто 10000 вызовов отрисовки спрайтов в цикле.

Цитата:
ZGreen писал:
Исходя из информации (слухах) о принципах работы современных видеокарт, тебе надо надо все склеивать в атласы максимально возможного размера.


Это так сейчас и реализовано, но пугает разрешение картинки в 25к. Оно же в несжатом виде ещё в оперативку грузится и занимает в районе гигабайта - полтора. А это только 1 слой, таких слоёв может быть с десяток. ФПС вроде как особо и не падает от этого. Но интересно какие видеокарты держат картинки такого разрешения, а какие нет? Плюс сама склейка с загрузкой в память происходит довольно долго, около 10 секунд.


Хотя не, вру. Если запускать вне студии, то проект при сшивании жрёт чуть больше 100мб ОЗУ и потом падает до 40мб, но всеравно сшивает долго.


Отправлено Дядя Миша 28-03-2023 в 12:02:

Для десяти тысяч квадов, как ни извращайся, но разницу ты не почувствуешь. Ни на десктопах ни на телефонах. Может на RivaTNT была бы разница.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено KiQ 28-03-2023 в 12:05:

FiEctro квады ты можешь отсекать по вьюпорту. Или тебе нужно отобразить их на одном экране? Тогда проще прекалькуляцию в файл произвести, как оверлеи для карт в CS

__________________
-Brain is dead-


Отправлено FiEctro 28-03-2023 в 13:19:

Так такие разрешения картинок слоёв это норма?

Добавлено 28-03-2023 в 16:19:

Цитата:
Дядя Миша писал:
Для десяти тысяч квадов, как ни извращайся, но разницу ты не почувствуешь.


Т.е. лучше их не сшивать? На производительность это никак не повлияет, но при этом увеличит скорость загрузки?

Цитата:
KiQ писал:
FiEctro квады ты можешь отсекать по вьюпорту. Или тебе нужно отобразить их на одном экране? Тогда проще прекалькуляцию в файл произвести, как оверлеи для карт в CS



Мне нужно отрисовать тайловую карту из файла. Для этого делается цикл где каждой клеточки тайла задаётся отдельный спрайт с ссылкой на текстуру и UV координатой. В нашем случае это карта 100х100 клеточек, а значит нужно отрисовать 10000 спрайтов. У всех их одна текстура, но UV сдвинута так чтобы рисовался только нужный участок тайлсета.

И ещё такой вопрос, есть моноширинный шрифт, как лучше к нему хранить оффсеты чтобы потом обрезать лишнюю пустоту, и из моноширинного его сделать обычным? На ум только приходит хранить массив с числом которым нужно вычесть из ширины уже посчитанного чарактера. Может есть более элегантные решения?


Отправлено Дядя Миша 28-03-2023 в 13:36:

Ну вот смотри у тебя картинки вполне кошерного размера и кратные двойке. На кой ляд ты собрался их сшивать?
Лайтмапы сшивают, потому что там куча мелкого дерьма размеров 1х1, 2х7, 5х3 и прочего.

Добавлено 28-03-2023 в 16:34:

Цитата:
FiEctro писал:
В нашем случае это карта 100х100 клеточек, а значит нужно отрисовать 10000 спрайтов

Мысленно представь, что консолька в халфе - это твои десять тысяч тайлов, только вместо картинок - буквы. Оно и в 98-м году не тормозило. А рисовалось точно также - в цикле и по буковке. И до сих пор зачастую рисуются именно так, безо всякой оптимизации. Ну потому что некритично.
Я даже через свою виртуальную машину в меню рисовал эти грёбанные буквы и то не заметил драматического падения производительности.

Добавлено 28-03-2023 в 16:36:

ЗЫ. Если DX уронит фпс во время отрисовки этих тайлов из-за высокой стоимости дипа, я буду очень долго ржать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 28-03-2023 в 13:48:

Цитата:
Дядя Миша писал:
ЗЫ. Если DX уронит фпс во время отрисовки этих тайлов из-за высокой стоимости дипа, я буду очень долго ржать.


А что за дип? Ну будет обидно. Надеюсь ещё не появятся мерзкие щели между тайлами? Я до этого рисовал на виндовсформах, и там если не сшить всё в 1 картинку, в местах стыков спрайтов появлялись щели. И что то вопросу со шрифтами?


Отправлено ZGreen 28-03-2023 в 14:42:

Как из моноширинного сделать обычный? Моноширинные гарнитуры были придуманы для пишущих машинок, чтобы текст нормально смотрелся, потому что там нельзя никак применить кернинг. В наборных шрифтах обычно таблица кернинга хранится в самом файле шрифта, если это, конечно, не корявый рип.


Отправлено Дядя Миша 28-03-2023 в 14:57:

Цитата:
FiEctro писал:
А что за дип?

один вызов Draw Indexed Primitive

Цитата:
FiEctro писал:
Надеюсь ещё не появятся мерзкие щели между тайлами?

Ну если оформишь вертексы в целочисленный формат - обязательно появятся, даже не сомневайся.

Цитата:
FiEctro писал:
Я до этого рисовал на виндовсформах

Округлять не пробовал?

Цитата:
ZGreen писал:
Как из моноширинного сделать обычный?

ДА НЕ КАК!

Добавлено 28-03-2023 в 17:57:

Ну хотя, с учётом современных реалий. Может есть какая-то специально обученная нейросеть?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 28-03-2023 в 15:35:

Цитата:
Дядя Миша писал:
ДА НЕ КАК!


Ну так то можно проверять альфу по высоте в каждом чарактере, и если там нет пикселей удалять весь столбец, но проблема в том что я хз как это средствами директа сделать.


Отправлено ZGreen 28-03-2023 в 16:23:

А в пробеле сколько пикселей?


Отправлено FiEctro 28-03-2023 в 16:45:

ZGreen
Ну логично если в чарактере нет вообще пикселей то это пробел, и его обрезать не надо


Отправлено ZGreen 28-03-2023 в 16:49:

Теперь я потерял нить рассуждения. Можешь описать свою задачу? А то моноширинный шрифт переделать в обычный и т д. Может мы в терминах расходимся? Я некоторое время имел отношение к издательской деятельности и с шрифтами у меня определенные ассоциации. Что имеешь в виду ты?


Отправлено FiEctro 28-03-2023 в 16:53:

ZGreen
Чтобы ширина каждого чарактера была своя. Например символы "I" и "W" имеют разную ширину.


Отправлено ZGreen 28-03-2023 в 16:57:

Очевидно это в откерненых шрифтах интервалы плавают, а в мониширинных нет, на то они и моноширинные. Я так полагаю, что ты берешь какую-то гарнитуру и пишешь как будто шрифт моноширинный и получается убого? Так ты выводи каждый символ с оффсетом, а не пиксели отпиливай. Ну или возьми настоящий моноширинный шрифт и пиши им, будет смотреться нормально

Добавлено 28-03-2023 в 23:57:

code:
I W


По сути одинаковая ширина. Буквы специально так нарисованы, чтобы компенсировать недостатки метода набора.


Отправлено FiEctro 28-03-2023 в 16:59:

ZGreen
Скорее просто расстояние между буквами очень большое. А если их сделать уже, то уже сильнее заметно как это расстояние плавает, ибо в самом шрифте буквы нарисованы разной ширины.

Цитата:
ZGreen писал:
Так ты выводи каждый символ с оффсетом


Так, а где этот оффсет взять?


Отправлено ZGreen 28-03-2023 в 17:01:

У тебя шрифт какой используется, что такие проблемы?


Отправлено FiEctro 28-03-2023 в 17:02:

Цитата:
ZGreen писал:
У тебя шрифт какой используется, что такие проблемы?


Обычная битмаповая картинка, вроде этой: https://www.moddb.com/addons/font-f...-shooters-farts


Отправлено ZGreen 28-03-2023 в 17:03:

Если шрифт с кернингом, можешь в фотошопе сетку покрупнее сделать, набрать символы и в параметрах текста выбрать тип кернинга, оптический или по метрике в шрифте (если есть) ну и там по пикселям посмотреть-посчитать. Так мне было бы проще всего. У меня контейнер шрифтовой разбирать ума не хватат, хотя описания формата в сети, конечно, есть.


Отправлено FiEctro 28-03-2023 в 18:45:

У кого нибудь есть ASCII таблица символов в кодировке UTF-16? Русская раскладка там за 1000 переваливает. Интересно какие там граничащие символы.


Отправлено Дядя Миша 28-03-2023 в 19:47:

Цитата:
FiEctro писал:
Ну так то можно проверять альфу по высоте в каждом чарактере

проверкой альфы ты кернинг не восстановишь.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 28-03-2023 в 19:52:

Дядя Миша
Есть какая нить утилита которая бы могла генерить битмапу и записывать все эти данные в отдельный файл?


Отправлено Дядя Миша 28-03-2023 в 21:30:

Цитата:
FiEctro писал:
Есть какая нить утилита которая бы могла генерить битмапу и записывать все эти данные в отдельный файл?

Есть. В самой первой бете ксаша была утилита для генерации растровых шрифтов.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 29-03-2023 в 21:30:

Дядя Миша
Можно ссылку?


Временная зона GMT. Текущее время 15:31. Страницы (2): « 1 [2]
Показать все 223 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024