forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Вопрос-Ответ (для новичков) (http://forum.boolean.name/showthread.php?t=7886)

cancel 21.01.2010 23:41

Ответ: Вопрос-Ответ (для новичков)
 
В GTA2 самые простые тени у спрайтов вот пример.


И у машины видно тень.


Конечно там никакого солнце нету. Проста имитация что свет из верхнего левого угла. Так что тени всегда на одной стороне.

Сама тень по форме спрайта. Как такое на Blitz или Xors3D сделать?

На OpenGL есть пример там легко.
Там берут ту же картинку и как та маскируют и рисуют с маленким оффсетом

ABTOMAT 22.01.2010 00:00

Ответ: Вопрос-Ответ (для новичков)
 
Ты картинки как рисуешь? Простыми 2Д-средствами типа DrawImage и иже с ним? Тогда готовьсо к гемору =)
Если спрайтами в 3Д, то попроще, но, по ходу, придётся текстуры для теней генерировать отдельно, хотя бы из основной текстуры объекта ;( Сделать тень отдельным спрайтом с оффсетом и чуть пониже спрайта объекта и рендерить так.
Тут главное придумать алгоритм, который из цветной текстуры спрайта сделает ч/б текстуру, где чёрное - непрозрачные области, белое - прозрачные.
Это даже не сложно сделать чтоб работало, сложно чтоб ощутимо много времени при загрузке не отнимало. И анимировать теневой придётся отдельно.
Тогда Multiply blend спасёт отца русской демократии.
З.Ы.
Цитата:

Сообщение от shyrikkk (Сообщение 134209)
неполучаеться !!! не выходит !!!! код у тебя не правельный !!!

Это перл :-D Конечно, у тебя неполучаетЬся потому что дураки написали тебе не_правЕльный код.

cancel 22.01.2010 00:16

Ответ: Вопрос-Ответ (для новичков)
 
Маленкий "plain" и на его кладу текстуру.
Мне же надо "collision detection" в 3D.


Но пока типа:

Global cop = LoadTexture ("c:\temp\cop.bmp")
Global copc=CreateCube ()
ScaleEntity copc,1.5,0.01,3.0


А если для каждого спрйта просто черную копию сделать и рисовать?
Потом копировать для каждого человека и машины?

shyrikkk 22.01.2010 00:33

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Жека (Сообщение 134220)
1. Ты грузил текстуру в цикле - это косяк.
2. Использованная тобой привязка к миллисекундам будет показывать не с нулевого кадра, а неизвестно с какого.

Вот даю рабочий код, в котором разделил твою функцию на две, загрузка и обновление.
Добавил флаг анимации - надо ли анимировать. Повторный запуск анимации по нажатию на пробел.
Ну и глобальных переменных добавил.


Код:



Жека -!!!!спасибо огромное !!!

ABTOMAT 22.01.2010 03:04

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от cancel (Сообщение 134349)
Маленкий "plain" и на его кладу текстуру.
Мне же надо "collision detection" в 3D.


Но пока типа:

Global cop = LoadTexture ("c:\temp\cop.bmp")
Global copc=CreateCube ()
ScaleEntity copc,1.5,0.01,3.0


А если для каждого спрйта просто черную копию сделать и рисовать?
Потом копировать для каждого человека и машины?

Эх да, стар я стал, не подумал :-D
Но только неправильно ты, дядя Фёдор, бутерброд ешь.
Во-первых, кубик здесь не рулит.
У куба шесть граней, а нам нужна только одна - верхняя.
Так что куб в топку.
Надо самому построить меш! С преферансом и куртизанками!
Что это даст? Вместо 24 полигонов получим 4, вместо 2 ентити - один. Это улучшит производительность.
Вот тебе простой пример создания меша:
Код:

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

cam = CreateCamera()
PositionEntity cam, 0,5,0
TurnEntity cam, 90,0,0

sprite = CreateMesh()
surf = CreateSurface(sprite)

v0 = AddVertex (surf, -1,0,-1, 0 ,1)
v1 = AddVertex (surf, -1,0,1, 0 ,0)
v2 = AddVertex (surf, 1, 0,1, 1,0)
v3 = AddVertex (surf, 1, 0,-1, 1,1)

AddTriangle (surf,v0,v1,v2)
AddTriangle (surf,v2,v3,v0)

RenderWorld()
Flip()
WaitKey()
End

На него, в принципе, уже можно натягивать текстуру.
Но в этом же сурфейсе нужно создать ещё такие же 2 полигона, вершины которых ты покрасишь в чёрный цвет, то есть это и будет тень. Добавишь этим вершинам альфу - тень будет полупрозрачна. Соответствующие команды найдёшь в справке.

Вертеть только придётся по-особенному, т.к. у объекта и тени разные центры. Тут уж вспоминай тригонометрию и верти их. (Гугли Поворот точки на плоскости)

Если разберёшься с этим, то будешь круче, чем яйца :super:
Конечно, можно создать и отдельный ентити под тень, тогда вообще проблем не будет с поворотом, но настоящие джедаи так не делают. >>:(

cancel 22.01.2010 06:07

Ответ: Вопрос-Ответ (для новичков)
 
ABTOMAT. Спасибо еще рас. Вот посмотри видео. Нормально так??
Твой пост дал мне кучу мотиваций для этого. А то я бросил бы.

Три варианта на видео. Последний наверное самый нормальный.

http://www.youtube.com/watch?v=69vruqekTho

Прозрачности бы надо немного. Попробую.



А ты еще про вертение говорил. Если это сделаю тогда если я правильно понял, тень будет крутится ну скажем как в GTA2 (Куда не вертись тень всегда в одно напрявление.)??

SBJoker 22.01.2010 10:46

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

cancel 22.01.2010 12:55

Ответ: Вопрос-Ответ (для новичков)
 
Ну нормально. На BlitzMax надо всеравно переходит, там много всего нужнего для этой игры (например списки, OpenGL, streams,...). А движок MiniB3D или Xors3D.
Надо переходить пока кода мало а то потом много переписывать.

ABTOMAT 22.01.2010 14:28

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

А ты еще про вертение говорил. Если это сделаю тогда если я правильно понял, тень будет крутится ну скажем как в GTA2 (Куда не вертись тень всегда в одно напрявление.)??
Гы, нет, TurnEntity уже не подойдёт (тень будет крутиться вместе с объектом -> в какую сторону и повернул, в такую сторону и тень)
Нужно вертеть вершины тени отдельно.
Ну или выделить для тени отдельный объект.
На видео да, мне третий вариант больше понравился.

KingMaks 22.01.2010 23:47

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

is.SarCasm 23.01.2010 00:17

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

анимация спрайта
Анимация спрайта? я отстал от жизни

KingMaks 23.01.2010 00:40

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Igorian (Сообщение 134451)
Анимация спрайта? я отстал от жизни

спрайт а на нем анимированая текстура

ABTOMAT 23.01.2010 00:49

Ответ: Вопрос-Ответ (для новичков)
 
EntityOrder

KingMaks 24.01.2010 17:43

Ответ: Вопрос-Ответ (для новичков)
 
Нашол кость спины:
Код:

back_child = FindChild(player,"Bone02")
потом нужно прокрутить ету кость
Но команды RotateEntity и TurnEntity почему то не крутят ету кость.
Возможно ли вобще прокрутить ету кость,чтобы и сам меш
игрока прокручивался вслед за костью спины? и как?

Blender 24.01.2010 22:59

Ответ: Вопрос-Ответ (для новичков)
 
Возможно сделать прикол как пейнтболе, типо стрелять шариком и при попадании оставляет после себя пятно???
И чем лучше пятно делать, текстурой или кодом?


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

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