Первая версия Solar System Builder'а, 0.0.1a Помогите кто разбирается в OpenGL, как сделать отрисовку нескольких планет относительно одной и той же точки. Что-б вокруг звезды летали. Add(MainForm,2953706,147,112) { Width=700 Height=750 Position=1 Point(onResize) Point(MouseX) Point(MouseY) link(onCreate,4791257:doEvent1,[(212,132)(212,181)]) link(onResize,4443963:doWork1,[(298,139)]) } Add(PaintBox,5090005,350,112) { Width=692 Height=666 Align=5 Point(Handle) Point(MouseX) Point(MouseY) Point(onMouseDown) link(onMouseDown,10714674:doWork2,[(398,125)(398,314)]) } Add(Hub,4791257,245,175) { OutCount=3 link(onEvent2,7755013:doInit,[]) link(onEvent3,4443963:doWork2,[]) } Add(Timer,15683222,224,273) { Interval=10 Point(doInterval) link(onTimer,4442276:doEvent1,[]) } Add(GL_GTools,15697590,329,273) { Point(doClear) Point(doPushMatrix) Point(doPopMatrix) } Add(Hub,4442276,280,273) { OutCount=7 link(onEvent1,15697590:doClear,[]) link(onEvent2,15697590:doPushMatrix,[]) link(onEvent4,10714674:doWork1,[(354,300)(354,307)]) link(onEvent5,15697590:doPopMatrix,[(312,307)(312,293)]) link(onEvent6,7755013:doFlip,[(326,314)(326,202)]) link(onEvent7,12890407:doData,[(406,321)(406,251)]) } Add(GL_GluTools,12198675,413,182) { link(onInit,1101264:doEnabled,[]) } Add(GL_Perspective,3410847,413,231) { Fovy=20 } Add(GL_Light,14989894,616,182) { link(Point,15609462:Point3D,[]) } Add(GL_Options,5809249,560,182) { Flag=2 link(onEvent,14989894:doEnabled,[]) } Add(GL_Options,5851269,511,182) { Flag=1 link(onEvent,5809249:doEnabled,[]) } Add(GL_Options,1101264,462,182) { link(onEvent,5851269:doEnabled,[]) } Add(GL_Sphere,5536542,581,301) { Radius=0.4 Slices=50 Stacks=50 link(onDraw,7011543:doEvent1,[(625,307)(625,339)(338,339)(338,370)]) } Add(GL_Color,11015715,532,301) { Color=65535 link(onColor,5536542:doDraw,[]) } Add(GL_Point3D,15609462,616,133) { } Add(GL_Sphere,8354190,721,413) { Radius=0.08 } Add(Gl_Translate,6506827,616,413) { link(onTranslate,7018867:doColor,[]) link(X,4449392:Var1,[]) link(Y,4449392:Var2,[]) link(Z,4449392:Var3,[]) } Add(GL_Rotate,15834536,567,413) { link(onRotate,6506827:doTranslate,[]) link(X,14563003:Var1,[]) link(Y,14563003:Var2,[]) link(Z,14563003:Var3,[]) } Add(Counter,13547329,462,364) { Max=360 } Add(Hub,7011543,350,364) { link(onEvent1,13547329:doNext,[]) link(onEvent2,10105515:doEnum,[(376,377)(376,409)(86,409)(86,440)]) } Add(ArrayEnum,10105515,98,434) { link(onItem,9384483:doSplit,[]) link(Array,16758122:Array,[]) } Add(StrPart,9384483,168,434) { Char=" " Point(onNotFound) link(onSplit,14982723:doSplit,[(289,440)(289,503)]) link(onPart,4104440:doSplit,[(289,447)(289,559)]) link(onNotFound,15521501:doEvent1,[]) } Add(FormatStr,10891833,378,448) { DataCount=1 Mask="Невозможно создать планету с координатами:%1\r\nНекорректные данные" link(onFString,11716802:doMessage,[]) link(Str1,10105515:Item,[(384,409)(146,409)(146,478)(104,478)]) } Add(Message,11716802,462,448) { } Add(GL_Main,7755013,357,182) { Color=0 Point(Fps) link(onInit,12198675:doInit,[]) link(onViewPort,3410847:doPerspective,[(401,195)(401,237)]) link(Handle,5090005:Handle,[]) } Add(DoData,12890407,518,245) { link(onEventData,8157679:doWork1,[]) link(Data,7755013:Fps,[(524,229)(370,229)]) } Add(StrPart,14982723,378,497) { Char=";" Point(onNotFound) link(onSplit,11729494:doSplit,[]) link(onPart,4449392:doWork1,[(488,510)(488,349)]) link(onNotFound,15521501:doEvent2,[(422,517)(422,489)(331,489)(331,461)]) } Add(StrPart,11729494,462,497) { Char=";" Point(onNotFound) link(onSplit,4449392:doWork3,[(530,503)(530,363)]) link(onPart,4449392:doWork2,[(530,510)(530,356)]) link(onNotFound,15521501:doEvent3,[(504,517)(504,489)(331,489)(331,468)]) } Add(Hub,15521501,343,448) { InCount=5 OutCount=1 link(onEvent1,10891833:doString,[]) } Add(MultiElement,4449392,616,343) { link(onEvent1,3419732:doData,[(653,349)(653,384)(450,384)(450,419)]) } BEGIN_SDK Add(EditMulti,6069824,21,21) { EventCount=1 WorkCount=3 VarCount=3 Height=172 link(doWork1,14565522:doValue,[(35,27)(35,48)]) link(doWork2,8310594:doValue,[(56,34)(56,90)]) link(doWork3,14381766:doValue,[(77,41)(77,132)]) link(Var1,14565522:Value,[(27,133)(55,133)]) link(Var2,8310594:Value,[(34,155)(97,155)]) link(Var3,14381766:Value,[(41,175)(139,175)]) } Add(Memory,14565522,49,42) { } Add(Memory,8310594,91,84) { } Add(Memory,14381766,133,126) { link(onData,1293959:doData,[(198,132)(198,83)]) } Add(DoData,1293959,238,77) { link(onEventData,6069824:onEvent1,[(292,83)(292,27)]) link(Data,14615144:Value,[]) } Add(Memory,14615144,238,28) { } END_SDK Add(MultiElement,14563003,574,350) { } BEGIN_SDK Add(EditMulti,6069824,21,21) { WorkCount=3 VarCount=3 Width=272 Height=172 link(doWork1,6726810:doEvent1,[(35,27)(35,48)]) link(doWork2,9767350:doEvent1,[(87,34)(87,90)]) link(doWork3,2700951:doEvent1,[(109,41)(109,132)]) link(Var1,14565522:Value,[(27,133)(146,133)]) link(Var2,8310594:Value,[(34,155)(188,155)]) link(Var3,14381766:Value,[(41,175)(230,175)]) } Add(Memory,14565522,140,42) { } Add(Memory,8310594,182,84) { } Add(Memory,14381766,224,126) { } Add(Hub,6726810,112,42) { link(onEvent1,14565522:doClear,[(133,48)(133,55)]) link(onEvent2,14565522:doValue,[(133,55)(133,48)]) } Add(Hub,9767350,154,84) { link(onEvent1,8310594:doClear,[(175,90)(175,97)]) link(onEvent2,8310594:doValue,[(175,97)(175,90)]) } Add(Hub,2700951,196,126) { link(onEvent1,14381766:doClear,[(217,132)(217,139)]) link(onEvent2,14381766:doValue,[(217,139)(217,132)]) } END_SDK Add(StrPart,4104440,378,553) { Char=";" Point(onNotFound) link(onSplit,4857923:doSplit,[]) link(onPart,14563003:doWork1,[(468,566)(468,356)]) link(onNotFound,15521501:doEvent4,[(422,573)(422,524)(331,524)(331,475)]) } Add(StrPart,4857923,462,553) { Char=";" Point(onNotFound) link(onSplit,14563003:doWork3,[(510,559)(510,370)]) link(onPart,14563003:doWork2,[(510,566)(510,363)]) link(onNotFound,15521501:doEvent5,[(506,573)(506,527)(331,527)(331,482)]) } Add(GL_Color,7018867,672,413) { Color=12632256 link(onColor,8354190:doDraw,[]) } Add(HubEx,4443963,294,189) { link(onEvent,7755013:doViewPort,[]) } Add(ChildPanel,8157679,658,245) { link(onEvent1,2619649:doOperation,[(702,251)(702,265)(135,265)(135,279)]) link(onEvent2,4606160:doOperation,[(702,258)(702,290)(149,290)(149,321)]) } BEGIN_SDK Add(EditMulti,8546208,21,21) { EventCount=2 WorkCount=2 VarCount=1 Height=249 link(doWork1,8008547:doString,[(53,27)(53,104)]) link(doWork2,14936589:doString,[(53,34)(53,153)]) } Add(Image,3664806,84,35) { Width=426 Height=50 Align=5 ViewStyle=3 Picture=[ZIPE61D000078DAED573B9214310C35312109472026D8039073E6E990A3B4F5B902836D7DEDEED9658A82DA2A5A336ADBD2D3D3B33AEA6FDF7F16B197E65F9A7F68FE75AC9F47FC47F34F1FC5CD6EB75BB9DFEF8599FF9AD75A8703C0C111BBE3C189E8E067DC5DFBB66D7DFD07567ACF776897AE4BD7A5EBD275E9BA745DBA2E5D97AE4BD7A5EBD2F5FFEA6ADF9B751F8FF11CEBD8EE1AB7651F3FB3DDF1A364570A2BCA957BE2F63E7B8072898586AE68F09CED8FE36F53E66B1DB3322F31A8277B88039C43253045E014731A83F383EA82290C39D23B8E3F9800D00542EF82CEB75A8352064A0053E7A8ECBA00B4B77080B5879402D103C62A3B5DC1E25A53E3509D43701592B4380224B9FD590A64ABE01DEAD4BA2A0940166EF780555D90E8AC211E7E2798A25E3FF8BA2EE3392AAC89A3CE7CE04515E6CA18CE1A89B1E49143888DED322F31F4C77386CFE45F07375D1D808F4A646B695FD0C54BCAEB13020D79486BB55F1FB3009123F3C255D9240F272D6852D3C67723AD675C042843BC0C44BD18CE2FA8874B51A2E122107D10884EA8006F1E1B190E2A09663933A7A31DA5B7F272BFEED035E7A6331856151AA5236C72989821D3A0378BA0BFFFE805DE5ED0AA0B26A63F31781602A7D9985737229A8E79DB52749A3A42970D3D424A47B2280580BA2E1343DE5A56ABD0A83C28F2069E2E437E05C24011E5FB79FFD1D178298BD379918064910AE110936272DE08C47D3593DC47E2F3264712390999280F50D7A5DD5DBEB68A40384D3A29F3938D98BC83737A4ED3EA39AB70F246A5C40123392D98F5D0994E0D2326DD746238A117E2786984A66B31A6DF327E1BCDBECA6FC2BF52DF75F538F3A924A162DBF1023E402563F9032E9DD988432E2748D3D5CECC39C95263313D388FA81B010EFEF53E3621664EB289B382491BB3D3B46DFB1E122DC6A28214C802676FE1225319B377352136670B643EE961834F7F9DF828D7EF344A0FA2F4BD443C5306B1F1FB58E6BB84C4B56A62A7D427BDFDF69D767F9756CA6DBB2DA6816D3BC40E50896CE3E781ADD909F4767BD0C828F2BE945FB15BCF30] } Add(Panel,3833858,35,35) { Left=35 Top=105 Width=426 Align=2 BorderWidth=0 BevelWidth=0 } Add(Label,214173,133,98) { Left=5 Top=5 Width=45 Color=15461099 Font=[Arial,9,0,0,204] Caption="FPS:" } Add(FormatStr,8008547,84,98) { DataCount=1 Mask="FPS:%1" link(onFString,214173:doText,[]) } Add(Label,10856199,135,147) { Left=55 Top=5 Width=45 Height=19 Color=15461099 Font=[Arial,9,4,16711680,204] Caption="Int:10" link(onClick,2081465:doPopupHere,[]) } Add(FormatStr,14936589,84,147) { DataCount=1 Mask="Int:%1" link(onFString,10856199:doText,[]) } Add(PopupMenu,2081465,189,147) { Menu=#2:+5|2:-5| link(onClick,5330306:doEvent,[]) } Add(IndexToChanel,5330306,238,147) { link(onEvent1,8546208:onEvent1,[(296,153)(296,27)]) link(onEvent2,8546208:onEvent2,[(296,160)(296,34)]) } END_SDK Add(Memory,16652919,147,224) { Default=Integer(10) link(onData,15683222:doInterval,[(201,230)(201,293)]) } Add(Math,2619649,147,273) { Op2=5 ResultType=0 link(onResult,3811096:doEvent1,[(191,279)(191,255)(107,255)(107,230)]) link(Op1,12763006:Var2,[]) } Add(Math,4606160,161,315) { OpType=1 Op2=5 ResultType=0 link(onResult,3811096:doEvent2,[(205,321)(205,279)(107,279)(107,237)]) link(Op1,12763006:Var3,[(167,264)]) } Add(GetDataEx,12763006,147,259) { link(Data,16652919:Value,[]) } Add(Hub,3811096,119,224) { InCount=2 link(onEvent1,16652919:doValue,[]) link(onEvent2,8157679:doWork2,[(395,237)(395,258)]) } Add(MultiElement,10714674,413,301) { link(onEvent1,3547845:doDraw,[]) link(Data1,5090005:MouseX,[(419,223)(370,223)]) link(Data2,5090005:MouseY,[(426,223)(377,223)]) } BEGIN_SDK Add(EditMulti,4359962,3,3) { EventCount=1 WorkCount=2 DataCount=2 Width=391 Height=172 link(doWork1,6708412:doCompare,[(19,9)(19,132)]) link(doWork2,13824406:doNext,[(54,16)(54,76)]) } Add(GL_Rotate,3276760,224,126) { Y=1 link(onRotate,8079493:doRotate,[]) link(Angle,12089164:Value,[]) } Add(GL_Rotate,8079493,315,126) { X=1 link(onRotate,4359962:onEvent1,[(363,132)(363,9)]) link(Angle,7733791:Value,[]) } Add(If_else,6708412,84,126) { Op2=Integer(1) link(onTrue,11680729:doData,[(142,132)(142,69)]) link(onFalse,10125040:doEvent1,[(121,139)(121,132)]) link(Op1,13824406:Count,[]) } Add(Counter,13824406,84,70) { Max=1 } Add(DoData,11680729,168,63) { link(onEventData,12089164:doValue,[]) link(Data,4359962:Data1,[(174,33)(9,33)]) } Add(Memory,12089164,224,63) { Default=Integer(0) link(onData,5664372:doData,[]) } Add(DoData,5664372,266,63) { link(onEventData,7733791:doValue,[]) link(Data,4359962:Data2,[(272,33)(16,33)]) } Add(Memory,7733791,315,63) { Default=Integer(0) link(onData,10125040:doEvent2,[(359,69)(359,104)(135,104)(135,139)]) } Add(DoData,5686361,175,126) { link(onEventData,3276760:doRotate,[]) } Add(Hub,10125040,147,126) { InCount=2 OutCount=1 link(onEvent1,5686361:doData,[]) } END_SDK Add(StrList,16758122,84,343) { Strings=#11:0;1;0 0;0;1|11:0;1;0 0;0;1| } Add(Gl_Axis,3547845,476,301) { TitleScale=0.3 link(onDraw,11015715:doColor,[]) } Add(DoData,3419732,462,413) { link(onEventData,15834536:doRotate,[]) link(Data,13547329:Count,[]) } Add(InfoTip,9884484,63,322) { Info=#7:Планеты| Width=71 Height=74 }
2-ю планету глючит и все после нее
Немного о самой программе: Отображает FPS Меняется интервал между обновлением, клик на индикаторе. Можно менять обзор камеры, клик на рабочем поле - разфиксировать, повторный клик - зафиксировать
|