Образуване на повърхности на микро ниво
ОформянеповърхностKoons:Импортиране на "E:\OXK\Poverh1.dxf",1 ' импортиране на всичките 4 линии CurrObjNmb = 0 ' направете първия ред u0 активен Set P00= Polyline.P (0) Set P01= Polyline.P (1) CurrObjNmb = 1 'направете линия u1 активен Set P10 = Polyline.P (0) Задайте P11= полилиния.P (1)
'Решетъчни секции в посока v
За v=0 до 1 стъпка 0.1 CurrObjNmb = 2 Задайте Pb= Polyline.P (v) xb=Pb.x yb=Pb.y zb=Pb.z За u=0 до 1 стъпка 0.1 Pov_Kuns u,v,x,y,z ' Ngpoint.s x,y,z Otrezok.s xb,yb,zb,x,y,z xb=x yb=y z b=z Следващ Следващ
'Решетъчни секции в посока u
За u=0 до 1 стъпка 0.1 CurrObjNmb = 0 Задайте Pb= Polyline.P (u) xb=Pb.x yb=Pb.y zb=Pb.z За v=0 до 1 стъпка 0.1 Pov_Kuns u,v,x,y,z ' Ngpoint.s x,y,z Otrezok.s xb,yb,zb,x,y,z xb=x yb=y z b=z Следващ Следващ ' Изчисляване на точков вектор от u,v
Sub Pov_Kuns (u,v,x,y,z) ' Прави u0-u1 CurrObjNmb = 0 ' прави първия ред u0 активен Set pi = Polyline.P (u) CurrObjNmb = 1 ' прави първия ред u1 активен Set pj = Polyline.P (u) xu=(1-v)*pi.x+v*pj.x yu=(1-v)*pi. y+v*pj.y zu=(1-v)*pi.z+v*pj.z ' Правен v0-v1 CurrObjNmb = 2 ' прави v0 активен Set pi = Polyline.P (v) CurrObjNmb = 3 Set pj = Polyline.P (v) xv=(1-u)*pi.x+u*pj.x yv=(1-u)*pi.y+u*p j.y zv=(1-u)*pi .z+u*pj.z ' Наклонена равнина xi=(1-v)*p00.x+v*p10.x yi=(1-v)*p00.y+v*p10.y zi=(1-v)*p00.z+v*p10.z xj=(1-v)*p01.x+v*p11.x yj=( 1-v)*p01.y+v* p11.y zj=(1-v)*p01.z+v*p11.z xkp=(1-u)*xi+u*xj ykp=(1-u)*yi+u*yj zkp=(1-u)*zi+u*zj ' общо x=xv+xu-xkp y=yv+yu-ykp z=z v+zu-zkp End Sub
Повърхностите Безие са един от начините за рендиране на гладки повърхности.
Фиг. 1. Повърхност на Безие.
Ако имаме колекция от точки (правоъгълна мрежа) в пространството, тогава можемизградете гладка повърхност, която ще "повтаря" многостенна повърхност (фиг.1.)
Фиг.2. Зелените точки са контролните точки, върху които е изградена повърхността. Жълтите линии ги свързват. Бялата мрежа е апроксимационната мрежа на повърхността на Безие.
Трябва да създадетееднаповърхност на Безие, дефинирана от поне 16 контролни точки, като използвате функции от GL библиотеката (glMap2[fd], glMapGrid2[fd], glEvalMesh2). Ще бъдат добавени точки за сложността и оригиналността на повърхността. За безинтересна повърхност могат да бъдат приспаднати байлс. Източникът на светлина присъства.
Описание на функцията glMap2[fd], glMapGr > Всички следващи функции се извикват на същото място като примитивите.
Фиг. 1. Контролни точки B(i,j). Упътвания u, v.
Задайте точки на прекъсване:
voidglMap2d( цел GLenum,
// тип данни. Ако е равно на GL_MAP2_VERTEX_3, тогава конструкцията на повърхността се основава на масив от точки от три координати (x, y, z). Можете да зададете GL_MAP2_VERTEX_4, тогава точката се дава от 4 координати (x, y, z, h), където h е теглото.
// начална стойност на параметъра в посока u
// крайна стойност на параметъра в посока u
// количество двойни данни между съседни точки в посока u
// брой точки в посока u
// начална стойност на параметъра в посока v
// крайна стойност на параметъра в посока v
// количество двойни данни между съседни точки в посока v
// брой точки в посока v
// масив от контролни точки, определящи повърхността
Определяне на апроксимиращата мрежа, използвана за изграждане на повърхността:
voidglMapGrid2d( GLint un,
//броят на точките на мрежата в посока u ще бъде un+1
// начална стойност на параметъра в посока u
// крайна стойност на параметъра в посока u
// броят на точките на мрежата в посока v ще бъде равен на vn+1
// начална стойност на параметъра в посока v
// крайна стойност на параметъра в посока v
Указва параметрите за рендиране за повърхност на Безие.
voidglEvalMesh2( режим GLenum,
// GL_LINE - показва се мрежата, апроксимираща повърхността GL_FILL - показва се повърхността GL_POINT - точките на мрежата на апроксимиращата повърхност