Войти
ПрограммированиеФорумГрафика

Растровый шрифт (4 стр)

Страницы: 1 2 3 4 5 Следующая »
#45
18:07, 16 апр 2020

я могу показать как я взяв растровый фонт, конвертнул его через FontCreator Professional 9.0.0 build 1916 и потом получив , через msdf спрайты, рендерю его через шейдеры.
и как бы, качество для глаза идеальное.

#46
18:21, 16 апр 2020

AlexeiK
не вижу 8px
Хотя если ты имел ввиду это:
Изображение
То спасибо за подтверждение моих слов, выглядит как говно.

#47
20:44, 16 апр 2020

Где же говно?
СПрава все читаемо.
Не понял, твоих оценок.

https://github.com/Chlumsky/msdfgen/issues/22#issuecomment-250830853
вот этот коммент смотри.
ты ищи , то что опровергает твой взгляд, а  не подтверждает.
тогда найдешь.

#48
21:56, 16 апр 2020

AlexeiK
> Где же говно?
> СПрава все читаемо.
> Не понял, твоих оценок.
ты не видишь мыла? И это далеко не 8px, просто то что нашлось самого малого размера. Нарисовать более менее сносный текст с 12pt+ куда еще не шло, но всё что меньше sdf сгодится только для религиозных фанатиков которые явно не планируют читать данный текст потом.

#49
22:05, 16 апр 2020

Aroch
в том комменте, написано
6pt text as well as 480pt text using the same font texture

#50
22:16, 16 апр 2020

AlexeiK
> 6pt text as well as 480pt text using the same font texture
ну так приведи скриншот хотя бы с 8pt, выше с 10pt+ и он явно не предназначен для комфортного чтения.
И да, зачем ты выдергиваешь неполное предложение? Перевести или сам справишься?

I want to be able to render 6pt text as well as 480pt text using the same font texture.

#51
0:36, 17 апр 2020

Короче сделал 55 пкс Футуру. Смотрится норм :)

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#52
6:51, 17 апр 2020

Может я конечно что-то не понимаю, но зачем все эти извраты если есть готовые (и бесплатные) либы?
Вот как у меня сделан вывод в текстуру текста любого фонта, любого резмера и любого стайла (DX12, но не суть важно):

HRESULT Label::Update(LPCWSTR label)
{
  std::lock_guard<std::mutex> lk(label_update_mutex);

  HRESULT hr = S_OK;
  shared_ptr<Gdiplus::Bitmap> m_bitmap = shared_ptr<Gdiplus::Bitmap>(new Gdiplus::Bitmap((int)m_dimention.x, (int)m_dimention.y, PixelFormat32bppRGB));
  Gdiplus::Graphics graphics(m_bitmap.get());

  Gdiplus::StringFormat strFormat(0);
  Gdiplus::Status stat;

  Gdiplus::RectF origin(0, 0, m_dimention.x, m_dimention.y);
  Gdiplus::Font font(m_font, m_font_size, m_font_style);

  {
    origin.X = m_point.X;
    origin.Y = m_point.Y;

    stat = graphics.DrawString(label, -1, &font, origin, &strFormat, m_brush);
  }

  ComPtr<ID3D12Resource> textureUploadHeap;

  const UINT64 uploadBufferSize = GetRequiredIntermediateSize(m_Icon1->Get(), 0, 1);

  hr = m_context->m_Device->CreateCommittedResource(
    &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD),
    D3D12_HEAP_FLAG_NONE,
    &CD3DX12_RESOURCE_DESC::Buffer(uploadBufferSize),
    D3D12_RESOURCE_STATE_GENERIC_READ,
    nullptr,
    IID_PPV_ARGS(textureUploadHeap.ReleaseAndGetAddressOf()));

  if (FAILED(hr))
  {
    return hr;
  }
  textureUploadHeap->SetName(L"Label:textureUploadHeap");
  Texture_Property descr = m_Icon1->GetProperty();

  BitmapData bitmapData;

  m_bitmap->LockBits(&Rect(0, 0, (int)m_dimention.x, (int)m_dimention.y), ImageLockModeRead, PixelFormat32bppRGB, &bitmapData);

  unsigned char *pSourcePixels = (unsigned char*)bitmapData.Scan0;

  D3D12_SUBRESOURCE_DATA *textureData = m_Icon1->GetData();
  textureData->pData = pSourcePixels;
  textureData->RowPitch = (UINT)descr.rowPitch;
  textureData->SlicePitch = textureData->RowPitch * descr.height;

  m_context->m_comput_Command_list->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_Icon1->Get(), D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_COPY_DEST));

  UINT64 t = UpdateSubresources(m_context->m_comput_Command_list.Get(), m_Icon1->Get(), textureUploadHeap.Get(), 0, 0, 1, textureData);

  m_context->m_comput_Command_list->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_Icon1->Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COMMON));

  m_label = label;
  m_show = true;

  return hr;
}

Пример вывода текста:

p4 | Растровый шрифт

Если не заморачиваться с DX12, то текст функции будет раза в 2 короче. И все. Не надо ни о чем думать - за вас все уже придумали.
Текстуру положите на плоскость и крутите в свое удовольствие. Хотите приблизить - нет проблем.
Я еще форматирую текст меняя размер фонта дабы он по возможности без переносов влез в текстуру заданного размера. Тоже не проблема:

vec2 Label::GetLabelDim(LPCWSTR label, vec2 addon)
{
  shared_ptr<Gdiplus::Bitmap> m_bitmap = shared_ptr<Gdiplus::Bitmap>(new Gdiplus::Bitmap((int)m_dimention.x, (int)m_dimention.y, PixelFormat32bppRGB));
  Gdiplus::Graphics graphics(m_bitmap.get());

  Gdiplus::Font font(m_font, m_font_size, m_font_style);

  RectF layoutRect(0, 0, GetDimention().x + addon.x, GetDimention().y + addon.y); 
  RectF boundRect;
  StringFormat strFormat(0);

  int fitted;
  graphics.MeasureString(label, -1, &font, layoutRect, &strFormat, &boundRect, &fitted);

  return vec2(boundRect.Width, boundRect.Height);
}
...
  dim = label->GetLabelDim((LPCWSTR)lp_text.c_str(), vec2(100, 100));
  while (dim.y >= m_Scroll->m_model->h_texture[1].tex->Get_Dimention().y || dim.x >= m_Scroll->m_model->h_texture[1].tex->Get_Dimention().x)
  {
    label->m_font_size -= 1;
    dim = label->GetLabelDim((LPCWSTR)lp_text.c_str(), vec2(100, 100));
  }

Короче: "Зачем смотреть вперед если весь опыт сзади?"
М.Жванецкий.

#53
7:28, 17 апр 2020

san
У меня GL, но не суть важно. Выше я уже писал, что до текстур еще не добрался ибо зелен в 3D. Чисто хобби. Как временное решение мой вариант меня устраивает.

#54
7:37, 17 апр 2020

eDmk
Если ты не добрался до текстур, то зачем тебе шрифты? Начни с азов, элементы ГУИ это не самая насущная проблема для начинающих.

Оффтоп - GL не самая удобная платформа для старта, начинать лучше с DX11. Если сравнивать с языками, то GL ближе к C, а DX к C++. Плюсы может и сложнее, но там полно готовых функций и классов, потому программа получается короче и начинает работать быстрее. Это не относится к DX12, туда тебе ходить явно рановато.

#55
8:39, 17 апр 2020

san
Я не начинающий программист. Просто 3D раньше не занимался.
Вообще у меня Pascal/Asm. Так сложилось. Хотя против С ничего не имею.
Под паскаль мало библиотек, поэтому приходится свои функции изобретать.

> элементы ГУИ это не самая насущная проблем
В данный момент насущная. Свои контролы делаю.
Пока сделал чекбокс, кнопочки обычные и скроллбары.

#56
17:29, 17 апр 2020

У меня есть класс для GUI (оттуда и код), могу поделиться, но там все:
1. На C++
2. Для DX12

Вот пример его работы:
p5 | Растровый шрифт
Всякие кнопочки, ползунки и тексты он выводит без проблем, но сомневаюсь что тебе с бекграундом на Паскаль/ОГЛ это может помочь.
Хотя Gdiplus имеет реализацию для Паскаля (https://github.com/jackdp/IGDIPlusMod), так что можешь попробовать разобраться.

Оффтоп: Что до Паскаля, то это старая беда российских программистов. Когда они оказываются на Западе, то с изумлением обнаруживают, что практически нигде кроме России не используют Паскаль и Делфи и их знания никому тут нафиг не нужны.

#57
18:04, 17 апр 2020

san
> Что до Паскаля, то это старая беда российских программистов
Не холиворьте. Все «файналли», как говорят в америках, на асме ваще.
Язык это просто «логическая шапка» на ассемблер.

Так уж вышло, что Дельфи купил по случаю,
да и пишу в основном вечерами в свободный час.

#58
20:49, 17 апр 2020

san
Браво. Посоветовал: использовать другой код, поменять GAPI, поменять ЯП. Осталось посоветовать сменить ОС и пол, и это будет эталон помощи на гд.ру

#59
21:08, 17 апр 2020

MrShoor
Да я тоже  в шоке. Уже до оправданий дошло за паскаль :(

Дети барыг из 90-х подросли что ли?

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.