Вверх ↑
Этот топик читают: Гость
Ответов: 1304
Рейтинг: 405
#91: 2012-03-22 21:46:51 ЛС | профиль | цитата
ANSI_CHARSET, // RUSSIAN_CHARSET ???

не зря я про пять минут писал , специально сделал пометки на спрорных участках.
поменяй ANSI_CHARSET на RUSSIAN_CHARSET, у меня на xp_sp в любом варианте по русски пишет.
карма: 3

0
Ответов: 1429
Рейтинг: 50
#92: 2012-03-22 21:57:19 ЛС | профиль | цитата
MAV, нет, наоборот, я внимательно все просмотрел. Я увидел пометки, просто я не понял, что надо именно это написать, и начал подставлять туда левые кодировки
карма: 0

0
Ответов: 1304
Рейтинг: 405
#93: 2012-03-22 22:00:52 ЛС | профиль | цитата
login, ну а в итоге руский шрифт удалось правильно отрисовать с параметром RUSSIAN_CHARSET
карма: 3

0
Ответов: 1429
Рейтинг: 50
#94: 2012-03-22 22:05:15 ЛС | профиль | цитата
Просто идеально
font_mav_rus.png
карма: 0

0
файлы: 1font_mav_rus.png [9KB] [647]
Ответов: 1304
Рейтинг: 405
#95: 2012-03-22 22:52:13 ЛС | профиль | цитата
Осталось только решить делать новый компонент или сделать мод элемента Gl_Text?
карма: 3

0
Ответов: 1429
Рейтинг: 50
#96: 2012-03-23 00:27:34 ЛС | профиль | цитата
MAV, можно и мод. Функция элемента та же, точки те-же. Просто иной метод вывода.

[offtop]А для себя я элемент перенесу в FTCG. (по крайней мере его "печатающую" часть)[/offtop]
------------ Дoбавленo в 00.27:
Еще мне не понятно зачем нужны эти строки glPushAttrib и glPopAttrib:

#pas
procedure glPrint(text: string);
begin
if text = ' then exit; // Byl pøedán text?
//glPushAttrib(GL_LIST_BIT); // Uloží souèasný stav display listù
glListBase(base); // Nastaví základní znak na 32
glCallLists(length(text),GL_UNSIGNED_BYTE,Pchar(text)); // Vykreslí display listy
//glPopAttrib; // Obnoví pùvodní stav display listù
end;
потому, что код работает без них.

Этот код тоже работает без ошибок:

#pas
//glPushMatrix;
glTranslatef(0.0,50.0,0.0);
glRasterPos2f(0,0);
rtext := ReadString(_Data,data_rtext);
glPrint(rtext);
//glPopMatrix;
карма: 0

0
Ответов: 1304
Рейтинг: 405
#97: 2012-03-23 14:26:35 ЛС | профиль | цитата
Затем мы проталкиваем в стек GL_LIST_BIT, это защищает другие списки отображения, которые мы можем использовать в нашей программе, от влияния glListBase

в данном случае не проверил, необходимо или нет.
----------------------------------------------------------------------------



#pas
//glPushMatrix;
glTranslatef(0.0,50.0,0.0);
glRasterPos2f(0,0);
rtext := ReadString(_Data,data_rtext);
glPrint(rtext);
//glPopMatrix;
Командой glTranslatef мы задаём смещение по осям, и если не сохранять/восстанавливать матрицу, то сдвинется вся сцена.


карма: 3

1
Голосовали:login
Гость
Ответов: 17029
Рейтинг: 0
#98: 2012-03-23 16:45:26 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-06-22 14:53:30
карма: 0

0
Ответов: 1304
Рейтинг: 405
#99: 2012-03-23 18:17:43 ЛС | профиль | цитата
г. 333, спасиб за подсказку, я помню что такой компонент был но забыл автора. К сожалению там нет решения привязки мировых координат к оконным. Возможно кому то и нет необходимости в таких заморочках, но попытаюсь объяснить, есть окно размер меняется от разрешения(или при переходе полноэкранный оконный режим) и при этом надо отобразить четыре сообщения каждое в своём углу экрана. Вопрос как это сделать с помощью GL_Text2D.
карма: 3

0
Ответов: 1304
Рейтинг: 405
#100: 2012-03-26 22:02:59 ЛС | профиль | цитата
Предварительная версия hiGL_Text2dEX, разрешена проблема привязки текста к окну, что не решено это невозможность создать более одного фонта на контекст, а так бы было замечательно выводить текст и символы.
ps:sla8схитил твою иконку ты не против?
удалено, в первом посте финальная версия
карма: 3

1
Голосовали:login
Ответов: 1429
Рейтинг: 50
#101: 2012-03-27 11:47:26 ЛС | профиль | цитата
MAV, а если я сделаю DLL в стандартном пакете с вашим шрифтом, и потом буду использовать эту DLL в пакете PureBasic это будет работать? Поймет PureBasic DLL AiAsm-a
карма: 0

0
Ответов: 1304
Рейтинг: 405
#102: 2012-03-27 12:00:23 ЛС | профиль | цитата
login, затрудняюсь ответить, но подобная тема подымалась на форуме.

карма: 3

0
Ответов: 1304
Рейтинг: 405
#103: 2012-03-28 15:46:36 ЛС | профиль | цитата
Замена штатного курсора в 3D приложении, побочный продукт работы над шрифтами.
code_27408.txt

карма: 3

2
файлы: 1code_27408.txt [9.7KB] [508]
Голосовали:1nd1g0, login
Ответов: 3889
Рейтинг: 362
#104: 2012-03-28 15:55:44 ЛС | профиль | цитата
MAV, помнится, я уже предлагал сделать стандартный компонент взаимного пересчёта мировых и экранных координат. Судя по обилию редакторов и различных "крутилок" объектов мышкой, это - мягко говоря не редкая задача при работе с OpenGL. Да и чтение точки цвета тоже может быть интересным.
карма: 1

0
Ответов: 1304
Рейтинг: 405
#105: 2012-03-28 22:44:26 ЛС | профиль | цитата
помнится, я уже предлагал сделать стандартный компонент взаимного пересчёта мировых и экранных координат

1nd1g0, возможно на тот момент я не совсем понимал как это сделать
------------ Дoбавленo в 22.44:
Пока не ушёл далеко от темы 2D текста решил поискать в расширениях замену glRasterPos3f, соответственно нашлось расширение GL_ARB_window_pos, работает замечательно при этом не нужны пересчёты координат.


Add(MainForm,15261923,14,28)
{
Height=400
BorderStyle=1
Position=1
Point(MouseX)
Point(MouseY)
Point(onResize)
Point(Handle)
link(onCreate,16299401:doEvent1,[(58,48)(58,104)])
link(onResize,16131419:doWork1,[(130,55)])
}
Add(GL_Main,12986311,154,98)
{
EnvironmentMode=2
AASamples=1
link(onInit,12198675:doInit,[])
link(onViewPort,3410847:doPerspective,[(198,111)(198,146)])
link(Handle,15261923:Handle,[(160,79)(34,79)])
}
Add(Timer,9506849,42,182)
{
Interval=10
Enable=1
link(onTimer,1049454:doEvent1,[])
}
Add(GL_GTools,771925,154,182)
{
Point(doClear)
Point(doPushMatrix)
Point(doPopMatrix)
}
Add(Hub,1049454,91,182)
{
OutCount=5
link(onEvent1,771925:doClear,[])
link(onEvent2,771925:doPushMatrix,[])
link(onEvent3,1477332:doDisabled,[(114,202)(114,223)])
link(onEvent4,771925:doPopMatrix,[(142,209)(142,202)])
link(onEvent5,12986311:doFlip,[(128,216)(128,118)])
}
Add(Hub,16299401,70,98)
{
OutCount=3
link(onEvent1,12986311:doInit,[])
link(onEvent2,16131419:doWork2,[])
link(onEvent3,9506849:doTimer,[(121,118)(121,156)(32,156)(32,188)])
}
Add(GL_GluTools,12198675,210,98)
{
link(onInit,1101264:doEnabled,[])
}
Add(GL_Light,14989894,378,98)
{
link(onEnabled,6442457:In,[])
}
Add(GL_Options,1101264,252,98)
{
link(onEvent,5851269:doEnabled,[])
}
Add(GL_Options,5851269,294,98)
{
Flag=1
link(onEvent,5809249:doEnabled,[])
}
Add(GL_Options,5809249,336,98)
{
Flag=2
link(onEvent,14989894:doEnabled,[])
}
Add(GL_Perspective,3410847,210,140)
{
zNear=0.001
}
Add(HubEx,16131419,126,105)
{
link(onEvent,12986311:doViewPort,[])
}
Add(LineBreak,13637880,252,189)
{
link(Out,10480843:doBuildFont,[(292,195)(292,209)])
Primary=[6442457,168,-91]
}
Add(LineBreak,15363895,154,140)
{
Caption="hDC"
Type=1
link(Data,12986311:GLHandle,[])
Primary=[10764968,147,28]
}
Add(GL_Color,9919393,252,210)
{
Color=65280
link(onColor,10480843:do_glPrint,[])
}
Add(GL_Options,1477332,210,210)
{
link(onEvent,9919393:doColor,[])
}
Add(GL_Options,15352328,350,210)
{
}
Add(Memory,4637279,343,154)
{
Default=String(Растровые шрифты)
}
Add(InlineCode,10480843,301,203)
{
@Hint=#25:Урок 13. Растровые шрифты|
WorkPoints=#11:doBuildFont|10:do_glPrint|
EventPoints=#11:onBuildFont|10:on_glPrint|
DataPoints=#8:data_hDC|10:data_rtext|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|36:uses Windows,kol,Share,Debug,OpenGL;|6: var|16: base: GLuint;|25: // GL_ARB_window_pos|32: PGL_ARB_window_pos : Boolean;|4:type|28: THiAsmClass = class(TDebug)|10: private|63: Viewport : Array [0..3] of Integer; // параметры viewport-a.|62: ProjMatrix: Array [0..15] of GLDouble; // матрица проекции.|60: mvMatrix: Array [0..15] of GLDouble; // видовая матрица.|63: wx,wy,wz:GLdouble; // возвращаемые мировые координаты.|17: hDC : Integer;|15: Font: HFONT;|0:|9: public|27: onBuildFont:THI_Event;|26: on_glPrint:THI_Event;|24: data_hDC:THI_Event;|26: data_rtext:THI_Event;|5: |53: procedure doBuildFont(var _Data:TData; index:word);|52: procedure do_glPrint(var _Data:TData; index:word);|5: end;|32:procedure glPrint(text: string);|36:function GL_ARB_window_pos: boolean;|0:|14:implementation|0:|27:function GL_ARB_window_pos;|3:var|22: Extensions: String;|5:begin|44: Extensions := glGetString(GL_EXTENSIONS);|67: PGL_ARB_window_pos := Pos('GL_ARB_window_pos', Extensions) <> 0;|29: if PGL_ARB_window_pos then|8: begin|66: glWindowPos2iARB := wglGetProcAddress('glWindowPos2iARB');|6: end|7: else|8: begin|22: Result := false;|7: end;|4:end;|0:|32:procedure glPrint(text: string);|5:begin|25: if text = '' then exit;|28: glPushAttrib(GL_LIST_BIT);|20: glListBase(base); |58: glCallLists(length(text),GL_UNSIGNED_BYTE,Pchar(text)); |15: glPopAttrib; |4:end;|0:|63:procedure THiAsmClass.doBuildFont(var _Data:TData; index:word);|0:|5:begin|37: hDC := ReadInteger(_Data,data_hDC);|63: base := glGenLists(1000); // glListBase|114: font := CreateFont(-30, // Ширина фонта // если (-), то задаётся высота шрифта в пикселях|77: 0, // Угол отношения //|76: 0, // Угол наклона // |76: 0, // Ширина шрифта //|55: 0, // |61: 0, // |60: 0, //|61: 0, // |63: RUSSIAN_CHARSET, //|60: OUT_TT_PRECIS, //|61: CLIP_DEFAULT_PRECIS, // |57: DEFAULT_QUALITY, // |60: FF_DONTCARE OR DEFAULT_PITCH, //|42: 'Times New Roman'); |22: |25: SelectObject(hDC,font);|36: wglUseFontBitmaps(hDC,0,256,base);|81: glGetIntegerv(GL_VIEWPORT,@Viewport); // узнаём параметры viewport-a.|77: glGetDoublev(GL_PROJECTION_MATRIX,@ProjMatrix); // узнаём матрицу проекции.|75: glGetDoublev(GL_MODELVIEW_MATRIX,@mvMatrix); // узнаём видовую матрицу.|4:end;|0:|62:procedure THiAsmClass.do_glPrint(var _Data:TData; index:word);|0:|3:var|15:rtext : string;|16:SizeFont: TSize;|20:SizeFontY: Integer; |0:|5:begin|40: rtext := ReadString(_Data,data_rtext);|67: GetTextExtentPoint32(hDC, PChar(rtext), Length(rtext), SizeFont);|26: SizeFontY:= SizeFont.cy;|4: //|28: if GL_ARB_window_pos then |46: glWindowPos2iARB(0, viewport[3] - SizeFontY)|6: else|7: exit;|0:|17: glPrint(rtext);|26: _hi_OnEvent(on_glPrint);|7: end; |3: |4:end.|
link(on_glPrint,15352328:doEnabled,[])
link(data_hDC,10764968:Var,[])
link(data_rtext,4637279:Value,[(314,195)(349,195)])
}


карма: 3

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)