Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: DirectX: пересекающиеся полупрозрачные поверхности - че-то не то...  (Прочитано 25669 раз)
0 Пользователей и 1 Гость смотрят эту тему.
jur
Помогающий

lt
Offline Offline

« : 09-09-2008 20:00 » 

Привет!

Не пойму я... Наверное это давно известная фича, но я о ней не знаю, поэтому искренне прошу меня простить за избитую тему.

Проблема вот в чем. Один полупрозрачный прямоугольник пересекает другой. Сквозь первый видно второй прямоугольник только частично. Вот пояснительный скриншот:



Первым рендерится зеленый прямоугольник, вторым красный. Верхний левый угол обеих прямоугольников отмечен белым квадратиком. Зеленый прямоугольник повернут набок и немножко повернут по оси Y. При этом видно, что сквозь него просматривается красный прямоугольник (в его передней части, которая повернулась к наблюдателю). Однако, вторая половина зеленого прямоугольника, которая удалилась от наблюдателя, полностью затеняет красный прямоугольник. А ведь она должна быть видна сквозь красный прямоугольник.

Подскажите, пожалуйста, в чем тут загвоздка? Наверняка что-то давно известное, но, прошу меня простить, я в этом деле еще "плаваю".
Записан

MPEG-4 - в массы!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 10-09-2008 03:37 » 

jur, может альфа-канал отсутствует? Не знаю, как еще объяснить нежелание смешиваться с уже отрендеренным. Ну, еще формула смешивания может быть неправильная.

Я не спец в 3D, но мне кажется, что полупрозрачные объекты как-то иначе надо строить.  А черт его знает...
« Последнее редактирование: 10-09-2008 03:42 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
jur
Помогающий

lt
Offline Offline

« Ответ #2 : 10-09-2008 08:36 » 

jur, может альфа-канал отсутствует? Не знаю, как еще объяснить нежелание смешиваться с уже отрендеренным.

Альфа-канал не может отсутствовать, т.к. половина зеленого прямоугольника (та, что повернута к нам) полупрозрачность показывает.

Ну, еще формула смешивания может быть неправильная.

Черт его знает... Вроде стандартно все:

Код:
  SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
  SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
  SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

Но что-то темное и непонятное в этой формуле есть... Как я сказал, первым рендерится зеленый прямоугольник. Т.е. по идее он еще не видит красного прямоугольника. Затем рендерится красный. И вот тут засада: ведь красный-то уже видит зеленого. Значит он может учитывать смешивание цветов пикселей. Верхняя половина зеленого прямоугольника вроде правильно смешивается с красным, а вот с нижней половиной что-то не того...

Я не спец в 3D, но мне кажется, что полупрозрачные объекты как-то иначе надо строить.

Наверное иначе, но как иначе - ума не приложу... Ведь просто все, как дверь: одно полупрозрачное стекло; другое такое же стекло; они пересекаются друг с другом и все.

(Через несколько минут) Провел еще один опыт. Нарисовал на зеленом прямоугольнике два белых непрозрачных квадратика. Вот так выглядит экран после поворота зеленого прямоугольника только набок:



По нему рисуется красный прямоугольник, сквозь который видно зеленый.

Но вот я поворачиваю зеленый прямоугольник по оси Y и перестаю что-либо понимать... Как такое может быть:



Получается, что повернутая к нам половина зеленого прямоугольника почему-то вся полупрозрачная, причем вместе с совершенно непрозрачным белым квадратиком (скорее всего тут дело в том, что поверху рисуется красный прямоугольник, который весь полупрозрачный). А отдаленная от нас половина зеленого прямоугольника неизвестно почему полностью закрывает красный прямоугольник, который находится впереди этой половины!

Как это понять и каким образом побороть?
Записан

MPEG-4 - в массы!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 10-09-2008 08:41 » 

а ты уверен, что это удалённая сторона, а не приближенная ? ) Выведи ка координаты прямоуга на экран в реалтайме

или одна из осей перевёрнута
Записан

jur
Помогающий

lt
Offline Offline

« Ответ #4 : 10-09-2008 09:02 » 

а ты уверен, что это удалённая сторона, а не приближенная ? )

Хм... Черт его разберет... Я так понимаю, что сторона, которая ближе к нам, шире (длиннее), чем та, которая дальше.

Выведи ка координаты прямоуга на экран в реалтайме

Я этого не умею... Я ведь рисую прямоугольник в точке "0" (т.е. x = -30 и 30, y = 256 и -256, а z = 0), а потом поворачиваю его по оси Z (это когда набок) и по оси Y, чтобы повернуть его длинные стороны к нам/от нас.

или одна из осей перевёрнута

Вроде нет... Вот так я вычисляю мировую матрицу:

Код:
void CPaneB::calc_matrices_world()
{
  D3DXMATRIX mW;  // World matrix
  D3DXMATRIX mR;  // Rotation matrix

  // Create a matrix to store our World transform
  ZeroMemory(&mW, sizeof(mW));
  // Use D3DX to create a World matrix
  D3DXMatrixIdentity(&mW);

  if(_rotate_x) {
    D3DXMatrixRotationX(&mR,-D3DXToRadian(_rotate_x));
    D3DXMatrixMultiply(&mW,&mW,&mR);
  }
  if(_rotate_y) {
    D3DXMatrixRotationY(&mR,-D3DXToRadian(_rotate_y));
    D3DXMatrixMultiply(&mW,&mW,&mR);
  }
  if(_rotate_z) {
    D3DXMatrixRotationZ(&mR,-D3DXToRadian(_rotate_z));
    D3DXMatrixMultiply(&mW,&mW,&mR);
  }

  // Store World matrix
  _matWorld = mW;
}

Перед рендерингом эта матрица устанавливается и все. (И еще матрицы проекции и взгляда.)
Записан

MPEG-4 - в массы!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 10-09-2008 09:16 » 

эти функции мне также ничего не говорят, я не работал с 3D , ты вот выведи куда нибудь, ну пусть не на экран, а хотя бы в текстовый файл (по кнопке) текущие координаты, а затем тупо на листке бумаги посторй в 3 проекциях - будет ли то же самое, что на экране ?
Записан

jur
Помогающий

lt
Offline Offline

« Ответ #6 : 10-09-2008 09:46 » 

эти функции мне также ничего не говорят, я не работал с 3D , ты вот выведи куда нибудь, ну пусть не на экран, а хотя бы в текстовый файл (по кнопке) текущие координаты, а затем тупо на листке бумаги посторй в 3 проекциях - будет ли то же самое, что на экране ?

Так я-ж этого не умею... И сомневаюсь, что такое вообще возможно (без каких-то глубинных ухищрений). Ведь дело в том, что координаты прямоугольников вообще не меняются. Они всегда остаются такими:

Код:
верхний левый угол:  x = -64, y =  256, z = 0
нижний левый угол:   x = -64, y = -256, z = 0
верхний правый угол: x =  64, y =  256, z = 0
нижний правый угол:  x =  64, y = -256, z = 0

А поворачивается только мировая матрица: сначала только по оси Z, а потом еще и по оси Y. Т.е. при рендеринге я выставляю три матрицы первого прямоугольника (зеленого), рисую первый прямоугольник. Затем выставляю матрицы второго прямоугольника (красного) и рисую второй прямоугольник (его матрицы никаких поворотов не содержат).

И получается... Черт знает что...
Записан

MPEG-4 - в массы!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 10-09-2008 15:23 » 

Код:
  SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
  SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
  SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

Я о том же: зеленый у тебя смешался с серым фоном, а красный - с тем, что было отрендерено в буфере - с фоном и зеленым прямоугольником. Альфа-канал буфера рендеренга не используется.

jur, идея такая: разбить исходные полигоны на куски, чтобы обеспечить правильный порядок для накладывающихся участков - отрендерить их в порядке приближения к зрителю.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
jur
Помогающий

lt
Offline Offline

« Ответ #8 : 10-09-2008 17:48 » 

jur, идея такая: разбить исходные полигоны на куски, чтобы обеспечить правильный порядок для накладывающихся участков - отрендерить их в порядке приближения к зрителю.

Хм... Хреново, если так... Я-то ведь не знаю, как разбивать на многоугольники. Это же весьма нетривиальная задача: найти линию пересечения и по ней поделить соответствующие поверхности... Я наивно полагал, что эту черную работу можно возложить на исполнительного негра DirectX-а :-)

И вообще, у меня начинает складываться впечатление, что уж (или угорь - тоже достаточно скользкое животное :-), против моего понимания матриц DirectX-а, - это натертый канифолью сухой рашпиль :-) Скользкость сущности матриц DirectX-а выше всех моих мыслимых пределов... И, что самое противное, необильная литература на эту тему только запутывает. Чувствую, что проблема лежит где-то в районе правильного выбора матриц, а понять это дело - не получается. Казалось бы, матрица взгляда. Вроде все несложно. Однако, эти ее "FLOAT zn, FLOAT zf" столько туману нагнетают! Сделаешь zn = 1.0 и вообще ничего не увидишь, хотя при вращении объекта по оси X его части гарантированно попадают в зрительский фрустум...

Друзья, помогите для начала понять хотя бы эти проклятые матрицы проекции и взгляда! Может в этой плоскости лежат мои проблемы? (А может и нет...)
Записан

MPEG-4 - в массы!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 10-09-2008 20:38 » 

jur, не знаю как проще. Думаю, что если ты этим не на неделю увлекся, то надо подковаться в теории перед продолжением.

Матрицы преобразования - это очень просто. Обычная математика. Завтра опишу преобразования.

Для затравки - назначение элементов матрицы 4х4:

Код:
r11	r12	r13	p1
r21 r22 r23 p2
r31 r32 r33 p3
t1 t2 t3 z1

r - scalling and rotation
p - perspective
t - translation
z - zoom
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 11-09-2008 03:58 » 

Действия с матрицей:
Вращение вокруг X:

1   0   0   0
0   cx   sx   0
0   -sx   cx   0
0   0   0   1


Вращение вокруг Y:

cy   0   -sy   0
0   1   0   0
sy   0   cy   0
0   0   0   1


Вращение вокруг Z:

cz   sz   0   0
-sz   cz   0   0
0   0   1   0
0   0   0   1


Перемещение:

1   0   0   0
0   1   0   0
0   0   1   0
Δx   Δy   Δz   1


Масштабирование:

sx   0   0   0
0   sy   0   0
0   0   sz   0
0   0   0   sxyz


Перспектива:

1   0   0   px
0   1   0   py
0   0   1   pz
0   0   0   1

cn - cos угла поворота
sn - sin угла поворота
sn - масштаб
Δn - смещение объекта
pn - точка "исчезновния" в перспективе

Матрица "ничего не делать" выглядит так:
1   0   0   0
0   1   0   0
0   0   1   0
0   0   0   1


Перемножением матриц можно получить результирующую матрицу преобразования.
Поиск: действия с матрицами.

С перспективой я не совсем понял, т.к. для реалистичности нужно две точки. Видимо нужно перемножить две матрицы с перспективой.
« Последнее редактирование: 11-09-2008 04:05 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 11-09-2008 04:08 » 

http://mm312.hostel6.ru/matrix/

Интересная страница. там можно онлайн работать с матрицами 3х3.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 11-09-2008 05:43 » 

С перспективой объяснили, что точка одна - это точка на линии взгляда. Если считать, что находится в начале координат и не использовать общее масштабирование, то матрица упрощается до:
Код:
r11	r12	r13	0
r21 r22 r23 0
r31 r32 r33 0
t1 t2 t3 1
« Последнее редактирование: 11-09-2008 05:46 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
jur
Помогающий

lt
Offline Offline

« Ответ #13 : 11-09-2008 13:39 » 

RXL, большое спасибо за полезную информацию! Попытаюсь разобраться в этом вопросе. Правда, мне арифметика с математикой никогда не давались...

Однако, этот движок - DirectX - та еще хреновина... Заметил, что при вращении прямоугольника вокруг оси Y при углах 180 и 210 (?) он совсем исчезает с экрана! Вообще ничего не видно, пустой экран. Подобный эффект есть и при вращении вокруг оси X. Только вращение вокруг оси Z ничего такого не дает. Как сие понимать?... Смотрел при этих углах мировую матрицу - все, вроде, нормально. Т.е. значения чисел в матрице меняются вполне похоже при углах 209, 210 и 211 градусов, каких-то резких выбросов не видно. А прямоугольник пропадает, черт бы его задрал... Мириться с этим, конечно, можно, т.к. пропадание прямоугольника происходит при его повороте "к лесу передом, а ко мне задом" :-) Но хотелось бы разобраться, а то некузяво как-то получается...

P.S. (Чуток попозже) Ндааа... При расчете матрицы перспективы изменил параметр zn с 0 на -1 и пропадание прямоугольника прекратилось.

