Вверх ↑
Ответов: 1304
Рейтинг: 405
#1: 2010-03-21 19:43:17 ЛС | профиль | цитата
Aziz, интересные совпадения, пару дней как раз убил на буфер выбора. По моим скромным заключениям буфер выбора оказался делом заморочным и пригодным только для 2D, при поворотах сцены параметры матриц необходимо пересчитывать . Возможно я ошибаюсь и в твоём компоненте это учтено(чуть позже попытаюсь разобраться). Если это так то помоги разобраться с примером, вращается сцена а на ней бублик, надо его отловить.


Add(MainForm,15261923,28,35)
{
Left=20
Top=105
Width=440
Height=421
Point(MouseX)
Point(MouseY)
Point(onResize)
Point(Handle)
Point(Width)
Point(Height)
Point(onMouseDown)
link(onCreate,16299401:doEvent1,[(75,55)(75,202)])
link(onResize,16131419:doWork1,[(137,62)])
link(onMouseDown,13366391:doClick,[(128,69)(128,160)])
}
Add(GL_Main,12986311,168,196)
{
link(onInit,12198675:doInit,[])
link(onViewPort,3410847:doPerspective,[(223,209)(223,251)])
link(Handle,15261923:Handle,[(174,133)(48,133)])
}
Add(Timer,9506849,56,245)
{
Interval=33
Enable=1
link(onTimer,1049454:doEvent1,[])
}
Add(GL_GTools,771925,168,245)
{
Point(doClear)
Point(doPushMatrix)
Point(doPopMatrix)
}
Add(Hub,1049454,105,245)
{
OutCount=5
link(onEvent1,771925:doClear,[])
link(onEvent2,771925:doPushMatrix,[])
link(onEvent3,13366391:doDraw,[(179,265)(179,153)])
link(onEvent4,771925:doPopMatrix,[(156,272)(156,265)])
link(onEvent5,12986311:doFlip,[(151,279)(151,216)])
}
Add(Hub,16299401,84,196)
{
OutCount=3
link(onEvent1,12986311:doInit,[])
link(onEvent2,16131419:doWork2,[])
link(onEvent3,9506849:doTimer,[(111,216)(111,234)(46,234)(46,251)])
}
Add(GL_GluTools,12198675,231,196)
{
link(onInit,1101264:doEnabled,[])
}
Add(GL_Light,14989894,427,196)
{
link(onEnabled,4378486:doEnabled,[])
}
Add(GL_Options,1101264,280,196)
{
link(onEvent,5851269:doEnabled,[])
}
Add(GL_Options,5851269,329,196)
{
Flag=1
link(onEvent,5809249:doEnabled,[])
}
Add(GL_Options,5809249,378,196)
{
Flag=2
link(onEvent,14989894:doEnabled,[])
}
Add(MultiElement,10714674,294,147)
{
link(onEvent1,15200808:doDraw,[])
link(Data1,7732851:Var3,[(300,117)])
link(Data2,3146508:Var3,[(307,110)])
}
BEGIN_SDK
Add(EditMulti,4359962,3,3)
{
EventCount=1
WorkCount=1
DataCount=2
Width=223
Height=109
link(doWork1,3276760:doRotate,[(19,9)(19,55)])
}
Add(GL_Rotate,3276760,35,49)
{
Y=1
link(onRotate,8079493:doRotate,[])
link(Angle,4359962:Data1,[(62,15)(9,15)])
}
Add(GL_Rotate,8079493,112,49)
{
X=1
link(onRotate,4359962:onEvent1,[(189,55)(189,9)])
link(Angle,4359962:Data2,[(139,8)(16,8)])
}
END_SDK
Add(GL_Perspective,3410847,231,245)
{
Fovy=20
}
Add(HubEx,16131419,133,203)
{
link(onEvent,12986311:doViewPort,[])
}
Add(OGLInteractive,13366391,238,147)
{
link(MouseX,7732851:Var1,[(244,105)(111,105)])
link(MouseY,3146508:Var1,[(251,95)(97,95)])
link(Width,15261923:Width,[(258,87)(55,87)])
link(Height,15261923:Height,[(265,81)(62,81)])
link(DrawN,10714674:doWork1,[])
link(OnSelect,15261923:doCaption,[(279,160)(279,26)(20,26)(20,41)])
}
Add(GL_Torus,15200808,343,147)
{
inRadius=0.15
outRadius=0.8
Sides=20
Rings=20
}
Add(GetDataEx,7732851,105,112)
{
Angle=3
link(Data,15261923:MouseX,[(34,117)])
}
Add(GetDataEx,3146508,91,105)
{
Angle=3
link(Data,15261923:MouseY,[(41,110)])
}
Add(GL_Options,4378486,476,196)
{
Flag=3
}

За то что в первом компоненте попытался поднять такую сложную тему +, а далее принимай критику .
а)схема оформлена отвратительна и практически нечитаема,
б)необходимо брать координаты клиенской области окна, можно типа glGetIntegerv(GL_VIEWPORT,@Viewport); второя и третья строка масива.
в)Куча мусора в виде ненужных коментов в hiOGLInteractive.pas
ps: в теме OpenGL_Extension вариант выбора объектов с использованием буфера цвета
карма: 3

0
файлы: 1code_17443.txt [2.9KB] [471]