Попытка сделать свет от фонарика.

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Попытка сделать свет от фонарика.

Сообщение longwair » 11.04.2013 (Чт) 23:09

Сделал свет от фонарика, но есть одно но. Не знаю как правильно трансформировать текстуру что бы не было бага как на скрине. Суть в том что чем дальше камера тем больше фонариков.

код такой при инициализации:
Код: Выделить всё
Set TexBox = D3DX.CreateTextureFromFile(d3ddevice, App.Path + "\beton.dds")

Set TexBox1 = D3DX.CreateTextureFromFile(d3ddevice, App.Path + "\tex1.dds")

d3ddevice.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_MODULATE

d3ddevice.SetTextureStageState 1, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION Or 1
d3ddevice.SetTextureStageState 1, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2
Dim mat As D3DMATRIX, mat1 As D3DMATRIX
    D3DXMatrixRotationX mat, pi
    D3DXMatrixScaling mat1, 0.02, 0.02, 0
    D3DXMatrixMultiply mat, mat, mat1
    D3DXMatrixTranslation mat1, 0.5, 0.5, 0
    D3DXMatrixMultiply mat, mat, mat1
    d3ddevice.SetTransform D3DTS_TEXTURE1, mat
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Попытка сделать свет от фонарика.

Сообщение Mikle » 12.04.2013 (Пт) 8:35

Текстура пятна света "враппится", а должна "клампиться":
Код: Выделить всё
d3ddevice.SetTextureStageState 1, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP
d3ddevice.SetTextureStageState 1, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP

В коде огромное количество ошибок. К примеру, зачем эта ф-ция:
Код: Выделить всё
Function InitGeometry() As Boolean
On Local Error Resume Next

Box = CreateGameMesh(App.Path + "\box.x")
InitGeometry = True
End Function

Если она всегда возвращает True? Вообще, On Local Error Resume Next, кроме особых случаев, свидетельствует о том, что программист не понимает, что делает, и просто закрывает глаза на ошибки.
Вот ещё весёлый фрагмент:
Код: Выделить всё
If Not InitGeometry() Then
   MsgBox "Невозможно инициалтзировать буфер вершин."
   End
End If

InitGeometry

А это:
Код: Выделить всё
    d3ddevice.SetTextureStageState 0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR: _
    d3ddevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR: _
    d3ddevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC: _
    d3ddevice.SetTextureStageState 0, D3DTSS_MAXANISOTROPY, 2

Супер! Ставил бы уж сразу смайлик :) вместо : _.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 12.04.2013 (Пт) 13:01

Спасибо Mikle как всегда помог.
Я не программист и этому делу ни где не обучался. Просто хочется сделать какую нибудь игрушку вот и пытаюсь с вашей помощью разобраться. Немного там кода "скопипастил" немного с другого места. и вот если бы ты " в который раз" не тыкал меня лбом в ошибки, я бы так их и не замечал.

А с фильтрацией да, я затупил просто стянул код с другой программы, а там всё это идёт после
Код: Выделить всё
if...Then


p.s. Блин вот вроде для себя что то получается, как только ты начинаешь описывать весь мой корявый код, понимаю что нифига не получается.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.04.2013 (Пт) 17:13

Mikle писал(а):А это:
Код: Выделить всё
    d3ddevice.SetTextureStageState 0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR: _
    d3ddevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR: _
    d3ddevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC: _
    d3ddevice.SetTextureStageState 0, D3DTSS_MAXANISOTROPY, 2

Супер! Ставил бы уж сразу смайлик :) вместо : _.

Наконец-то до меня дошло, что означает двоеточие с переносом! Класс! :lol: :lol: :lol:

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 15.04.2013 (Пн) 10:05

Ещё один вопрос. Можно ли сделать чтобы пятно света трансформировалось и выглядело как в жизни? То есть в жизни, свет от фонарика немного расходится в стороны и чем дальше ты от объекта тем больше пятно света, а чем ближе тем оно меньше. А то в способе что описан выше как то не естественно получается.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Попытка сделать свет от фонарика.

Сообщение Mikle » 15.04.2013 (Пн) 10:49

Для этого нужно проецировать текстуру не из позиции глаз, как тут, а из позиции фонарика. Я когда-то тут на форуме давал пример проекционных текстур.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 16.04.2013 (Вт) 8:01

Mikle, вот нашёл только эту тему http://bbs.vbstreets.ru/viewtopic.php?f=6&t=41894, но ничего не понял. Мне бы поподробней.

И вот тут нашёлhttp://bbs.vbstreets.ru/viewtopic.php?f=6&t=41730, но примерчик почему то не скачивается.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 17.04.2013 (Ср) 8:57

Mikle, не остался ли у тебя пример с проецированием текстур?
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Попытка сделать свет от фонарика.

Сообщение Mikle » 17.04.2013 (Ср) 15:08

Вот тот пример. Это не совсем то, что тебе нужно, просто демонстрация применения проективной текстуры на FFP и управления направлением текстурирования с помощью матриц. Из-за ограниченности DX8 в целом и FFP в частности приходится использовать кучу костылей, вплоть до двух проходов рендера. На DX9 с вторыми шейдерами это было бы на порядок проще и быстрее.
Управление камерой - мышь + стрелки, позицией света - WASD, направлением света - Home-End-Delete-PgDown.
У вас нет доступа для просмотра вложений в этом сообщении.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 17.04.2013 (Ср) 17:29

Mikle, спасибо буду разбираться.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 07.01.2014 (Вт) 18:44

Доброго всем времени суток, и всех с праздниками)))

В примере с фонариком описанном выше текстура пятна света накладывается на все модели участвующие в сцене. Допустим я не хочу что бы текстура пятна света ложилась на модель руки. Как такое реализовать?
P.S. Речь идёт не о проецировании текстур.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Попытка сделать свет от фонарика.

Сообщение Mikle » 08.01.2014 (Ср) 8:47

Рисуй сначала всё, кроме руки с оружием, потом пятно фонаря, потом руку.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 12.01.2014 (Вс) 12:22

Как бы тоже так и делал, но видимо где то "как всегда" ошибаюсь. Как я не переставлял меши, текстуры, все равно пятно света засвечивает руку. Чуть позже вернусь к этой теме. А то в гостях, нет так сказать под рукой всего необходимого.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 26.01.2014 (Вс) 2:23

Продолжаю тему. Подскажите что делаю не так? В проекте комната и шар, как исключить шар от засвечивания пятном света. Как и посоветовал Mikle рисую сначала комнату, потом пятно света, и после шар. Но на шаре всё равно отображается пятно света.
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Попытка сделать свет от фонарика.

Сообщение Mikle » 26.01.2014 (Вс) 8:31

Что касается порядка отрисовки, так всё работает:
Код: Выделить всё
    d3dDevice.SetTexture 1, TexFlash
    d3dDevice.SetTexture 0, TexBox
    DrawGameMesh Box, 0, 0, 0
   
    d3dDevice.SetTexture 1, Nothing
    d3dDevice.SetTexture 0, TexSphere
    DrawGameMesh Sphere, 0, 5, 20

Сразу вылазят другие ошибки, жду вопросов по ним.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Попытка сделать свет от фонарика.

Сообщение longwair » 26.01.2014 (Вс) 11:00

Как всегда спасибо. Вот сколько рыл интернет так нигде и не нашёл это
Код: Выделить всё
d3dDevice.SetTexture 1, Nothing
. А на счёт ошибок то вроде нет, всё нормально работает. Может со временем вылезут.
Но по другим темам вопросом ооооочень много, так что я тут на долго)))
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList  
cron