|
3D-программирование Вопросы, касающиеся программирования 3D мира |
12.10.2005, 00:39
|
#1
|
ПроЭктировщик
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений (для 2 пользователей)
|
Я вот ту уперся написал обработчик события нажатия на кнопку(17). Сообразил как повернуть и как передвинуть спрайт,а как зделать так чтоб этот спрайт сначала поворачивался(медленно) а потом двигался. Ну например нажал влево катринка повернулась в лево и поехала, нажал вправо повернулась на 180 и поехала вправо?
PS: извините что начал новую тему.
|
(Offline)
|
|
12.10.2005, 01:31
|
#2
|
Администратор
Регистрация: 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
|
ПроЭктировщик
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений (для 2 пользователей)
|
МДЯ... через неделю вернусь.
1.Что значит - (можно прямо из спрайта брать)?
2.Равно ли выражение ?
PA#=0
PA1#=0
и
PA#=0
PA1#=PA#
|
(Offline)
|
|
12.10.2005, 01:57
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
В первом случае верно
Во втором PA1#=PA# т.е. переменной PA1# присваиваеш значение PA#,
а PA#=PA1# наоборот.
|
(Offline)
|
|
12.10.2005, 02:09
|
#5
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
мммда, извини, заболтался я, из спрайта в блице никак угол поворота не возьмешь... это только с объекта... извини ещераз...
PA#=0
PA1#=0
и
PA#=0
PA1#=PA#
да, записи по смыслу идентичные...
нет, в превом примере 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
|
ПроЭктировщик
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений (для 2 пользователей)
|
Жека я не совсем всё понял из ного что ты написал но то что, в 3D быстрее я уже убедился. Хотя интересно почему ведь 2D просчитывать проще
|
(Offline)
|
|
15.10.2005, 04:45
|
#9
|
ПроЭктировщик
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений (для 2 пользователей)
|
Подскажите как реализовать полоску здоровья над обьектом в 3D,
ну или там процент здоровья?
|
(Offline)
|
|
15.10.2005, 05:05
|
#10
|
Зануда с интернетом
Регистрация: 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
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Сформулируй по-точнее:
надписи должны быть над объектами даже когда они за препятствиями? только когда камера наведена на объект? и т.п.
Так как рациональный алгоритм подбирается именно из этих условий
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
15.10.2005, 05:13
|
#12
|
Администратор
Регистрация: 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
|
ПроЭктировщик
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений (для 2 пользователей)
|
ну... это... камера
cam=CreateCamera()
PositionEntity cam,0,50,0
PointEntity cam , geroi
герой должен видеть свой паказатель и ботов которые играют за него
но не врагов
а показателей 2
полоска времени (время действия призика)
и уровень героя звёхдочками (ну.. скока уровень стока звезд)
а припядствий за которые можно спрятатся нет
|
(Offline)
|
|
15.10.2005, 05:25
|
#14
|
ПроЭктировщик
Регистрация: 10.10.2005
Сообщений: 102
Написано 2 полезных сообщений (для 2 пользователей)
|
Отличный пример я его гдето видел он у меня даже на HDD есть. храню мож пригодится
ну это не совсем 2D
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:08.
|