Заменил вызов:

  D3DXMatrixPerspectiveFovLH( &mP, angle, 1.0f, 0.0f, 1000.0f );

на:

  D3DXMatrixPerspectiveFovLH( &mP, angle, 1.0f, -1.0f, 1000.0f );

Темный лес...

P.P.S. (Еще попозже) Установление параметра zn на -1 вызывает другую проблему: вывод нескольких прямоугольников друг за другом происходит совершенно неправильно. Дальние прямоугольники рисуются спереди, но уменьшенного размера (как будто они удаляются). Хотя рисоваться они должны ЗА первым. (В рендере именно так и делается: рисуется ряд прямоугольников начиная с самого дальнего.) Установка zn = 0 решает эту проблему. Но зато вылезает проблема исчезновения... Мрак... Пока решил вопрос заданием координаты z равной 1 (и более для повторяющихся прямоугольников). Но наличествует полнейшее непонимание мною этих проклятых перспектив...
« Последнее редактирование: 11-09-2008 15:04 от jur » Записан

MPEG-4 - в массы!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 11-09-2008 16:40 » 

jur, для меня 3D тоже темный лес. Одно дело математика, а другое дело - DX. Кстати, DX - не движок, это - API.

Попробуй перспективу в плюс.

Теорию надо читать - методом тыка не разберешься.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
jur
Помогающий

lt
Offline Offline

« Ответ #15 : 11-09-2008 17:36 » 

RXL, большое тебе спасибо за поддержку! Тяжело в этом деле разбираться...

Кстати, DX - не движок, это - API.

Да один хрен :-) Наверное я неверно высказался, но подумал, раз комплект DLL-ок выполняет эти функции, то, стало быть, движок :-)

Попробуй перспективу в плюс.

Я по-разному пробовал... Результат получается в полном соответствии с броуновским движением... :-) Т.е. непредсказуем...

Теорию надо читать - методом тыка не разберешься.

Дык... Написано везде как-то непонятно... Я несколько книг прочитал, DXDDK доку смотрел - все едино. Непонятно и все тут. Похоже на то, что моя тупизна уперлась в какую-то непонятную фичу и не пускает меня дальше в направлении прояснения понимания...

Я отринул все, что наработал и начал с чистого листа. То бишь, взял пример из DXDDK (A Texture Mapping Tutorial Using DirectX 9) и изменил его чтобы показывать два прямоугольника, следующих друг за другом (по оси Z). Получилось нормально. Вот скриншот:



Но в этом примере координаты x, y находятся в области -1.0 1.0. В моем же случае координаты для удобства представлены в размере квадратного окна 512 х 512 пикселей, т.е. y находится в области 256.0 -256.0, а x в области -256.0 256.0. Когда я устанавливаю этот диапазон значений, начинаются проблемы. Может мне в своей рабочей программе наплевать на удобство и тоже перейти к диапазону -1.0 1.0? Хотя я и не понимаю, почему здесь возникает затор...
Записан

MPEG-4 - в массы!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 11-09-2008 17:45 » 

jur, отодвинь точку перспективы дальше - назначь большое значение Z.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
jur
Помогающий

lt
Offline Offline

« Ответ #17 : 11-09-2008 18:46 » 

Я по-разному пробовал... Черт знает что получается.

Однако, обнаружил вот такой эффект. Задаю я настоящие размеры картинки в пикселях:

#define SIZE_X    (398.0f)
#define SIZE_Y    (445.0f)

получаю неправильную картинку при ее вращении:



Тогда просто тупо уменьшаю размеры в 10 раз:

#define SIZE_X    (39.80f)
#define SIZE_Y    (44.50f)

картинка становится правильной:



Что за ... фигня?! Это в чем-то переполнение происходит, али где?!

"Вот что недурно было бы разъяснить!" (С) Степа Лиходеев

:-)

Расчет матриц я чуток изменил для возможности играться с различными значениями размеров картинки, но полагаю, что эти изменения рояли не играют.

Код:
FLOAT angle_Y = 0;

VOID SetupMatrices()
{
    // Set up world matrix
    D3DXMATRIXA16 matWorld;
    D3DXMatrixIdentity( &matWorld );
    angle_Y += 1;  // Поворачиваем картинку на 1 градус
    if(angle_Y >= 360) angle_Y = 0;
    D3DXMatrixRotationY( &matWorld, D3DXToRadian(angle_Y) );
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

    // For the projection matrix ... и т.д.
    FLOAT angle = D3DX_PI / 16;
    D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, angle, SIZE_Y/SIZE_X, 1.0f, 50000.0f );
    g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

    // Set up our view matrix ...
    FLOAT dist = FLOAT((SIZE_Y/2.0) / tan(angle/2.0)) * 3.0f;

    D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-dist );
    D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
    D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );

    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
    g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
}

P.S. И еще непонятно. Координата Z переднего прямоугольника равна 0.0f, но тем не менее он виден! Несмотря на функцию:

D3DXMatrixPerspectiveFovLH( &matProj, angle, SIZE_Y/SIZE_X, 1.0f, 50000.0f );

где минимальная координата Z равна 1.0f. А этот момент как понимать?!

(Координата Z второго прямоугольника равна SIZE_Y * 0.4f.)
« Последнее редактирование: 11-09-2008 18:56 от jur » Записан

MPEG-4 - в массы!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 12-09-2008 05:37 » 

jur, смотри метод наложения текстуры - попробуй растянуть ее по размеру полигона.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
jur
Помогающий

lt
Offline Offline

« Ответ #19 : 12-09-2008 06:19 » 

Текстура целиком и полностью наложена на прямоугольники. Вот вершины:

Код:
    // Передний прямоугольник
    pVertices[0].position = D3DXVECTOR3( -SIZE_X,  SIZE_Y, 0.0f );
    pVertices[0].color = 0xffffffff;
    pVertices[0].tu = 0.0f;
    pVertices[0].tv = 0.0f;

    pVertices[1].position = D3DXVECTOR3( -SIZE_X, -SIZE_Y, 0.0f );
    pVertices[1].color = 0xff808080;
    pVertices[1].tu = 0.0f;
    pVertices[1].tv = 1.0f;

    pVertices[2].position = D3DXVECTOR3(  SIZE_X,  SIZE_Y, 0.0f );
    pVertices[2].color = 0xffffffff;
    pVertices[2].tu = 1.0f;
    pVertices[2].tv = 0.0f;

    pVertices[3].position = D3DXVECTOR3(  SIZE_X, -SIZE_Y, 0.0f );
    pVertices[3].color = 0xff808080;
    pVertices[3].tu = 1.0f;
    pVertices[3].tv = 1.0f;

    // Задний прямоугольник
    pVertices[4].position = D3DXVECTOR3( -SIZE_X,  SIZE_Y, SIZE_Y * 0.40f );
    pVertices[4].color = 0xffffffff;
    pVertices[4].tu = 0.0f;
    pVertices[4].tv = 0.0f;

    pVertices[5].position = D3DXVECTOR3( -SIZE_X, -SIZE_Y, SIZE_Y * 0.40f );
    pVertices[5].color = 0xff808080;
    pVertices[5].tu = 0.0f;
    pVertices[5].tv = 1.0f;

    pVertices[6].position = D3DXVECTOR3(  SIZE_X,  SIZE_Y, SIZE_Y * 0.40f );
    pVertices[6].color = 0xffffffff;
    pVertices[6].tu = 1.0f;
    pVertices[6].tv = 0.0f;

    pVertices[7].position = D3DXVECTOR3(  SIZE_X, -SIZE_Y, SIZE_Y * 0.40f );
    pVertices[7].color = 0xff808080;
    pVertices[7].tu = 1.0f;
    pVertices[7].tv = 1.0f;

Причем, дефект-то проявляется из-за размерности SIZE_X и SIZE_Y. При этом сами картинки нормальные, показываются целиком.

Непонятно это все... (Если интересно, я этот пример привожу в ZIP-архиве.)

* Textures2.zip (294.91 Кб - загружено 1098 раз.)
Записан

MPEG-4 - в массы!
jur
Помогающий

lt
Offline Offline

« Ответ #20 : 18-09-2008 17:39 » 

Поработал, поэкспериментировал... Получил один маленький положительный результат: теперь мне ясно, что совершенно ничего не ясно. Все лучше, чем мрак... Прошу меня извинить, но начинаю новую тему. Вопрос простой. Однако ответа на этот вопрос вообще нигде не нашел. Вопрос про матрицы проекции и вида.
Записан

MPEG-4 - в массы!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines