PMG

Форумы по созданию игр
Текущее время: 21 сен 2021 05:26

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 26 фев 2006 17:39 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Попробуй увеличить число символов с 128 до 256. И вычислить номер глифа по функции FT_Get_Char_Index( face, ch ), исходя из номера русской буквы в UNICODE.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 фев 2006 10:56 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Ну сразу скажу, что русские буквы я не получал в этом уроке. Но
думаю, что все достаточно просто.

Глиф это просто форма буквы и все. Можно считать, что это и есть
символ нужной буквы.

Если ты выставил FT_ENCODING_UNICODE, то ты должен и брать русские
символы в уникоде, а они находятся (если посмотреть по таблице
символов) с номера 1040. Поэтому чтобы адресовать правильно номер
символа русской буквы ты должен по какой-то функции получить номер
этого символа. Например, в Win32 API есть такие функции:
#define W_B(w, a, cb) WideCharToMultiByte( \
CP_ACP, \
0, \
w, \
-1, \
a, \
cb, \
NULL, \
NULL)

#define B_W(a, w, cb) MultiByteToWideChar( \
CP_ACP, \
0, \
a, \
-1, \
w, \
cb)

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Русский шрифт
СообщениеДобавлено: 09 янв 2009 15:22 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 09 янв 2009 15:11
Сообщения: 16
Я решил эту проблему следующим образом
1) Указуем, что будем создавать список для 256 символов
2)базу ставим в 0, при рисовании не будет никаких смезений, просто - glListBase(fontbase);
3)и все равно ничего не работало...а проблема оказалась в позиционировании текста(центровке). Оказалось, что для русских букв оно возвращает минусовые значение кода символа. Это решаеться очень просто:

GLvoid glPrint(char *fmt, float size ...)
{float length=0;
char text[255];
int code;
int n;
va_list ap;
if(fmt==NULL) return;
va_start(ap,fmt);
vsprintf(text,fmt,ap);
va_end(ap);

n=strlen(text);

for(int i=0; i<n; i++)
{code=text[i];
if(code<0) code+=256; //просто добавляем 256, и получаем нормальный код русских символов
length+=gmf[code].gmfCellIncX; //и их размеры
}

glPushMatrix();
glScalef(size*10,size*10,size*10);//и да...размер при построении шрифта так и не сделал что б работал, так что //приходиться масштабировать, но есть большой минус - маленький шрифт не вывести, пропадают части символов
glTranslatef(-length/2,0.0f,0.0f);
glPushAttrib(GL_LIST_BIT);
glListBase(fontbase);
glCallLists(n,GL_UNSIGNED_BYTE,text);
glPopAttrib();
glPopMatrix();

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Русский шрифт
СообщениеДобавлено: 11 янв 2009 10:49 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Может тогда какие-то изменения в урок внести? Может у тебя есть предложения?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Русский шрифт
СообщениеДобавлено: 12 янв 2009 16:24 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 09 янв 2009 15:11
Сообщения: 16
Как на меня, то пока что вполне достаточно было бы добавить небольшую проверку, схожую, или как у меня, и объяснить что в OpenGL есть такой глюк, и таким образом его можно исправить.
Например я был очень разочарован, когда увидел что выводит только латынь, стал с обиды искать библиотеки для вывода текста)))
А вот с размерами шрифта...Просто написать при построении шрифта, размер не учитывается, менять его можно только с помощью масштабирования. Дать идею читателям, типа:"и не забывайте, что не обязательно писать каждый раз одно и тоже, вы ведь можете сделать универсальную функцию по своему вкусу, передавая у нее нужные параметры, например
glPrint(bool centralize, //Выводить текст по центру или по левому краю
float size,//в сколько раз увеличить размер шрифта
..... //прочие ваши параметры
const char *fmt,//сам текст
...//переменные
);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Русский шрифт
СообщениеДобавлено: 13 янв 2009 09:27 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Может тогда напишешь текст примечания с кодом исправленной функции, а я вставлю.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Русский шрифт
СообщениеДобавлено: 17 янв 2009 23:08 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 09 янв 2009 15:11
Сообщения: 16
Теперь небольшой нюанс для выведения русских символов!.. Кроме того что нам нужно создать 256 списков отображения, нужно добавить одну строчку кода в нашу функцию вывода, а именно в цикл, где мы считаем длину строчки.
for (unsigned int loop=0,int code;loop<strlen(text);loop++)//Цикл поиска размера строки

{if(text[loop]<0) code=text[loop]+256;//НОВОЕ
else code=text[loop];//НОВОЕ
length+=gmf[text[loop]].gmfCellIncX;
// Увеличение размера на ширину символа
}
Все это для того, что бы получить нормальный код символа, потому что само оно возвращает нам не правильный, а на 256 меньший, код.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Русский шрифт
СообщениеДобавлено: 19 янв 2009 11:14 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Н-да прикольно...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB