PMG

Форумы по созданию игр
Текущее время: 29 мар 2024 13:59

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2005 08:44 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
А может там и нет желтого?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 дек 2005 17:16 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 ноя 2005 13:07
Сообщения: 24
Откуда: Украина, Краматорск
Нашёл у вас на сайте пример использования шрифтов Windows для вывода в OpenGL. Пишу я на Visaul C++ 7.0 Всё работает, когда я реализую все функции (создание, вывод) непосредственно в коде. Но когда я создал класс (так было легче для работы) он перестал выводить РУССКИЙ текст, а всё остальное (в том числе и русские цифры) выводит.
Объясните мне пожалуйста, ПОЧЕМУ??? :-(
Заранее большое спасибо :r


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 дек 2005 16:21 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Русских цифр нет, наверно это оговорка. Русский текст не выводит из того что не правильно выбрана кодовая страница, скорее всего. Хотя исходник для наглядности бы не помешал.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 дек 2005 18:42 
Не в сети
Любитель

Зарегистрирован: 15 авг 2005 21:32
Сообщения: 46
Откуда: NSK
Может быть вы используете CHAR вместо BYTE (UNSIGNED CHAR)?
Потому символы с кодом выше 127 невыводятся

_________________
Хочу иметь.... много компьютеров, много денег, и быть известным. Но я не Гилл Бетс =))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 дек 2005 21:05 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 ноя 2005 13:07
Сообщения: 24
Откуда: Украина, Краматорск
Спасибо, что обсудили, но... Я написал, что всё работает (и выводиться русский текст), когда функция вывода текста оформлена как ОБЫКНОВЕННАЯ функция. Но русский текст перестал выводиться когда я СОЗДАЛ КЛАСС CText, в котором есть функция DrawText для вывода текста в окно. Хочу заметить, что код функции вывода текста моего класса CText.DrawText () АБСОЛЮТНО такой же, как и обыкновенной функции (я его просто скопировал :D).
Я не жадный :) , мог бы вставить сюда текст, который я скопировал из NeHe, но зачем??? ;/

_________________
Ученье свет, а не ученье - чуть свет и на работу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 дек 2005 21:12 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 ноя 2005 13:07
Сообщения: 24
Откуда: Украина, Краматорск
Цитата:
Может быть вы используете CHAR вместо BYTE (UNSIGNED CHAR)?
Потому символы с кодом выше 127 невыводятся
_________________
Хочу иметь.... много компьютеров, много денег, и быть известным. Но я не Гилл Бетс )

