*author: sla8a#13#10date: 11.08.2014#13#10version: 1.2#13#10forum: http://forum.hiasm.com/forum.html?q=3&p=270548 Make(delphi) ver(4.04 build 185) Add(MainForm,4407301,35,448) { Width=501 Height=523 Caption="OpenGL_Lesson_02" BorderStyle=1 Position=1 link(onCreate,7094067:doEvent1,[]) } Add(Timer,2878705,119,546) { Interval=33 Enable=1 link(onTimer,10543810:doClear,[]) } Add(GL_Main,7235558,644,469) { Color=15780518 link(onInit,5424116:doInit,[]) link(onViewPort,5728910:doPerspective,[(684,482)(684,524)]) link(Handle,1371560:Handle,[]) } Add(GL_GluTools,5424116,700,469) { link(onInit,1374589:doEnabled,[]) } Add(GL_Perspective,5728910,700,518) { } Add(Hub,7094067,84,462) { OutCount=4 link(onEvent1,9672498:doData,[(109,468)(109,419)]) link(onEvent2,7235558:doInit,[]) link(onEvent3,7235558:doViewPort,[]) link(onEvent4,2878705:doTimer,[(108,489)(108,552)]) } Add(GL_Options,579743,791,469) { link(onEvent,2431623:doEnabled,[]) } Add(GL_GTools,10543810,161,546) { @Hint=#7:Очистка| ClearStencil=1 Point(doClear) link(onEvent,15797799:doEvent,[]) AddHint(-20,-28,57,13,@Hint) } Add(GL_Options,1374589,742,469) { Flag=2 link(onEvent,579743:doEnabled,[]) } Add(GL_Sphere,17209,378,546) { @Hint=#7:большая| Radius=0.2 link(onDraw,9830879:doDraw,[]) AddHint(-17,-24,59,13,@Hint) } Add(GL_Light,2431623,847,469) { link(onEnabled,2431623:doMove,[(889,475)(889,509)(835,509)(835,482)]) link(Point,8164179:Point3D,[]) } Add(GL_Point3D,8164179,847,427) { X=2 Y=1 Z=3 } Add(GL_GTools,9799383,518,637) { @Hint=#15:Восстанавливаем| Point(doPopMatrix) link(onEvent,10891119:doWork2,[]) AddHint(-38,36,107,13,@Hint) } Add(GL_GTools,12110568,336,637) { @Hint=#9:Сохраняем| Point(doPushMatrix) link(onEvent,8272196:doDraw,[]) AddHint(-27,35,71,13,@Hint) } Add(ChildPanelEx,1371560,644,413) { } BEGIN_SDK Add(EditMultiEx,15964187,21,21) { VarCount=#6:Handle| Width=83 Height=144 link(Handle,3796578:Handle,[(27,133)(48,133)]) } Add(Panel,3796578,42,70) { Left=90 Top=5 Width=400 Height=400 Point(Handle) } END_SDK Add(ListBox,1444219,189,357) { Left=5 Top=5 Width=80 Height=395 Strings=#8:Пример 1|8:Пример 2|8:Пример 3|8:Пример 4| Point(Index) Point(doSelect) link(onClick,12764711:doWork1,[(244,370)]) } Add(GL_Sphere,9830879,469,546) { @Hint=#5:малая| Radius=0.1 link(onDraw,12988470:doWork2,[]) AddHint(-8,-25,47,13,@Hint) } Add(IndexToChanel,15797799,210,546) { Count=4 Point(Index) link(onEvent1,17209:doDraw,[]) link(onEvent2,12110568:doPushMatrix,[(274,559)(274,643)]) link(onEvent3,4247183:doPushMatrix,[(262,566)(262,748)]) link(onEvent4,11883049:doPushMatrix,[(255,573)(255,867)]) link(Index,1444219:Index,[]) } Add(DoData,9672498,119,413) { Data=Integer(0) link(onEventData,65839:doEvent1,[]) } Add(StrList,14249639,322,378) { Strings=#40:Маленькая сфера рисуется внутри большей.|163:Сохраняется матрица преобразования и рисуется большая сфера. Происходит перенос по оси Х (вправо) и рисуется малая сфера. Восстанавливается матрица преобразования.|163:Сохраняется матрица преобразования и происходит перенос по оси Х (вправо). Рисуется большая сфера. Восстанавливается матрица преобразований и рисуется малая сфера.|201:Сохраняется матрица преобразования и происходит перенос по оси Х (влево). Рисуется большая сфера и происходит перенос по оси X (вправо). Рисуется малая сфера и восстанавливается матрица преобразований.|0:| Point(doGetString) Point(onGetString) link(onGetString,15134314:doText,[(390,391)(390,412)]) } Add(Hub,65839,161,413) { link(onEvent1,1444219:doSelect,[(185,419)(185,405)]) link(onEvent2,12764711:doWork2,[]) } Add(HubEx,12764711,240,420) { link(onEvent,14249639:doGetString,[]) } Add(GL_Main,12986311,679,238) { Color=0 } Add(Timer,9506849,497,294) { Interval=33 Enable=1 link(onTimer,1049454:doEvent1,[]) } Add(GL_GTools,771925,588,294) { Point(doClear) Point(doPushMatrix) Point(doPopMatrix) } Add(Hub,1049454,546,294) { OutCount=5 link(onEvent1,771925:doClear,[]) link(onEvent2,771925:doPushMatrix,[]) link(onEvent3,12276170:doWork,[(567,314)(567,286)]) link(onEvent4,771925:doPopMatrix,[(576,321)(576,314)]) link(onEvent5,12986311:doFlip,[(642,328)(642,258)]) } Add(LineBreakEx,12276170,679,280) { Caption="рисуем" } Add(InfoTip,13762698,21,230) { Info=#97:Часто в схемах встречается такой "узел" из связей элемента GL_GTools(графический инструментарий):|21:1. Очистка (doClear).|51:2. Сохраняем матрицу преобразований (doPushMatrix).|26:3. Рисуем объекты в буфер.|55:4. Востанавливаем матрицу преобразований (doPopMatrix).|51:5. Выводим буфер на экран (doFlip элемент GL_Main).|0:| Frame=2 Transparent=1 HAlign=0 Width=463 Height=109 Margin=5 } Add(InfoTip,2851121,21,14) { Info=#76:Понять и научиться правильно работать с матрицей преобразований очень важно.| Frame=2 Transparent=1 HAlign=0 Width=736 Height=25 Margin=5 } Add(GL_Sphere,8272196,378,637) { @Hint=#7:большая| Radius=0.2 link(onDraw,16382852:doTranslate,[]) AddHint(-17,-24,59,13,@Hint) } Add(Gl_Translate,16382852,420,637) { X=0.3 link(onTranslate,15926262:doDraw,[]) } Add(GL_Sphere,15926262,469,637) { @Hint=#5:малая| Radius=0.1 link(onDraw,9799383:doPopMatrix,[]) AddHint(-8,-25,47,13,@Hint) } Add(HubEx,12988470,623,546) { Angle=3 link(onEvent,7235558:doFlip,[(627,489)]) } Add(GL_GTools,14559114,462,742) { @Hint=#15:Восстанавливаем| Point(doPopMatrix) link(onEvent,8958663:doDraw,[]) AddHint(-33,41,107,13,@Hint) } Add(GL_GTools,4247183,336,742) { @Hint=#9:Сохраняем| Point(doPushMatrix) link(onEvent,3970220:doTranslate,[]) AddHint(-25,37,71,13,@Hint) } Add(GL_Sphere,6274462,420,742) { @Hint=#7:большая| Radius=0.2 link(onDraw,14559114:doPopMatrix,[]) AddHint(-17,-24,59,13,@Hint) } Add(Gl_Translate,3970220,378,742) { X=0.3 link(onTranslate,6274462:doDraw,[]) } Add(GL_Sphere,8958663,511,742) { @Hint=#5:малая| Radius=0.1 link(onDraw,8649700:doWork2,[]) AddHint(-8,-25,47,13,@Hint) } Add(HubEx,10891119,623,637) { Angle=3 link(onEvent,12988470:doWork3,[]) } Add(InfoTip,2665835,21,230) { Info=# Frame=2 Width=736 Height=109 } Add(InfoTip,9780444,21,42) { Info=#194:С самого начала рисование объектов начинается в центре (координаты X=0,Y=0,Z=0). Но при изменении матрицы преобразования элементами из вкладки "Преобразование", кооринаты могут быть изменены. | Frame=2 Transparent=1 HAlign=0 Width=736 Height=39 Margin=5 } Add(GL_GTools,3442558,539,861) { @Hint=#15:Восстанавливаем| Point(doPopMatrix) link(onEvent,8649700:doWork3,[(627,867)]) AddHint(-41,46,107,13,@Hint) } Add(GL_GTools,11883049,308,861) { @Hint=#9:Сохраняем| Point(doPushMatrix) link(onEvent,12656150:doTranslate,[]) AddHint(-17,42,71,13,@Hint) } Add(GL_Sphere,9884354,399,861) { @Hint=#7:большая| Radius=0.2 link(onDraw,6231707:doTranslate,[]) AddHint(-17,-24,59,13,@Hint) } Add(Gl_Translate,12656150,350,861) { X=-0.2 link(onTranslate,9884354:doDraw,[]) } Add(GL_Sphere,5099610,497,861) { @Hint=#5:малая| Radius=0.1 link(onDraw,3442558:doPopMatrix,[]) AddHint(-8,-25,47,13,@Hint) } Add(HubEx,8649700,623,742) { Angle=3 link(onEvent,10891119:doWork3,[]) } Add(Gl_Translate,6231707,448,861) { X=0.4 link(onTranslate,5099610:doDraw,[]) } Add(InfoTip,11845869,287,504) { Info=#8:Пример 1| Font=[MS Sans Serif,8,1,128,1] Frame=2 HAlign=0 Width=330 Height=81 Margin=2 } Add(InfoTip,1204535,287,595) { Info=#8:Пример 2| Font=[MS Sans Serif,8,1,128,1] Frame=2 HAlign=0 Width=330 Height=100 Margin=2 } Add(InfoTip,8740222,287,700) { Info=#8:Пример 3| Font=[MS Sans Serif,8,1,128,1] Frame=2 HAlign=0 Width=330 Height=109 Margin=2 } Add(InfoTip,5497090,287,819) { Info=#8:Пример 4| Font=[MS Sans Serif,8,1,128,1] Frame=2 HAlign=0 Width=330 Height=109 Margin=2 } Add(InfoTip,651274,21,84) { Info=# Frame=2 Transparent=1 HAlign=0 Height=46 Margin=4 } Add(InfoTip,14774661,84,84) { Info=#165:Элемент Gl_Translate (перенос) изменяет матрицу преобразования, применяя к ней перенос по трем осям. Если значение по оси равно 0, перенос по этой оси не происходит.| Frame=2 Transparent=1 HAlign=0 Width=673 Height=46 Margin=5 } Add(Gl_Translate,15615558,35,91) { } Add(InfoTip,5056549,21,133) { Info=# Frame=2 Transparent=1 HAlign=0 Height=95 Margin=4 } Add(InfoTip,13576884,84,133) { Info=#247:Элемент GL_GTools (графический инструментарий) в зависимости от задействованной точки (смотрите вкладку точки при выборанном элемента). Может очищать буфер (doClear), сохранять (doPushMatrix) и восстанавливать (doPopMatrix) матрицу преобразования.|54:Точки doPushAttrib и doPopAttrib оставим пока в покое.|61:Свойства элемента настраиваются при очистке буфера (doClear).|73:О свойствах элемента по очистки буфера описано в Введение(openGL_00.sha).| Frame=2 Transparent=1 HAlign=0 Width=673 Height=95 Margin=5 } Add(GL_GTools,7224123,35,161) { } Add(Memo,15134314,427,385) { Left=5 Top=410 Width=485 Height=85 ScrollBars=2 ReadOnly=0 }