|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
Всё просто, начинаем от цифры 3 - это количество координат на точку - оставляем как есть. Далее количество самих точек, было 4 - размерность массива (0..3). Размерность увеличили - увеличиваем и число в параметре. Далее я описывал 12 и 4. 12 - произведение размерности точек (3 координаты) на размерность массива точек (0..3) = 12. И в заключении снова размерность массива (0..3) отсюда и цифра 4.
Пример: Код:
ctrlpoints : Array [0..3, 0..3, 0..2] ... glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, @ctrlpoints); Код:
ctrlpoints : Array [0..6, 0..3, 0..2] ... glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 7, 0, 1, 21, 7, @ctrlpoints); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#17
|
|||
|
|||
Теперь рисуется вообще не понятно что, возможно я дополнительные координаты неправильно дописала,
Код:
( (1, -3, 0), (2, -3, -5), (2, 3, -5), (1, 3, 0)), ( (-1, -3, 0), (-2, -3, -5), (-2, 3, -5), (-1, 3, 0)), |
#18
|
||||
|
||||
Массив увеличен правильно. Как описала glMap2f? Должно получиться:
Код:
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 6, 0, 1, 18, 6, @ctrlpoints); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#19
|
|||
|
|||
Да, я всё так и сделала, только сфера не получается ((
|
#20
|
||||
|
||||
Если особо не заморачиваться, то можно сделать так:
Код:
const pt1 : array[0..3, 0..3, 0..2] of GLFloat = ( (( 2, -2, 0), ( 3, -1, 0), ( 3, 1, 0), ( 2, 2, 0)), (( 1, -3, 0), ( 2, -3, 5), ( 2, 3, 5), ( 1, 3, 0)), ((-1, -3, 0), (-2, -3, 5), (-2, 3, 5), (-1, 3, 0)), ((-2, -2, 0), (-3, -1, 0), (-3, 1, 0), (-2, 2, 0))); pt2 : array[0..3, 0..3, 0..2] of GLFloat = ( ((-2, -2, 0), (-3, -1, 0), (-3, 1, 0), (-2, 2, 0)), ((-1, -3, 0), (-2, -3, -5), (-2, 3, -5), (-1, 3, 0)), (( 1, -3, 0), ( 2, -3, -5), ( 2, 3, -5), ( 1, 3, 0)), (( 2, -2, 0), ( 3, -1, 0), ( 3, 1, 0), ( 2, 2, 0))); ... function DrawGLScene : Boolean; var x, y : Integer; begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glPushMatrix; glScale(0.5, 0.5, 0.5); glRotatef(90, 1, 0, 0); glColor3f(0.0, 1.0, 1.0); if solid then begin glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, @pt1); glEvalMesh2(GL_FILL, 0, 20, 0, 20); glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, @pt2); glEvalMesh2(GL_FILL, 0, 20, 0, 20); end else begin glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, @pt1); glEvalMesh2(GL_LINE, 0, 20, 0, 20); glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, @pt2); glEvalMesh2(GL_LINE, 0, 20, 0, 20); end; if mode then begin // The following code displays the control points as dots. glColor3f(1.0, 1.0, 0.0); glBegin(GL_POINTS); for x := 0 to 3 do for y := 0 to 3 do glVertex3fv(@pt1[x][y][0]); for x := 0 to 3 do for y := 0 to 3 do glVertex3fv(@pt2[x][y][0]); glEnd; end; glPopMatrix; Result := True; end; function InitGL : Boolean; var bol : Boolean; begin glClearColor(0.0, 0.0, 0.0, 0.0); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_TEXTURE_2D); // источник света glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_POINT_SMOOTH); glPointSize(5.0); // загрузка текстуры Bol := LoadTexture; if Bol then begin texpts[0][0][0] := 0.0; texpts[0][0][1] := 0.0; texpts[1][0][0] := 0.0; texpts[1][0][1] := 1.0; texpts[0][1][0] := 1.0; texpts[0][1][1] := 0.0; texpts[1][1][0] := 1.0; texpts[1][1][1] := 1.0; // поверхность glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, @texpts); glEnable(GL_MAP2_TEXTURE_COORD_2); glEnable(GL_MAP2_VERTEX_3); glMapGrid2f(20, 0.0, 1.0, 20, 0.0, 1.0); end; Result := True; end; P.S. Чтобы сфера выглядела аккуратной, нужно тщательнее просчитать координаты точек. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Arina5 (21.12.2011)
|
#21
|
|||
|
|||
Да, спасибо, теперь хоть рисуется сфера )) а вот этот шов, который получается, его никак не получится "обыграть"?
|
#22
|
|||
|
|||
и еще можно спросить, что мы здесь проверяем
Код:
if solid then Код:
if mode then |
#23
|
||||
|
||||
Про шов, я писал выше.
Если solid рисуем текстуру иначе сетку. Если mode рисуем точки. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |