Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Конус отсечения

23.06.2012, 07:19. Показов 1788. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Стандартных объёмов отсечения два: пирамида и параллелипипед. Но иногда нужен конус. Оптика с круглым полем зрения (оптический прицел, подзорная труба), или, как у меня, помимо основного окна ещё второе в углу с видом сверху и ограничением согласно дизайну видимости в этом окне предельным расстоянием от центра, но без "тумана войны". На основном виде можно ограничить дальность без помощи "тумана войны", согнув поверхность в сферу, или в геоид. Но вид сверху, как ни настраивай углы и высоту, получается квадратным вместо круглого, по диагонали окна угол отсечения оказывается в https://www.cyberforum.ru/cgi-bin/latex.cgi?\sqrt{2} больше, чем вдоль осей. А можно как то отсечь по конусу? Пусть рендеринг работает в пирамидальном отсечении. А отфильтровать результат каким нибудь шейдером и перекрасить пикселы за границей окружности в чёрный цвет можно? Вычислить для каждого пиксела расстояние от центра окна по евклидовой норме https://www.cyberforum.ru/cgi-bin/latex.cgi?d=\sqrt{\left(x-w/2\right)^2+\left(y-w/2\right)^2}, сравнить с https://www.cyberforum.ru/cgi-bin/latex.cgi?w/2, если больше, то перекрасить. Как может выглядеть исходник такого шейдера? Где вообще искать по нему инфу?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2012, 07:19
Ответы с готовыми решениями:

Плоскость отсечения
Здравствуйте, у меня вопрос: Функция glClipPlane(GL_CLIP_PLANE0, Clip_eq); Что означают элементы массива Clip_eq? Параметры плоскости в...

Плоскость отсечения и каркас объекта
имеется часть сферы полученная при помощи плоскости отсечения и присоединяемый к ней усеченный конус. линия присоединения имеет порожек так...

Что такое область отсечения?
Здравствуйте, начал изучать OpenGL. Столкнулся с проблемой, я не понимаю, что такое область отсечения, не понимаю как работает функция...

9
Модератор
 Аватар для vxg
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,463
26.06.2012, 11:21
а что если над картой разместить сферу таким образом что бы она вырезала на ней круг нужного размера - этот круг будет внутри сферы. сфера черная. все что внутри (в том числе и круг) будут рендерится. все что вышло за сферу - нет
0
 Аватар для snake32
3519 / 1702 / 236
Регистрация: 26.02.2009
Сообщений: 8,562
Записей в блоге: 6
26.06.2012, 13:48
Если правильно понял, то:
А что если рендерить в усечённую пирамиду как обычно, а после на весь экран наложить чёрный прямоугольник с прозрачной окружностью по центру? Можно обойтись четырьмя вершинами и одной текстурой с альфа каналом + вся остальная сцена.
Цитата Сообщение от taras atavin Посмотреть сообщение
На основном виде можно ограничить дальность без помощи "тумана войны", согнув поверхность в сферу, или в геоид.
Это ж какая оптика должна быть чтобы практически с поверхности океана увидеть кривизну Земли? Не выдумывайте!
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.06.2012, 14:53  [ТС]
С синтаксисом уже разобрался, а параметры переврал так, что вместо изображения в неподвижном круге движется весь круг вместе с изображением.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void                          RenderMap                 (                                   )
{
 GLUquadricObj *Quad;
 wglMakeCurrent(WindowMap.WindowContext, WindowMap.OpenGLContext);
 Quad=gluNewQuadric();
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 glEnable(GL_STENCIL_TEST);
 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
 LookMap();
 glStencilFunc(GL_NEVER, 1, 0);
 glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
 glPushMatrix();
 glTranslated(0.0, 0.0, EarhRadius);
 gluDisk(Quad, 0.0, 5000.0, 64, 1);
 glPopMatrix();
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 glStencilFunc(GL_EQUAL, 1, 255);
 glEnable(GL_TEXTURE_2D);
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
 DrawEarthMap();
 glDisable(GL_TEXTURE_2D);
 glDisable(GL_STENCIL_TEST);
 glFlush();
 SwapBuffers (WindowMap.WindowContext);
}
void                          LookMap                   (                                   )
{
 gluLookAt(Control.Position.Top    .x, Control.Position.Top    .y, Control.Position.Top    .z,
           Control.Position.TopLook.x, Control.Position.TopLook.y, Control.Position.TopLook.z,
           Control.Position.TopUp  .x, Control.Position.TopUp  .y, Control.Position.TopUp  .z);
}
Добавлено через 32 минуты
Может так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void                          RenderMap                 (                                   )
{
 static double AngleFactor=M_PI/180.0;
 GLUquadricObj *Quad;
 wglMakeCurrent(WindowMap.WindowContext, WindowMap.OpenGLContext);
 Quad=gluNewQuadric();
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 glEnable(GL_STENCIL_TEST);
 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
 LookMap();
 glStencilFunc(GL_NEVER, 1, 0);
 glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
 glPushMatrix();
 glTranslated(Control.Position.Main.x, Control.Position.Main.y, Control.Position.Main.z);
 glRotated(Control.Position.GeoPosition.Lattitude*AngleFactor, 1.0, 0.0, 0.0);
 glRotated(Control.Position.GeoPosition.Longitude*AngleFactor, 0.0, 0.0, 1.0);
 gluDisk(Quad, 0.0, 5000.0, 64, 1);
 glPopMatrix();
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 glStencilFunc(GL_EQUAL, 1, 255);
 glEnable(GL_TEXTURE_2D);
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
 DrawEarthMap();
 glDisable(GL_TEXTURE_2D);
 glDisable(GL_STENCIL_TEST);
 glFlush();
 SwapBuffers (WindowMap.WindowContext);
}
?
0
 Аватар для snake32
3519 / 1702 / 236
Регистрация: 26.02.2009
Сообщений: 8,562
Записей в блоге: 6
26.06.2012, 15:23
Стенсил в топку
Я бы сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Render(void)
{
  Clear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  // здесь прорисовка сцены
 
  // теперь включаем режим 2d 
  glPushMatrix();// сохранили GL_MODELVIEW 3d
  glLoadIdentity();
  glMatrixMode( GL_PROJECTION );
  glPushMatrix();// сохранили GL_PROJECTION 3d
  glLoadIdentity();
  gluOrtho2D( 0, ClientWidth, ClientHeight, 0 ); // 2d now!
  glMatrixMode( GL_MODELVIEW );
  // теперь здесь можно задавать координаты как в винде ))
  
  // рисуем квадрат на весь экран с текстурой, где посередине прозрачный круг
 
  glMatrixMode( GL_PROJECTION );
  glPopMatrix();// восстановили GL_PROJECTION 3d
  glMatrixMode( GL_MODELVIEW );
  glPopMatrix();// восстановили GL_MODELVIEW 3d
   SwapBuffers (WindowMap.WindowContext);
}
Добавлено через 2 минуты
Альфа смешивание не забываем включить
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.06.2012, 15:28  [ТС]
snake32, а мне уже стенсил понравился. А вот орто здесь точно ни к селу, ни к городу, это не автокад.
0
 Аватар для snake32
3519 / 1702 / 236
Регистрация: 26.02.2009
Сообщений: 8,562
Записей в блоге: 6
26.06.2012, 16:03
taras atavin, не умничай. Я посмотрю как будешь прикручивать HUD к игре без 2d проекции.

автокад судя по одним эффектам к игре эта "игра" будет круче чем исследовательские программы NASA.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.06.2012, 16:26  [ТС]
Кто такой худ?

Добавлено через 49 секунд
Цитата Сообщение от snake32 Посмотреть сообщение
судя по одним эффектам к игре эта "игра" будет круче чем исследовательские программы NASA.
Ну как приведи хоть один пример такого суперэфекта.

Добавлено через 4 минуты
Heads-Up Display (сокр. HUD) — термин в компьютерных играх, который обозначает часть графического интерфейса пользователя, служащего для отображения важной информации непосредственно во время игрового процесса
Это что ли? Ну во-первых у меня есть и чисто двумерное окно. Во-вторых запланирован вывод текста в текстуру. То есть есть, например, корабль, этот корабль имеет имя собственное и оно пишется прямо на борту корабля. Не над кораблём в плоскости экрана, а на самом корабле. Маны не будет вообще, а индикатор прочки оформлю где ни будь тоже в 3D. И это будет вообще не текст и даже не стрелочный индикатор. В диабло индикаторы жизни и маны были прозрачными шарами, заполняемые жидкостью и роль стрелки выполнял уровень жидкости. Что такого, если их тоже сделать в 3D7 У меня вряд ли будет именно шар, но что нибудь приду4маю. Ещё нужно количество золота, серебра, чемчуга, ядер. Их, видимо, придётся текстом. Ну так это будет одна из функций бота-информатора, он будет писать в чисто плоском окне.
0
Модератор
 Аватар для vxg
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,463
26.06.2012, 17:11
эу.. так как насчет сферы которая отсечет все лишнее)?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.06.2012, 19:15  [ТС]
Почему сферы? Мне надо отсечь по конусу и пока получается. Камеры пролетели уже 35 723 метров и глюков не видно. Конус следует за верхней камерой и поворачивается, следя за местной вертикалью, а в него попадает каждый раз чуть другая часть мира и в центре её как раз нижняя камера, ка я и хотел.

Добавлено через 1 час 15 минут
камеры пролетели уже более 60-ти километров до того места, где граница модели попала в горизонт. И на всём пути не было глюков. Габариты модели увеличены, камеры полетели заново. Теперь граница доступного пространства отстоит от центра уже на 131,072 км=70 морских миль. Более градуса дуги меридиана, или экватора.

Добавлено через 23 часа 18 минут
Камеры пролетели 262 144 метров и теперь уже на сверхзвуке. Глюков не видно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.06.2012, 19:15
Помогаю со студенческими работами здесь

SDL: OpenGL: установка границ объема отсечения glOrtho(.);
Открыл окно SDL, создал контекст OpenGL. Соответственно, что бы что-либо рисовать, нужно определить границы объема отсечения. И не...

Вращающийся конус
Здравствуйте. Пытаюсь создать вращающийся конус, проштудировав форум, нашел статью как рисовать конус, но у меня он все равно выводит...

Реализовать трансформацию 4-х гранной пирамиды в конус
Возможно ли это реализовать в Open GL ? Если есть у кого-нибудь хоть какой-то пример трансформации. С Open GL столкнулся только вчера, а...

Работа с трехмерными примитивами. Вокруг конуса GLU вращаются сфера GLUT и конус GLUT
создание виртуальной камеры gluLookAt и добавление эффектов анимации. вот само задание Вокруг конуса GLU вращаются сфера GLUT и конус...

применение отсечения !
Игрок относятся к одой из 3 лиг, и может пригласить на игру либо игрока со своей лиги, либо игрока с лиги ниже (если такая есть)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru