Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 12.10.2005, 00:39   #1
Lexa
ПроЭктировщик
 
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений
(для 2 пользователей)
Лампочка

Я вот ту уперся написал обработчик события нажатия на кнопку(17). Сообразил как повернуть и как передвинуть спрайт,а как зделать так чтоб этот спрайт сначала поворачивался(медленно) а потом двигался. Ну например нажал влево катринка повернулась в лево и поехала, нажал вправо повернулась на 180 и поехала вправо?







PS: извините что начал новую тему.
(Offline)
 
Ответить с цитированием
Старый 12.10.2005, 01:31   #2
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
эта задача не из простых (как кажется), во первых нужно искать кротчайший путь поворота на заданный градус (что я не сделал), потом ввести дополнительные переменные, в одной хранить угол (можно прямо из спрайта брать) а другая для цели поворота...

graphics3d 800,600,32,2
setbuffer backbuffer()

camera=createcamera()
positionentity camera,20,20,-50
rotateentity camera,20,20,0

rotateentity createlight(),40,20,0

Player=createcube()
scaleentity player,1,1,5

PA#=0
PA1#=PA#

repeat

 if keydown(200) then PA1=0
 if keydown(208) then PA1=180
 if keydown(203) then PA1=90
 if keydown(205) then PA1=270
 
 if pa1<pa 
 pa=pa-2
 elseif pa1>pa
 pa=pa+2
 endif
 
 if pa1=pa and (keydown(200) or keydown(208) or keydown(203) or keydown(205)) then moveentity player,0,0,1
 

 rotateentity player,0,PA#,0

 renderworld
 flip

until keyhit(1)

end
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 12.10.2005, 01:43   #3
Lexa
ПроЭктировщик
 
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений
(для 2 пользователей)
МДЯ... через неделю вернусь.

1.Что значит - (можно прямо из спрайта брать)?
2.Равно ли выражение ?
PA#=0
PA1#=0
и
PA#=0
PA1#=PA#
PA1#=PA#
и 
PA#=PA1#
(Offline)
 
Ответить с цитированием
Старый 12.10.2005, 01:57   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
В первом случае верно

Во втором PA1#=PA# т.е. переменной PA1# присваиваеш значение PA#,
а PA#=PA1# наоборот.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.10.2005, 02:09   #5
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
мммда, извини, заболтался я, из спрайта в блице никак угол поворота не возьмешь... это только с объекта... извини ещераз...

PA#=0
PA1#=0
и
PA#=0
PA1#=PA#
да, записи по смыслу идентичные...

PA1#=PA#
и 
PA#=PA1#
нет, в превом примере PA1 будет содержать значение PA, а во втором наоборот...

допустим PA=5 и PA1=3

PA1#=PA#

теперь PA=5 и PA1=5

а после PA#=PA1# будет PA=3 и PA1=3

__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 13.10.2005, 13:11   #6
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Чтобы не начинать аналогичную тему, хочу сказать и спросить!

Я, значится, собрался свой "Космос" сделать в 3д спрайтами (щас он полностью на 2д командах). Причины простые: прозрачность без внешних библиотек, поворот спрайтов, частицы (более реалистично можно сделать).

Начал экспериментировать со спрайтами...
Написал 2 примера (говорю на что надо обратить внимание):
1. Выводит на экран 1 рисунок (DrawImage) размером 32х32 точки
Исползую команду Graphics 1024,768,32,1 - получаю 380 fps
Исползую команду Graphics3D 1024,768,32,1 - получаю 1400 fps

2. выводит на экран 1 спрайт - получаю около 700 fps

Выходит, что рисунок выводится быстрее, причем в 3д режиме!

После сделал вывод 1000 рисунков и 1000 спрайтов, опять же быстрее выводятся рисунки - соотв. 80 и 50 fps.

Спрайты гружу с флагом 4, то есть с маской (список фильтров текстур очистил перед загрузкой).

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

Так что я разочаровался в быстром 2д, которое на самом деле 3д
(Offline)
 
Ответить с цитированием
Старый 13.10.2005, 13:21   #7
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Вопрос про спрайты: как убрать черный фон у спрайта, чтобы это получилось быстрее, чем после загрузки спрайта с флагом 4 ("с маской")? Маска тормозит конкретно! Почему?

Я сделал спрайту EntityBlend spr,2, то есть "смешивать умножением" (не знаю как правильно переводится), при этом подложил "под" этот спрайт белый (пустой) спрайт, чтобы смесь была нормальной, но спрайт в этом случае становится полупрозрачным, что нежелательно.

Или даже так: как сделать так, чтобы цвета у спрайта соответствовали его текстуре? Если грузить без флагов, то цвета меняются до неузнаваемости.
(Offline)
 
Ответить с цитированием
Старый 13.10.2005, 16:01   #8
Lexa
ПроЭктировщик
 
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений
(для 2 пользователей)
Жека я не совсем всё понял из ного что ты написал но то что, в 3D быстрее я уже убедился. Хотя интересно почему ведь 2D просчитывать проще
(Offline)
 
Ответить с цитированием
Старый 15.10.2005, 04:45   #9
Lexa
ПроЭктировщик
 
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений
(для 2 пользователей)
Подскажите как реализовать полоску здоровья над обьектом в 3D,
ну или там процент здоровья?
(Offline)
 
Ответить с цитированием
Старый 15.10.2005, 05:05   #10
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Смущение

берёшь камеру, для которой, идёт рендер - далее camera
берёшь объект, над которым будет надпись - далее obj
Далее получаешь 2 координаты проекции 3д-мира на камеру
CameraProject camera,entityx(obj),entityy(obj),entityz(obj)
x=ProjectedX()
y=ProjectedY()
всё - теперь в x и y у тебя координаты.
Можешь написать (учтя отступы), что-нибудь по этим координатам.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 15.10.2005, 05:11   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Сформулируй по-точнее:
надписи должны быть над объектами даже когда они за препятствиями? только когда камера наведена на объект? и т.п.
Так как рациональный алгоритм подбирается именно из этих условий
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 15.10.2005, 05:13   #12
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
я тут писал однажды похожий код, только там нужно было выводить имя героя (надеюсь доработать будет несложно)... просчитывается даже если герой будет за стенкой, то имя не показывается... юзается pick

; графический режим и буфер (как всегда)
graphics3d 800,600,32,2
setbuffer backbuffer()

; создаем камеру и помещаем ее в место откуда нам все видно
camera=createcamera()
positionentity camera,0,20,-50

; создаем свет 
rotateentity createlight(),0,20,40

; создаем препятствие и делаем ему полигональний пик-режим
cube=createcube()
positionentity cube,0,0,20
scaleentity cube,5,10,5
entitypickmode cube,2

; создаем игрока и делаем ему тоже полигональный пик-режим
player= CreateCube()
entitycolor player,50,250,50
scaleentity player,3,3,3
entitypickmode player,2

; создаем зрителя (может быть и камера), для него пик-режим не устанавливаем
; этот режим нужен только для тех объектов на которые будем "смотреть"
; помещаем зрителя под камерой (для наглядности)
viewer = CreateSphere()
positionentity viewer,0,16,-45

; главный цикл
repeat

; самая главная функция (из-за нее все работает)
; функция смотрит по вектору (в трехмерных координатах) от "XYZ" с длиной "XYZ" и 
; возвращает нам идентификатор первого попавшегося на этой линии объекта
; делаем начальные координаты в точке нашено зрителя EntityX(viewer)...
; а сам вектор направляем в игрока (простая геометрия) путем 
; вычитания координат EntityX(player)-EntityX(viewer)...
Pickentity=linepick(EntityX(viewer),EntityY(viewer),EntityZ(viewer), EntityX(player)-EntityX(viewer),EntityY(player)-EntityY(viewer),EntityZ(player)-EntityZ(viewer))

; приравниваем координаты вывода текста к нулю
px#=0
py#=0
; если игрок находится в видимости камеры и 
; он является первым на линии просмотра от viewer до player (ничего другого на пути нет,
; иначе в Pickentity будет другой объект, за который игрок спрятался и условие не сработает
; ТО
if EntityInView(player,camera) And Pickentity=player
; записываем в px и py координаты вывода имени персонажа на экран
cameraproject(camera,EntityX(player),EntityY(player),EntityZ(player))
px=ProjectedX()
py=ProjectedY()
endif

; тут думаю понятно, по клавишам перемещаем игрока по полю
if KeyDown(200) Then TranslateEntity player,0,0,1
if KeyDown(208) Then TranslateEntity player,0,0,-1

if KeyDown(205) Then TranslateEntity player,1,0,0
if KeyDown(203) Then TranslateEntity player,-1,0,0


; прорисовываем мир
renderworld

; теперь смотрим если какаянибудь координата отлична от нуля,
; значит сработало условие (см. выше) значит объект находится в поле зрения камеры
; и в поле зрения зрителя, значит выводим его имя на экран
if px or py Then 
Color 255,0,0
Text px,py,"Player"
Color 255,255,255
endif

; меняем буфер обмена
flip

; закрываем цикл
until KeyHit(1)

; конец программы
end
надеюсь тебе поможет... если нет, то пиши, постараемся написать конкретную функцию.
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 15.10.2005, 05:21   #13
Lexa
ПроЭктировщик
 
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений
(для 2 пользователей)
ну... это... камера
 cam=CreateCamera()
 PositionEntity cam,0,50,0

 PointEntity cam , geroi
герой должен видеть свой паказатель и ботов которые играют за него
но не врагов

а показателей 2
полоска времени (время действия призика)
и уровень героя звёхдочками (ну.. скока уровень стока звезд)

а припядствий за которые можно спрятатся нет
(Offline)
 
Ответить с цитированием
Старый 15.10.2005, 05:25   #14
Lexa
ПроЭктировщик
 
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений
(для 2 пользователей)
Отличный пример я его гдето видел он у меня даже на HDD есть. храню мож пригодится

ну это не совсем 2D
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sprite viewer Dzirt Полезные функции 2 11.05.2009 10:21
работа со спрайтами и с фс. gost6681 MidletPascal 16 08.03.2009 13:02
3D Sprite pax 3D-программирование 9 10.01.2009 21:17
работа со спрайтами Stakan Основной форум 4 04.08.2006 23:02


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com