#10 19.05.10 08:46
#11 19.05.10 11:10
Re: Open GL вырезка.
OpenGL (Open Graphics Library — открытая графическая библиотека) — спецификация, определяющая независимый от языка программирования кросс-платформенный программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.
Включает более 250-ти функций для рисования сложных трёхмерных сцен из простых примитивов. Используется при создании компьютерных игр, САПР, виртуальной реальности, визуализации в научных исследованиях. На платформе Windows конкурирует с Direct3D.
Offline
#12 19.05.10 22:28
Re: Open GL вырезка.
помойму там есть какая-то функция для вырезания, когда курил GLScene там помоему встречал)
Еще вариант замутить в 3D редакторе и там вырезать, а в OpenGL подгружать из файла, только наверное придется библиотеку для загрузки модельки найти)
на каком языке пишешь?
Offline
#13 20.05.10 23:15
#14 21.05.10 02:35
#15 21.05.10 08:33
#16 21.05.10 11:11
Re: Open GL вырезка.
Kefir 1%, не стой стороны смотришь. Тебе нужно не дырку в квадрате рисовать а рисовать квадрат вокруг дырки. то есть определиться с количеством точек которые будут определять окружность дырки (два варианта сложный и простой 1 - число точек постоянное - тогда круг с большим радиусом будет не круг. 2- сложный но круг будет красивый) затем написать функцию которая будет разбивать твой квадрат на примитивы . только после этого рисуй свой квадрат с дыркой. нарисуй два квадрата с дыркой соединен образующими получишь цилиндр с дыркой (и еще дырки в пирожковом техникуме а в НГТУ это отверстия)
и что бы натолкнуть на мысль вот:

достаточно схематично но все же.
центр окружности выберите сами. далее из центра проводим лучи. находим координаты точек пересечения лучей и окружности, лучей и фигуры. по сути окружность это ломаная с очень маленьким шагом. таким образом мы получаем массив четырехугольников. рисовать которые можно средствами OpenGL
В общем геометрия вам в помощь.
Исправлено Hix (21.05.10 12:41)
Offline
#17 21.05.10 13:11
#18 21.05.10 17:34
#19 21.05.10 18:44
#20 21.05.10 21:58
Re: Open GL вырезка.
glBegin(GL_QUAD_STRIP);
for(int i = 0; i < 32; i++) {
glVertex3f(cos(0.049087385 * i),sin(0.049087385 * i),-1);
glVertex3f(cos(0.049087385 * i),1,-1);
}
glEnd();
вот как бы, делаю четыре таких штуки)) и получилась вполне нормальное отверстие, осталось связать , спасибо за помощь !
Исправлено Kefir 1% (21.05.10 22:01)
Offline
#21 22.05.10 01:51
#22 22.05.10 14:25
#23 23.05.10 08:50
#24 23.05.10 17:05
#25 23.05.10 17:21
#26 23.05.10 18:23
#27 23.05.10 19:48
Re: Open GL вырезка.
Kefir 1%, посмотрел на картинку, и мне показалось что у тя с векторами нормалей что то не то (точнее их совсем нет). Конечно же это имеет смысл есдли тебе нужно внести в сцену освещение и улучшить отображение предметов.
так будет с освещением, решать тебе.

Исправлено Hix (23.05.10 19:49)
Offline
#28 23.05.10 22:21
Re: Open GL вырезка.
Hix, не, с освещением все в порядке, меня сглаживание волнует, оно как то по странному работает, что бы линии нормально выглядели, пришлось их толщину увеличить... может порекомендушь как сделать хорошее сглаживание?
я прописывал только: glEnable(GL_LINE_SMOOTH);
glShadeModel(GL_SMOOTH);
Offline
#29 24.05.10 01:12
#30 24.05.10 12:47
Re: Open GL вырезка.
[b]Kefir 1% короче если у тя стоит автонормаль то зря ждешь эффекта.
Вектор нормали - вектор перпендикулярный плоскости полигона.
находил я его так:
struct vertex //Вершина, хотя и сойдет для вектора.
{
float x;
float y;
float z;
};
vertex vNormal (vertex Av,vertex Bv,vertex Cv) //функция возвращает вектор нормали.
{
vertex V1,V2;
vertex result;
V1.x = Bv.x-Av.x;
V1.y = Bv.y-Av.y;
V1.z = Bv.z-Av.z;
V2.x = Cv.x-Bv.x;
V2.y = Cv.y-Bv.y;
V2.z = Cv.z-Bv.z;
result.x = (V1.y*V2.z)-(V1.z*V2.y);
result.y = (V1.z*V2.x)-(V1.x*V2.z);
result.z = (V1.x*V2.y)-(V1.y*V2.x);
return result;
}
Av, Bv Cv - координаты точек вершин полигона (в моем случае полигоны были треугольники, в твоем это 3 любые точки твоего четырех угольника.)
при рисовании сцены делаешь так:
Код::
glNormal3f(normal.x,normal.y,normal.z); //пример рисования одного полигона.
glVertex3f(A.x,A.y,A.z);
glVertex3f(B.x,B.y,B.z);
glVertex3f(C.x,C.y,C.z);Тогда собственно тебе ненадо будет рисовать линии на пересечении плоскостей. разница в освещенности будет давать границу.
а это мне понадобилось для включения света.
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
а это непосредственно источник в сцене.
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
pos и dir - x,y,z координаты позрциия "лампочки" и направление соответственно.
Начем пишешь???
Есь рабочие примеры как для Делфи. так и для С++
Исправлено Hix (24.05.10 13:29)
Offline
#31 24.05.10 14:28
#32 24.05.10 16:26
#33 24.05.10 16:30
#34 24.05.10 17:51
#35 24.05.10 18:46
#36 24.05.10 21:14
#37 24.05.10 22:07
#38 24.05.10 22:09
#39 24.05.10 23:45
#40 25.05.10 00:07
#41 25.05.10 01:00
Re: Open GL вырезка.
ТR0mm, Revenger, там framework нужен будет в дальнейшем, конечно он сейчас есть на каждом компьютере, но чем черт не шутит. Мне на самом деле вижуал больше нравится чем РАД студио, недавно 2010 поставил, прикольный, хорошо сделали... .
Hix, Каждый инструмент хорош, у каждого свои преимущества и недостатки, поэтому там где удобней? там и прогается неплохо =)
Offline


