Вверх ↑
Этот топик читают: Гость
Ответов: 3514
Рейтинг: 184
#1: 2008-12-29 15:00:11 ЛС | профиль | цитата
1.
Как вывести куб?
code_11092.txt
карма: 0
1
файлы: 1code_11092.txt [2.1KB] [147]
Голосовали:Валерий
Ответов: 875
Рейтинг: 101
#2: 2008-12-29 15:18:07 ЛС | профиль | цитата
во первых ты не туда куп приклеил и во вторых он у тебя был ацких размеров


Add(MainForm,5883400,189,252)
{
Width=807
Height=508
Position=1
Point(Handle)
Point(onResize)
Point(MouseX)
Point(MouseY)
link(onCreate,13588785:doEvent1,[])
link(onResize,7272572:doWork3,[(232,279)(232,315)(305,315)])
}
Add(GL_Main,4510843,364,266)
{
link(onInit,12198675:doInit,[])
link(onViewPort,3410847:doPerspective,[])
link(Handle,13175165:Var,[])
}
Add(Hub,13588785,252,266)
{
link(onEvent1,4510843:doInit,[])
link(onEvent2,7272572:doWork2,[])
}
Add(HubEx,7272572,301,266)
{
link(onEvent,4510843:doViewPort,[])
}
Add(LineBreak,162140,189,301)
{
Type=1
link(Data,5883400:Handle,[])
Primary=[13175165,175,-63]
}
Add(Timer,9506849,196,406)
{
Interval=10
link(onTimer,1049454:doEvent1,[])
}
Add(GL_GTools,771925,308,406)
{
Point(doClear)
Point(doPushMatrix)
Point(doPopMatrix)
}
Add(Hub,1049454,245,406)
{
OutCount=5
link(onEvent1,771925:doClear,[])
link(onEvent2,771925:doPushMatrix,[])
link(onEvent3,4124669:In,[])
link(onEvent4,771925:doPopMatrix,[(293,433)(293,426)])
link(onEvent5,13892617:In,[(293,440)(293,447)])
}
Add(LineBreak,1265496,315,280)
{
link(Out,4510843:doFlip,[])
Primary=[13892617,0,161]
}
Add(MultiElement,10714674,196,329)
{
link(onEvent1,701947:doTranslate,[])
link(Data1,5883400:MouseX,[])
link(Data2,5883400:MouseY,[])
}
BEGIN_SDK
Add(EditMulti,4359962,10,10)
{
EventCount=1
WorkCount=1
DataCount=2
Width=223
Height=109
link(doWork1,3276760:doRotate,[(26,16)(26,62)])
}
Add(GL_Rotate,3276760,42,56)
{
Y=1
link(onRotate,8079493:doRotate,[])
link(Angle,4359962:Data1,[(48,33)(16,33)])
}
Add(GL_Rotate,8079493,119,56)
{
X=1
link(onRotate,4359962:onEvent1,[(196,62)(196,16)])
link(Angle,4359962:Data2,[(125,33)(23,33)])
}
END_SDK
Add(GL_CallList,10231433,350,350)
{
Index=1
}
Add(Gl_Translate,701947,252,329)
{
Y=-0.8
link(onTranslate,9494542:doDraw,[])
}
Add(LineBreak,10926046,147,329)
{
link(Out,10714674:doWork1,[])
Primary=[4124669,203,91]
}
Add(GL_Perspective,3410847,420,273)
{
Fovy=25
}
Add(GL_GluTools,12198675,476,266)
{
DrawStyle=0
Orientation=0
}
Add(GL_Cube,9494542,441,329)
{
}
карма: 1

1
Голосовали:Астрамак
Ответов: 3514
Рейтинг: 184
#3: 2008-12-29 16:35:52 ЛС | профиль | цитата
flud, спасибо.

2. Почему "туман" у меня покрывает только объект, а не всё "изображение"? Так задумано?
3. Как использовать "отсечение сторон" для данного куба?
code_11095.txt
карма: 0
1
файлы: 1code_11095.txt [2.4KB] [185]
Голосовали:Валерий
Ответов: 1304
Рейтинг: 405
#4: 2008-12-29 19:42:49 ЛС | профиль | цитата
Астрамак, практически ответ в вопросе, туман можно применить только к некому объекту, сам по себе он не существует. Фактически туман как свойство объекта а не как капельки води или частицы дыма.
Отсечение как и туман надо задеиствовать через флаги GL_Options. На счёт отсечения куба, очень трудно понять визуально что куб отсечён, необходимо что нибудь поместить в внутрь куба. И если не пременить двухстороннее освещение внутри куба будет темнота.
code_11096.txt
карма: 3

1
файлы: 1code_11096.txt [3.3KB] [193]
Голосовали:Астрамак
Ответов: 3514
Рейтинг: 184
#5: 2008-12-29 19:54:01 ЛС | профиль | цитата
MAV, спасибо.

4. Т.е. отсечение это когда мне убирают передние "стенки"? А как мне сделать куб, как на иконке данного компонента, что бы между сторонами куба было расстояние (не сторонами даже скорей, а гранями). Рисовать каждую плоскость отдельно?
карма: 0
1
Голосовали:Валерий
Ответов: 1304
Рейтинг: 405
#6: 2008-12-29 21:05:56 ЛС | профиль | цитата
Астрамак, абсолютно правильно, отсекается передня или задняя или обе сразу .
Плоскости рисовать можно отдельно через координаты x,y,z , можно нарисовать одну плоскость а затем её поворачивать со смещением. В данном примере обязательно надо включить тест глубины glfDepthTest. И я учёл смещение по Y, а для всех граней куба необходимо учитывать сдвиг и по X.
code_11100.txt

карма: 3

1
файлы: 1code_11100.txt [4.1KB] [205]
Голосовали:Астрамак
Ответов: 3514
Рейтинг: 184
#7: 2008-12-29 21:32:03 ЛС | профиль | цитата
Кстати.. а ты не подумывал использовать мультик для отррисовки плоскостей по точкам? (где то читал такое сообщение)

И да, за пример спасибо..
карма: 0
1
Голосовали:Валерий
Гость
Ответов: 17029
Рейтинг: 0
#8: 2008-12-29 22:46:42 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-02 09:14:52
карма: 0

0
Ответов: 1304
Рейтинг: 405
#9: 2008-12-29 22:48:26 ЛС | профиль | цитата
Это был MAV.
карма: 3

0
Ответов: 3514
Рейтинг: 184
#10: 2008-12-29 23:05:22 ЛС | профиль | цитата
Берешь 4 точки из твоего списка, связываешь их в один поток и отправляешь на точку #add мультиэлемента
Add(MultiElementEx,12532899,392,287){
}
BEGIN_SDK
Add(EditMultiEx,4051887,21,21)
{
WorkCount=#5:##add|
Point(##add)
}
END_SDK
Обрабатываешь в мультике полученную строку и распределяешь координаты для рисования плоскости...

карма: 0
1
Голосовали:Валерий
Ответов: 1304
Рейтинг: 405
#11: 2008-12-29 23:38:00 ЛС | профиль | цитата
Астрамак, то ли я поглупел к вечеру, толи не совсем пойму суть идеи , хотя как раз занимаюсь проблемой отрисовки плоскостей(полигонов) по заданным координатам. Скорей всего мне просто трудно переключиться с одной идеи на другую.
карма: 3

0
Ответов: 3514
Рейтинг: 184
#12: 2008-12-30 00:38:42 ЛС | профиль | цитата
Суть идеи - отрисовывать полигон по данным координатам))
Вот кусок из твоего кода: code_11103.txt
В данном случае, что бы отрисовать один полигон из этих координат нам нужно найти:
координату 1 с самым большим 2
координату 1 с самым маленьким 2
координату 2 с самым большим 1
координату 2 с самым маленьким 1
(или я тоже к вечеру поглупел). Т.е. нам нужно найти КРАЙНИЕ точки.
------------ Дoбавленo:

В любых других случаях (когда у нас не квадрат, а какая нибудь произвольная фигура) нужно из последовательности точек брать 4 строки 9с координатами) и по ним отрисоввывать.

1
2
3
4
5
6
7


Вот так подавать на мультик:
Сначала: 1, 2, 3, 4. рисуем их.
Затем 2,3,4,5 - опять рисуем.
3,4,5,6 - рисуем. и всё это в компактном мультике.
Пример использования мультиэлемента в рисовании:
Add(Timer,3556552,287,430)
{
Interval=10
link(onTimer,9244294:doRefresh,[])
}
Add(PaintBox,9244294,336,430)
{
Left=135
Top=55
Width=210
Height=210
Color=12639424
ClearBeforeDraw=0
link(onBeforeDraw,9184855:doFor,[])
}
Add(Button,331381,287,479)
{
Left=200
Top=30
Width=65
Font=[Arial,8,0,0,1]
Caption="Add"
link(onClick,14227323:##add,[])
}
Add(MultiElementEx,14227323,336,479)
{
Mode=1
link(Handle,9244294:Bitmap,[])
}
BEGIN_SDK
Add(EditMultiEx,10129213,3,3)
{
WorkCount=#5:##add|8:##select|
VarCount=#7:##count|
DataCount=#6:Handle|
Width=440
Height=319
Point(##add)
Point(##select)
Point(##count)
link(##add,2149117:doRandom,[(19,9)(19,55)])
link(##select,10271306:doDraw,[(14,16)(14,251)])
}
Add(Img_Ellipse,10271306,91,245)
{
Point2AsOffset=0
Point(Point1)
Point(Point2)
link(onDraw,2658985:doOperation,[])
link(Bitmap,10129213:Handle,[(97,16)(9,16)])
link(Point1,4655807:Point,[])
link(Point2,5914282:Point,[(111,233)(139,233)])
}
Add(PointXY,5914282,133,189)
{
X=10
Y=10
}
Add(Memory,7646524,126,49)
{
link(onData,2559567:doWork1,[(169,55)(169,167)])
}
Add(Memory,10908804,189,49)
{
link(onData,2196150:doWork1,[(268,55)(268,167)])
}
Add(PointXY,4655807,98,140)
{
link(X,6591336:Var1,[(104,114)])
link(Y,13022105:Var1,[(111,121)])
}
Add(MultiElement,2559567,210,161)
{
}
BEGIN_SDK
Add(EditMulti,2784491,3,3)
{
WorkCount=1
VarCount=1
Height=102
link(doWork1,13198225:doCompare,[(26,9)(26,41)])
link(Var1,115467:Value,[(9,86)(272,86)])
}
Add(If_else,13198225,49,35)
{
Type=1
Op2=Integer(1)
link(onTrue,1277010:doWork2,[])
link(onFalse,4875620:doCompare,[])
}
Add(Switch,8043746,203,35)
{
DataOn=Integer(-2)
DataOff=Integer(2)
link(onSwitch,115467:doValue,[])
}
Add(If_else,4875620,112,42)
{
Type=2
Op2=Integer(200)
link(onTrue,1277010:doWork3,[(179,48)])
}
Add(HubEx,1277010,175,28)
{
link(onEvent,8043746:doSwitch,[])
}
Add(Memory,115467,266,35)
{
Default=Integer(1)
}
END_SDK
Add(Hub,3093429,252,245)
{
link(onEvent1,11790344:doOperation,[])
link(onEvent2,2811565:doWork3,[(294,258)(294,283)(81,283)])
}
Add(Math,2658985,203,245)
{
link(onResult,3093429:doEvent1,[])
link(Op1,6591336:Var3,[(209,114)])
link(Op2,2559567:Var1,[])
}
Add(GetDataEx,6591336,119,105)
{
link(Data,7646524:Value,[])
}
Add(Math,11790344,308,245)
{
link(onResult,10908804:doValue,[(394,251)(394,26)(174,26)(174,55)])
link(Op1,13022105:Var3,[(314,121)])
link(Op2,2196150:Var1,[])
}
Add(GetDataEx,13022105,182,112)
{
link(Data,10908804:Value,[])
}
Add(MultiElement,2196150,315,161)
{
}
BEGIN_SDK
Add(EditMulti,2784491,3,3)
{
WorkCount=1
VarCount=1
Height=102
link(doWork1,13198225:doCompare,[(26,9)(26,41)])
link(Var1,115467:Value,[(9,86)(272,86)])
}
Add(If_else,13198225,49,35)
{
Type=1
Op2=Integer(1)
link(onTrue,1277010:doWork2,[])
link(onFalse,4875620:doCompare,[])
}
Add(Switch,8043746,203,35)
{
DataOn=Integer(-1)
DataOff=Integer(1)
link(onSwitch,115467:doValue,[])
}
Add(If_else,4875620,112,42)
{
Type=2
Op2=Integer(200)
link(onTrue,1277010:doWork3,[(179,48)])
}
Add(HubEx,1277010,175,28)
{
link(onEvent,8043746:doSwitch,[])
}
Add(Memory,115467,266,35)
{
Default=Integer(1)
}
END_SDK
Add(Random,2149117,35,49)
{
Min=1
link(onRandom,2811565:doWork2,[])
}
Add(HubEx,2811565,77,42)
{
link(onEvent,7646524:doValue,[])
}
END_SDK
Add(For,9184855,392,430)
{
IncludeEnd=1
link(onEvent,14227323:##select,[(431,436)(431,527)(326,527)(326,492)])
link(End,14227323:##count,[(405,420)(380,420)(380,521)(342,521)])
}
карма: 0
1
файлы: 1code_11103.txt [990B] [139]
Голосовали:Валерий
Ответов: 875
Рейтинг: 101
#13: 2009-01-12 10:16:51 ЛС | профиль | цитата
не буду создавать лишнюю тему спрошу сдесь.

1. Как отобразить FPS (кадры в секунду)
2. Возможно ли включить сглаживание, зубчатые грани и жуткие текстуры...
3. Как сделать обзорную камеру, тоесть как в играх, не обьект вращать, а именно камеру в сцене


карма: 1

0
Ответов: 2125
Рейтинг: 159
#14: 2009-01-12 21:20:09 ЛС | профиль | цитата
3. Всё в мире относительно, кто-то камеру вращает, а кто-то всё остальное
карма: 1

0
Ответов: 1304
Рейтинг: 405
#15: 2009-01-13 15:49:16 ЛС | профиль | цитата
flud писал(а):
1. Как отобразить FPS (кадры в секунду)
2. Возможно ли включить сглаживание, зубчатые грани и жуткие текстуры...
3. Как сделать обзорную камеру, тоесть как в играх, не обьект вращать, а именно камеру в сцене


1. Пример, fps test, см. публикатор.
2. Пример, Preparation_texture, см. публикатор. Что касается зубцов и граней, включи через драйвер видеокарты сглаживание, 4х будет вполне достаточно.
3. Элемент Gl_Translate(перенос), и GL_Rotate(поворот). Исходя что камера, то есть глаза наблюдателя, находятся неподвижно в центре 3D сцены, начинаешь поворачивать всё сцену(включая и объект), то-же самое с приближением и удалением. Пример Sun_0.0.5, в этом примере кажется что наблюдатель летит через звёзды, на самом деле наблюдатель стоит на месте и вся вселенная пролетает мимо него, это про относительность.

карма: 3

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