Да, я использую char. Но ведь когда функция вывода реализована не в классе, то ВСЁ прекрасно работает. А вот когда она стала методом класса, то русский текст не выводит, а английский - с радостью.
Конечно, данная проблема - это не проблема (проблема мне было найти как вывести текст в OpenGL =) ). Можно и без классов обойтись, но это меня поставило в тупик, т.е. я не смог объяснить себе, почему так происходит :-(

_________________
Ученье свет, а не ученье - чуть свет и на работу


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

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Тем более без кода не разобраться. :(

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 дек 2005 17:13 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 ноя 2005 13:07
Сообщения: 24
Откуда: Украина, Краматорск
MagicWolf писал(а):
Тем более без кода не разобраться. :(
Ну, код класса вот:
/******************************************************************/
// Класс для вывода 3D-текста.
#include <gl\gl.h> // заголовочный файл для библиотеки OpenGL32

class CText
{
public:
CText ()
{
}
~CText ()
{
KillFont ();
}
// Функция вывода текста в OpenGL
GLvoid DrawText (const char *Fmt, ...)
{
float fLength = 0; // Переменная для нахождения физической длины текста.
char Text [256]; // Здесь наша строка.
va_list pList; // Указатель на переменный список аргументов.

// Если нет текста.
if (Fmt == NULL)
return;

// Анализ строки на переменные
va_start(pList, Fmt);
// Конвертация символов в реальные коды.
vsprintf(Text, Fmt, pList);
// Результат сохраняется в text.
va_end(pList);

// Увеличение размера на ширину символа.
for (DWORD i = 0; i < (strlen (Text)); i++)//Цикл поиска размера строки
fLength += gmf [Text[i]].gmfCellIncX;

//Центровка на экране нашей строки.
glTranslatef (-fLength / 2.0f ,0.0f, 0.0f);
// Сохраняет в стеке значения битов списка отображения.
glPushAttrib(GL_LIST_BIT);
// Устанавливает базовый символ в 0.
glListBase(glunBase);
// Создает списки отображения текста.
glCallLists (GLsizei (strlen(Text)), GL_UNSIGNED_BYTE, Text);
// Восстанавливает значение Display List Bits.
glPopAttrib();
}

// Строим растровый шрифт.
GLvoid BuildFont(HDC hDC)
{
HFONT Font; // Идентификатор шрифта Windows.
glunBase = glGenLists(256); // массив для 256 букв.
Font = CreateFont(-12, // высота шрифта.
0, // ширина знакоместа.
0, // Угол перехода.
0, // Угол направления.
FW_BOLD, // Ширина шрифта.
FALSE, // Курсив .
FALSE, // Подчеркивание.
FALSE, // Перечеркивание.
ANSI_CHARSET, // Идентификатор кодировки.
OUT_TT_PRECIS, // Точность вывода.
CLIP_DEFAULT_PRECIS, // Точность отсечения.
ANTIALIASED_QUALITY, // Качество вывода.
FF_ROMAN | DEFAULT_PITCH, // Семейство и Шаг.
"Times New Roman CYR"); // Имя шрифта.

//Выбрать шрифт, созданный нами
SelectObject(hDC, Font);

wglUseFontOutlines (hDC, // Выбрать текущий контекст устройства (DC).
0, // Стартовый символ.
255, // Количество создаваемых списков отображения.
glunBase, // Стартовое значение списка отображения.
0.0f, // Отклонение от настоящего контура.
0.3f, // Толщина шрифта по оси Z.
WGL_FONT_POLYGONS, // Использовать полигоны, а не линии.
gmf); // буфер адреса для данных списка отображения.
}

private:
// Удаление шрифта
GLvoid KillFont(GLvoid)
{
// Удаление всех 256 списков отображения
glDeleteLists(glunBase, 256);
}

private:
GLuint glunBase; // База отображаемого списка для набора символов (добавлено).
GLYPHMETRICSFLOAT gmf[256]; // Массив с информацией о нашем шрифте.
private:
};
/******************************************************************/

Сегодня ещё раз поработал над программой и случайно заметил, что русский текст выводиться методом моего класса тогда, когда я запускаю прогу вне IDE Visual Studio, а когда в IDE - не работает. И ещё центрирование происходит неправильно при русском тексте

_________________
Ученье свет, а не ученье - чуть свет и на работу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 дек 2005 17:27 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Так вроде все нормально. Только что может поиграться ANSI_CHARSET, заменить на что-то другое, например, RUSSIAN_CHARSET.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 дек 2005 20:22 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 ноя 2005 13:07
Сообщения: 24
Откуда: Украина, Краматорск
MagicWolf писал(а):
Так вроде все нормально. Только что может поиграться ANSI_CHARSET, заменить на что-то другое, например, RUSSIAN_CHARSET.
Это я уже пробовал, с самого начала, но не помогло. Когда прогу запускаю из Visual Studio, то она не выводит русский текст, а когда из Total Commander - то всё OK. Видимо это проблемка Visual Studio, а против этого мы бессильны :( .

_________________
Ученье свет, а не ученье - чуть свет и на работу


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

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
В VC Solution\Properties\C\C++\General\Debug Information Format - по играйся с этим, например, С7 Compatible поставь.

Ясно одно, что wglUseFontOutlines не отрабатывает!

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 дек 2005 11:18 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Кстати, фонт TrueType, а они все в unicode! По идее и текстовая строка должна быть в уникоде, иначе действительно может не работать.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 дек 2005 12:14 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 ноя 2005 13:07
Сообщения: 24
Откуда: Украина, Краматорск
MagicWolf писал(а):
Кстати, фонт TrueType, а они все в unicode! По идее и текстовая строка должна быть в уникоде, иначе действительно может не работать.
Не подскажите ли как перевести текст из ANSI в UNICODE, а то Solution\Properties\C\C++\General\Debug Information Format не помогло.

_________________
Ученье свет, а не ученье - чуть свет и на работу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 дек 2005 17:01 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Вот это просто:
#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)

Но wglUseFontOutlines не понимает wchar_t ! :evil:

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

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


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

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


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

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