Сообщения на форуме пользователя Andrey (249 стр.)
Отсечение по пирамиде видимости | 1 окт. 2004 | 13:50 | #6 |
---|
>ведь треугольник будет виден даже если одна точка в фрастуме
только что догадался так сделать :). Но вот при повороте что-то отсекает то что не должно отсекать.
В чем может быть дело?
Отсечение по пирамиде видимости | 1 окт. 2004 | 13:20 | #2 |
---|
Скажите в чем может быть дело?Или я не правильно провожу проверку нахождения треугольника в пирамиде видимости?
Заранее спасибо всем.
С уважением Андрей.
Правка: 1 окт. 2004 14:06
Отсечение по пирамиде видимости | 1 окт. 2004 | 13:19 | #1 |
---|
//Функция расчета пирамиды inline void Frustum::ExtractFrustum() { float proj[16];//Матрица проекций float modl[16];//видовая матрица float clip[16]; float t; //Узнаем текущую матрицу PROJECTION glGetFloatv(GL_PROJECTION_MATRIX, proj); //Узнаем текущую матрицу MODELVIEW glGetFloatv(GL_MODELVIEW_MATRIX, modl); //Комбинируем матрицы(перемножаем) clip[0] = modl[0] * proj[0] + modl[1] * proj[4] + modl[2] * proj[8] + modl[3] * proj[12]; clip[1] = modl[0] * proj[1] + modl[1] * proj[5] + modl[2] * proj[9] + modl[3] * proj[13]; clip[2] = modl[0] * proj[2] + modl[1] * proj[6] + modl[2] * proj[10] + modl[3] * proj[14]; clip[3] = modl[0] * proj[3] + modl[1] * proj[7] + modl[2] * proj[11] + modl[3] * proj[15]; clip[4] = modl[4] * proj[0] + modl[5] * proj[4] + modl[6] * proj[8] + modl[7] * proj[12]; clip[5] = modl[4] * proj[1] + modl[5] * proj[5] + modl[6] * proj[9] + modl[7] * proj[13]; clip[6] = modl[4] * proj[2] + modl[5] * proj[6] + modl[6] * proj[10] + modl[7] * proj[14]; clip[7] = modl[4] * proj[3] + modl[5] * proj[7] + modl[6] * proj[11] + modl[7] * proj[15]; clip[8] = modl[8] * proj[0] + modl[9] * proj[4] + modl[10] * proj[8] + modl[11] * proj[12]; clip[9] = modl[8] * proj[1] + modl[9] * proj[5] + modl[10] * proj[9] + modl[11] * proj[13]; clip[10] = modl[8] * proj[2] + modl[9] * proj[6] + modl[10] * proj[10] + modl[11] * proj[14]; clip[11] = modl[8] * proj[3] + modl[9] * proj[7] + modl[10] * proj[11] + modl[11] * proj[15]; clip[12] = modl[12] * proj[0] + modl[13] * proj[4] + modl[14] * proj[8] + modl[15] * proj[12]; clip[13] = modl[12] * proj[1] + modl[13] * proj[5] + modl[14] * proj[9] + modl[15] * proj[13]; clip[14] = modl[12] * proj[2] + modl[13] * proj[6] + modl[14] * proj[10] + modl[15] * proj[14]; clip[15] = modl[12] * proj[3] + modl[13] * proj[7] + modl[14] * proj[11] + modl[15] * proj[15]; //Находим A, B, C, D для ПРАВОЙ плоскости frustum[0][0] = clip[3] - clip[0]; frustum[0][1] = clip[7] - clip[4]; frustum[0][2] = clip[11] - clip[8]; frustum[0][3] = clip[15] - clip[12]; //Приводим уравнение плоскости к нормальному виду t = float(sqrt(frustum[0][0] * frustum[0][0] + frustum[0][1] * frustum[0][1] + frustum[0][2] * frustum[0][2])); frustum[0][0] /= t; frustum[0][1] /= t; frustum[0][2] /= t; frustum[0][3] /= t; //Находим A, B, C, D для ЛЕВОЙ плоскости frustum[1][0] = clip[3] + clip[0]; frustum[1][1] = clip[7] + clip[4]; frustum[1][2] = clip[11] + clip[8]; frustum[1][3] = clip[15] + clip[12]; //Приводим уравнение плоскости к нормальному виду t = float(sqrt(frustum[1][0] * frustum[1][0] + frustum[1][1] * frustum[1][1] + frustum[1][2] * frustum[1][2])); frustum[1][0] /= t; frustum[1][1] /= t; frustum[1][2] /= t; frustum[1][3] /= t; //Находим A, B, C, D для НИЖНЕЙ плоскости frustum[2][0] = clip[3] + clip[1]; frustum[2][1] = clip[7] + clip[5]; frustum[2][2] = clip[11] + clip[9]; frustum[2][3] = clip[15] + clip[13]; //Приводим уравнение плоскости к нормальному t = float(sqrt(frustum[2][0] * frustum[2][0] + frustum[2][1] * frustum[2][1] + frustum[2][2] * frustum[2][2])); frustum[2][0] /= t; frustum[2][1] /= t; frustum[2][2] /= t; frustum[2][3] /= t; //ВЕРХНЯЯ плоскость frustum[3][0] = clip[3] - clip[1]; frustum[3][1] = clip[7] - clip[5]; frustum[3][2] = clip[11] - clip[9]; frustum[3][3] = clip[15] - clip[13]; //Нормальный вид t = float(sqrt(frustum[3][0] * frustum[3][0] + frustum[3][1] * frustum[3][1] + frustum[3][2] * frustum[3][2])); frustum[3][0] /= t; frustum[3][1] /= t; frustum[3][2] /= t; frustum[3][3] /= t; //ЗАДНЯЯ плоскость frustum[4][0] = clip[3] - clip[2]; frustum[4][1] = clip[7] - clip[6]; frustum[4][2] = clip[11] - clip[10]; frustum[4][3] = clip[15] - clip[14]; //Нормальный вид t = float(sqrt(frustum[4][0] * frustum[4][0] + frustum[4][1] * frustum[4][1] + frustum[4][2] * frustum[4][2])); frustum[4][0] /= t; frustum[4][1] /= t; frustum[4][2] /= t; frustum[4][3] /= t; //ПЕРЕДНЯЯ плоскость frustum[5][0] = clip[3] + clip[2]; frustum[5][1] = clip[7] + clip[6]; frustum[5][2] = clip[11] + clip[10]; frustum[5][3] = clip[15] + clip[14]; //Нормальный вид t = float(sqrt(frustum[5][0] * frustum[5][0] + frustum[5][1] * frustum[5][1] + frustum[5][2] * frustum[5][2])); frustum[5][0] /= t; frustum[5][1] /= t; frustum[5][2] /= t; frustum[5][3] /= t; } |
Правка: 1 окт. 2004 14:05
Отсечение по пирамиде видимости | 1 окт. 2004 | 13:18 | #0 |
---|
вот почитал урок от NeHe:http://pmg.org.ru/russian/nehe/nehex2.htm
пробую применить проверку нахождения треугольника в пирамиде видимости.
Вот код:
Кто в какой среде разработки пишет и под какой ОС? | 30 сен. 2004 | 10:17 | #36 |
---|
Windows XP
GUNgine | 27 сен. 2004 | 9:43 | #555 |
---|
Просто Майк сказал дальше все коммерческое и выкладывать не будет исходники
OpenGL в Visual C++ | 24 сен. 2004 | 19:51 | #8 |
---|
>и еще может строки
>auxSwapBuffers();
> glFlush();
>надо местами поменять - так вроде правильнее будет
Все правильно.
vixen
>А что значит без Winapi никак:( ?
MFC - не для 3D программирования в какой игре(типа Quake или Doom) ты видел что-бы были окна как у блокнота?
программируй сразу в Win32.
Правка: 24 сен. 2004 19:54
C VS C++ Что лучше для игровых проектов | 22 сен. 2004 | 15:23 | #2 |
---|
Я думаю С++ - язык с богатыми возможностями (при условии прямых рук программиста :) )
Зацените мой сайт и Новый MEAT WAR!!! - супер!!! | 22 сен. 2004 | 10:50 | #6 |
---|
ссылки не все работают
Раздел ОБУЧЕНИЕ проекта Almighty. | 22 сен. 2004 | 8:53 | #56 |
---|
Fly
Привет всем прочитал я урок 1.У меня предложение я пробую писать свой движок.Писал его 3 месяца.Там есть уже основные классы в том числе матрицы, кватернионы, вектора.Код хорошо комментируется.Сложился определенный стиль программирования.Может его скинуть вам?Вы посмотрите оцените что можно исправить,добавить задачи первого урока там в общем решены, как вы на это смотрите?
Правка: 22 сен. 2004 9:32
забыл сказать - Я ЖЕНЮСЬ | 21 сен. 2004 | 15:10 | #65 |
---|
:))
Вопрос по Perl + Microsoft SQL Server 2000 | 21 сен. 2004 | 14:38 | #1 |
---|
Вопрос по Perl + Microsoft SQL Server 2000 | 21 сен. 2004 | 13:35 | #0 |
---|
В общем так есть сайт организации.В сайте есть прайс лист с ценами на услуги. Прайс лист
иногда обновляется.Один раз в сутки запускается скрипт написанный на Perl'е.Задача скрипта получить данные с Microsoft SQL Server 2000 для прайс листа.Обновленный прайс лист формируется ввиде html страницы которую потом можно просматривать из сайта организации.С формировании страницы я разобрался.
Кто нибудь знает как получить данные c Microsoft SQL Server 2000 с помощью Perl? может есть какие-то модули под Windows?
Спасибо всем заранее.
С уважением Андрей.
Правка: 21 сен. 2004 13:35
Проблема со столкновениями | 20 сен. 2004 | 15:28 | #29 |
---|