forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Как "спроецировать" картинку на плоскость? (http://forum.boolean.name/showthread.php?t=3533)

ABTOMAT 04.06.2007 21:17

Как "спроецировать" картинку на плоскость?
 
Доброго вам времени суток, вот опять я задаю ещё один вопрос. :mda:

В-общем, у меня есть плоскость и картинка. Я хочу, чтобы картинка "проецировалась" на эту плоскость так, как будто плоскость - это эдакое "окошко", через которое видно кусочек картинки. На рисунке я даже чуть поменял прозрачность шоп было понятно. Так же обозначил индексы точек. Подскажите, какая должна быть текс. развёртка в таком случае у плоскости, а ещё лучше скажите принцип по которому расставлять точки по текс. координатам. Сам уже неделю с этой проблемой м#%охаюсь, наконец решил спросить на форуме - по тому принципу, по которому я делаю вылазит только набор глюков....
Рисунок - вот:



Я думаю, что Текстурные координаты должны располагаться так же, как и по экрану, отсюда способ решения проблемы: мы находим координаты точки на экране при помощи CameraProject, потом полученное делим на ширину и высоту экрана (картинка как бы на весь экран), получая при этом U и V координаты точки, а затем тут же их и применяем. Но всё равно ничего не получается. Вот функция:

[blitz]Function Project(cam,ploskost)

For i=0 To CountVertices(GetSurface (ploskost,1)) - 1

CameraProject cam, VertexX(GetSurface(ploskost,1),i) ,VertexY(GetSurface(ploskost,1),i) ,VertexZ(GetSurface(ploskost,1),i) ; проецируем координаты точки на экран
VertexTexCoords GetSurface(ploskost,1),i, ProjectedX()/GraphicsWidth(), ProjectedY()/GraphicsHeight() ; назначаем нужные текстурные координаты.

Next

End Function[/blitz]

Если кому интересно, то вот работающий исходнег сего, там всё прокомментировано.

Вопрос: это принцип неверный или я неправильно написал функцию? :dontknow:

ABTOMAT 05.06.2007 14:32

Может, я непонятно объяснил?
 
Вот ещё для облегчения понимания что мне надо, пример, намалёванный мной в 3Д Студио Макс 8.0. Всё внимание на вид Front. Назначьте плоскости какую-нить картинку, неважно какую, (для тех, кто не разбирается в Максе - просто перетащите картинку из "проводника" на объект в Максе), а потом эту же картинку назначьте в фон окна проекции Фронт (Alt+B, затем жмём кнопку Files и выбираем нашу картинку) - и вы поймёте, о чём я тут говорил. В Блице делаю по тому же принципу, но ничего не выходит :''(( Может, это связано с какими-то особенностями Блитза?

ABTOMAT 05.06.2007 19:51

Разобрался
 
Всё, уже не надо, разобрался, работает ;)

alcoSHoLiK 05.06.2007 21:09

Re: Как "спроецировать" картинку на плоскость?
 
Поделись с остальными решением.

ABTOMAT 06.06.2007 21:54

Re: Как "спроецировать" картинку на плоскость?
 
Не знаю, чем это вызвано, но проблема решилася разбиением плоскости на сегментики (типы как в клеточку). Глюки эти остались, но размер и заметность их намного уменьшилась. Кстати, у меня получилось то, для чего я эту проекцию делал (рябь на воде ещё усилил путём прибавления к U и V координатам рандомного числа):



Гы, всего 2 рендера за цикл (против старых 8-ми с хреновой кубомапой) :glag:

З.Ы. Интересно было бы всё-таки разобраться, чем вызваны искажения, ведь все вертексы попадают именно на то место текстуры, куда им и положено (проверял 100 раз), на этом и основано то, что при разбиении на сегменты глюки уменьшаются. Возможно, это особенности Блитза? :dontknow: Может, Diplomat или jimon что-то сажут?

ЛысыЙ_Чук-Иванчук 06.06.2007 23:19

Re: Как "спроецировать" картинку на плоскость?
 
Цитата:

Гы, всего 2 рендера за цикл (против старых 8-ми с хреновой кубомапой) :glag:
Для воды я бы сделал не чаще чем 1 раз в секунду, ато и менше!

HolyDel 06.06.2007 23:22

Re: Как "спроецировать" картинку на плоскость?
 
Я чо то скажу ;)
Я: CameraProjMode cam,2

ABTOMAT 07.06.2007 00:03

Re: Как "спроецировать" картинку на плоскость?
 
HolyDel, при чём тут изометрия?
в строчке

CameraProjMode cam,2

cam - это камера рендера воды, как я понял?

vlad, фигзнат, у меня вроде производительность норм.

HolyDel 07.06.2007 01:07

Re: Как "спроецировать" картинку на плоскость?
 
при том что именно изометрия вызывает то что можно наблюдать в примере кода из первого поста, и это (глюком назвать не могу) уменьшается при разбиении плоскости.
т.е. та часть тексы что ближе к нам становится больше (при изометрическом рендеринге, а не ортографическом) и поетому получается несостыковка (ето особенно заметрно на прилегающих гранях полигона).
добавь ету строчку в свой пример из первого поста ("глюков" конечно будет еще больше, но смысл станет ясен).

ЛысыЙ_Чук-Иванчук 07.06.2007 22:05

Re: Как "спроецировать" картинку на плоскость?
 
Цитата:

vlad, фигзнат, у меня вроде производительность норм.
Это потому что у тебя на экране ничего нет!!!
Самолет и дерево- пройдут резко, ты даже и незаметиш... а когда будет дохрена моделей что единственый рендер трещит по швам, и у тебя будет второй!!!
Суть в том что производительность уподет почти в двое!
Выход- рендер воды обновлять не сильно часто, до минимума свести дальность прорисовки 2 камеры, и по возможности во время рендера воды заменять многополегонные модели на лоу поли модельки !!!
И будет у тебя быстрая водичка ;)

ABTOMAT 07.06.2007 22:29

Re: Как "спроецировать" картинку на плоскость?
 
vlad, у меня уже есть удобная система ЛОДов, так что с этим проблем не будет ;)
Ну, а так же уу меня есть некоторые вычисления, которые второй раз за тик происходить не будут - а значит, вдвое производительность не упадёт (максимум - в 1,3-1,5 раза)

НУБ 08.06.2007 03:30

Re: Как "спроецировать" картинку на плоскость?
 
vlad
нельзя обновлять реже чем 1 раз за кадр, т.к. комера вертится постоянно, это же не кубмапа ;)
во 2м рендере отражение рендерится в меньший РТ, также можно уменьшить детализацию и скрыть малозаметные объекты.

ABTOMAT
Всё это было сделано почти 2 года назад и лежит в открытом виде, причём работает быстрее ;)

ABTOMAT 08.06.2007 16:14

Re: Как "спроецировать" картинку на плоскость?
 
НУБ, я знаю, что Ashadow выглядит намного лучше того, что у меня и работает быстрее за счёт юзанья шейдеров 1.1 , но я, закончив делать свою игру (дай Бог, это всё-таки случится) хочу сказать:
"А вот я всё делал сам и не использовал ничего стороннего"
Так шо извиняй...

НУБ 08.06.2007 19:50

Re: Как "спроецировать" картинку на плоскость?
 
ABTOMAT
аа, ну так бы сразу и сказал :)
Но тогда зачем ты постоянно задаёшь вопросы на форуме, ведь тогда получается, что ты это делаешь не сам.

ABTOMAT 08.06.2007 21:04

Re: Как "спроецировать" картинку на плоскость?
 
НУБ, как это не сам? По крайней мере, никто за меня ещё ничего не сделал, а вопросы я задаю чтобы понять то, чего я не знаю, иначе зачем тогда форум? ;)


Часовой пояс GMT +4, время: 00:43.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot