Конференция "Игры" » CD3DFont текст [Delphi, Windows]
 
  • ElectriC © (09.04.07 15:50) [0]
    Кто-нибудь использовал в своих DirectX программах CD3DFont текст?
    Проблема заключается в том, что D3DFont отображает(читай "рисует") только англиийские символы. Например, когда пишешь "Игра Quake" отображается только "Quake".
    Подскажите, в чём может быть проблема?

    P.S. В модуле D3DFont нашёл такие строчки (возможно отвечающие за отображаемые сиволы):
    ...

    // For each character, draw text on the DC and advance the current position
     for c := #32 to #126 do
     begin
       str[0] := c;
       if not GetTextExtentPoint32(hDC, str, 1, size) then
       begin
         Result:= E_FAIL;
         Exit;
       end;
    ...

    Пробовал менять на for c := #192 to #255 do - программа виснет при загрузке.

    P.P.S. ID3DXFont не предлагать!!!
  • Sapersky (10.04.07 13:41) [1]
    Тогда уж от #32 до #255. Разумеется, нужно подправить размеры разного рода массивов и общий размер текстуры увеличить.

    А ID3DXFont в 9-м DX, говорят, оптимизировали.
  • ElectriC © (10.04.07 14:08) [2]
    Можешь помочь?
    P.S. Давай вышлю те на мыло модуль D3DXFont(если нет). Сам замучался, чесслово - ничего не получается!
  • Sapersky (10.04.07 14:54) [3]
    Пробовал хотя бы то, что я говорил?
    Я пробовал, ДВЕ строчки изменил, даже размер текстуры не трогал (хотя по-хорошему надо бы, оно в самом начале InitDeviceObjects). Всё работает.
  • ElectriC © (10.04.07 17:22) [4]
    Можешь написать какие строчки изменять (если надо то изменение размера тектуры)?
  • Sapersky (10.04.07 19:02) [5]
    Сейчас заметил, что СD3DFont у меня несколько другой (DX8, 04.04.02), но наверняка все версии работают по одному принципу.

    for c:= 32 to 255{было 126} do
    поле класса:
    m_fTexCoords: array[0..256{было 128}-32-1, 0..3] of Single;

    Размер текстуры определяется весьма приблизительно по размеру шрифта:
     if (m_dwFontHeight > 40) then
     begin
       m_dwTexWidth:= 1024;
       m_dwTexHeight:= m_dwTexWidth;
     end
     else if (m_dwFontHeight > 20) then
     begin
       m_dwTexHeight:= 512;
       m_dwTexWidth:= m_dwTexHeight;
     end else ...

    Можно вместо 40 и 20 поставить 30 и 14, например (проверял с Arial). При превышении размера текстуры программа выводит текст неправильно, но не вылетает.
  • ElectriC © (10.04.07 20:23) [6]
    Всё работает)) Thanks.
  • Belorus © (11.04.07 01:36) [7]
    А русское спасибо уже не модно ?
    Его заменили
    Thanks
    Thx
    10x
    Thnkz
    СПС
    спсб ?

    Вам приятно видеть ТАКОЕ как знак благодарности ?
  • ElectriC © (12.04.07 00:29) [8]

    > Belorus ©

    Не имеет значения:|
 
Конференция "Игры" » CD3DFont текст [Delphi, Windows]
Есть новые Нет новых   [134430   +1][b:0][p:0]