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

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

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

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

Ответ
 
Опции темы
Старый 20.09.2005, 13:58   #16
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
Плохо

alcoSHoLiK Ну зачем, просто качай ссылку которую выложил

SubZer0 ТАМ ВСЕ ФАЙЛЫ

И кстати БОЛЬШОЕ СПАСИБО SubZer0 )
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 14:37   #17
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
Да я наверно вас уже достал, но у меня есть ещё несколько вопросов:

1.Почему когда я отважу дальше камеру ( НА КОЛЁСИКО ) всё становится вытенутым, каким-то кривым???Можно ли от этого избавиться???

2.Можно ли сделать так, чтобы когда мой герой убегал к примеру на 10 (метров образна говоря) от кубиков их имена(кубиков) изчезали???

3.И можно ли сделать так, чтобы имена кубиков были написанны на чёрном(тёмном) прозрачном фоне(по размеру с сомо имя)???

(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 15:00   #18
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Originally posted by xxxKRIKxxx@Sep 20 2005, 12:37 PM
Да я наверно вас уже достал, но у меня есть ещё несколько вопросов:

1.Почему когда я отважу дальше камеру ( НА КОЛЁСИКО ) всё становится вытенутым, каким-то кривым???Можно ли от этого избавиться???

2.Можно ли сделать так, чтобы когда мой герой убегал к примеру на 10 (метров образна говоря) от кубиков их имена(кубиков) изчезали???

3.И можно ли сделать так, чтобы имена кубиков были написанны на чёрном(тёмном) прозрачном фоне(по размеру с сомо имя)???

Нет, еще нет, и не сможешь, мы тут для этого и форум замутили...

на счет первого:

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

лично я советую Зумом только приближать чтото, типа в бинокль смотришь, а на счет отдаления, тут лучше позицию самой камеры менять, а иначе все получается как через увеличительное стекло...

на счет второго: есть теорема пифагора (покажу на моем старом примере)
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

Pickentity=linepick(EntityX(viewer),EntityY(viewer),EntityZ(viewer), EntityX(player)-EntityX(viewer),EntityY(player)-EntityY(viewer),EntityZ(player)-EntityZ(viewer))

px#=0
py#=0
if EntityInView(player,camera) And Pickentity=player
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

; вычисляем расстояние по теореме пифагора
xd=abs(EntityX(player)-EntityX(viewer))
yd=abs(EntityY(player)-EntityY(viewer))
zd=abs(EntityZ(player)-EntityZ(viewer))
r=Sqr(xd*xd+yd*yd+zd*zd)

; проверяем, если оно меньше 200 то показываем имя
if r<200
 if px or py Then
 Color 255,0,0
 Text px,py,"Player"
 Color 255,255,255
 endif
endif

flip

until KeyHit(1)

end

на счет третьего:

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

__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 15:04   #19
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
1. побочные эффекты масштабирования, наверное...
Исправить не знаю как.

2. проверяй расстояние от героя (или камеры) до кубиков. Если оно стало БОЛЬШЕ 10 (или любого другого НУЖНОГО значения), то НЕ выводи имена.
То же самое, но по-другому: выводи имена ТОЛЬКО если кубики БЛИЖЕ заданной дистанции.

3. Можно использовать библиотеку для рисования полупрозрачных рисунков + шрифт-картинку... (2д вариант)
Или сделать картинки с именами объектов и натянуть их на спрайты, и сделать спрайты полупрозрачными, + масштабировать спрайты в зависимости от длины имени, + сделать их "детьми" для соответствующих кубиков (3д вариант).

Второй вариант проще сделать. Или нет? Сам-то я пока не делал такое, но должно работать.
2 должен быть быстрее, потому что 3д...
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 15:10   #20
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Насчет первого SubZer0 правильно сказал, я-то думал там что-то сверхестественное творится.

Рисовать прямоугольник, а сверху текст - самое простое.
Но:
1. как сделать прямоугольник полупрозрачным?
2. команда Text медленно выполняется! Надо иметь это ввиду...
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 15:31   #21
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
А ха точно самое главное-то забыл написать.

4.Я тут думал как сделать умную камеру, чтоб камера не опускалась ниже уровня и сквозь стены не прохадила(при тотм если учесть что тур не ровный , а где-то есть впадины, а где-то и высоты) ,но так толком и не чё ни сделал.Я возможно знаю, что вы скажете смотри пример CASTLE вроде он так назывался, но я вас предупреждаю я там ни чё ни понел .

5.И практически таже проблема с героем(как он прыгает от уровня -7 до уровня 3 по высоте,так и прыгает) как сделадь чтоб он прыгал на +7 по высоте несмотря на то где он находится(В НИЗУ ИЛИ В ВЕРХУ)
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 15:48   #22
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Чтобы камера, герой и прочие объекты не проходили через другие объекты, нужно назначить для них коллизии.
Если с героем все относительно просто, то с камерой посложнее: может получиться так, что камера "зацепится" за какое-то препятствие, и игрок отдалится от нее (или приблизится). Поэтому необходимо следить за расстоянием от героя до камеры, и если оно не равно какому-то эталонному, то сделать его таковым.
Неровности: высоту камеры над уровнем земли проверяешь, используя команду LinePick. С ее помощью ты получишь координату Y (x,z) "над" камерой, т.е. высоту холма (впадины). Затем проверяешь расстояние от найденной высоты до камеры, если больше эталонного, то уменьшаешь (двигаешь камеру вниз), меньше - увеличиваешь.

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

ПС: извиняюсь, что ни строчки кода не даю. Суть я передал как смог, кто хочет кодом помочь - помогите (сделать все это довольно просто, но новички (без обид) могут и не въехать).
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 16:39   #23
..::SERGO::..
Знающий
 
Регистрация: 09.09.2005
Сообщений: 300
Написано 0 полезных сообщений
(для 0 пользователей)
Наверно ща напишу бред но все таки (просто хотелось высказатьза за пару дней)
Ето чтобы текс уберался
:o'' if entitydistance(pl,NPC) > 10 then ClearAllActions :o''
или что-то в етом духе )
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 17:08   #24
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
так ты что, два дня молчал что ли?

Типа псевдокода, но ты выбрал первый вариант. Я же НАСТОЯТЕЛЬНО советую делать по второму, т.е. именно если МЕНЬШЕ

if (entitydistance(hero,NPC)<MAX_RANGE)
;берем проекцию объекта на камеру
;выводим текст в полученных координатах
;это 2д

;для 3д
;showentity sprite_name_npc или
;entityvisible sprite_name_npc
;масштабируем спрайт в зависимости от расстояния до камеры (чтобы он
;не получился слишком маленьким либо слишком большим)
endif
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 18:11   #25
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
Чтобы камера, герой и прочие объекты не проходили через другие объекты, нужно назначить для них коллизии.
Если с героем все относительно просто, то с камерой посложнее: может получиться так, что камера "зацепится" за какое-то препятствие, и игрок отдалится от нее (или приблизится). Поэтому необходимо следить за расстоянием от героя до камеры, и если оно не равно какому-то эталонному, то сделать его таковым.
Неровности: высоту камеры над уровнем земли проверяешь, используя команду LinePick. С ее помощью ты получишь координату Y (x,z) "над" камерой, т.е. высоту холма (впадины). Затем проверяешь расстояние от найденной высоты до камеры, если больше эталонного, то уменьшаешь (двигаешь камеру вниз), меньше - увеличиваешь.

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

Жека! или КТО-НИБУДЬ! Напешите элементарный примерчик ПОЖАЙЛУСТА,а то я примерно знаю чё делать, а чё точно не имею понятия, ну на примере лучше я въезжаю,а не на словах!
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 20:19   #26
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Вобщем, я написал пример, часть взял из того, что выложил SubZer0.
Придется тебе его переделать под свои нужды, у меня времени нет, проще и быстрее было сделать то, что я сделал...
Комментарии я проставил. Не очень подробные, но все же.
Если что не понятно, спрашивай.


Фичи:
-робот не проходит сквозь большой кубик
-робот не проходит сквозь землю
-камера не проходит сквозь землю
-камера не проходит через большой кубик
-имена кубиков пишутся, если расстояние от них до робота меньше 100
-имена кубиков пишутся, если есть прямая видимость между ними и роботом (добавил преграду для видимости - большой куб, земля как преграда была до меня)
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 20:42   #27
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Originally posted by SERGO@Sep 20 2005, 02:39 PM
Наверно ща напишу бред но все таки (просто хотелось высказатьза за пару дней)
Ето чтобы текс уберался
:o'' if entitydistance(pl,NPC) > 10 then ClearAllActions :o''
или что-то в етом духе )
Опс.... сорри, я и забыл, что есть такая команда... еще раз приношу извинения...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 21:57   #28
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
SubZer0, все ты правильно написал, осталось только запихнуть теорему в функцию и назвать ее EntityDistance
Но твой вариант более общий, так как позволяет считать в любой из плоскостей, в 3д или по отдельной оси.
Ведь бывают случаи, когда надо посчитать расстояние только в плоскости XOZ, для этого из твоего кода убираем yd и все!
А "ентитидистанс" не упростить....
(Offline)
 
Ответить с цитированием
Старый 20.09.2005, 22:28   #29
jimon
 
Сообщений: n/a
хочу заметить что entitydistance тормозит иногда :o''
 
Ответить с цитированием
Старый 20.09.2005, 22:31   #30
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Однако ж практика показывает, что "встроенный" ЁнтитиДистанс работает на порядок (!) быстрее, чем расчет из кода через теорему Пифагора. Так что при необходимости расчитать дистанцию между двумя обьектами по проекциям на плоскости, логично использовать дополнительный пивот, размещаемый по законам проекции одного обьекта на одной плоскости со вторым...
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь Larsus Delphi 14 07.08.2010 13:11
ОООчень нужна помощь. Slepetc PureBasic 6 23.01.2009 21:13
Нужна помощь... Черный крыс PureBasic 2 01.09.2007 17:56
Нужна Помощь johnk Blitz3D 32 22.03.2007 17:33
Нужна помощь! ingko Болтовня 6 23.10.2006 09:58


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


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