forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Вращение оружия вместе с камерой (http://forum.boolean.name/showthread.php?t=15854)

reumep 15.11.2011 22:53

Вращение оружия вместе с камерой
 
Создаю некий FPS, как вращать оружие вместе с камерой? И как еще реализовать повреждения от ножа(чтобы повреждения наносились лишь вргам спереди).И вот: как сделать так, чтобы при наведении курсора на NPC можно было сделать что-то(именно как реализовать проверку наведения курсора на NPC)?. А еще: как сделать лазерный прицел и надписи над NPC, которые располагаются ровно на середине?

dsd 15.11.2011 23:48

Ответ: Вращение оружия вместе с камерой
 
Кодом?

зы: попробуй все-таки почитать справку по

Entity Movement

Entity Control

Entity State

и
CameraPick

PickedX

PickedY

PickedZ

PickedNX

PickedNY

PickedNZ

PickedTime

PickedEntity

PickedSurface

PickedTriangle

CameraProject

ProjectedX

ProjectedY

ProjectedZ

EntityInView

Там есть все ответы

Антихрист 16.11.2011 00:17

Ответ: Вращение оружия вместе с камерой
 
Ответ должен был выглядеть так:
Цитата:

Сообщение от dsd (Сообщение 209867)

попробуй все-таки почитать справку

Там есть все ответы


FireOwl 16.11.2011 00:45

Ответ: Вращение оружия вместе с камерой
 
Ну, трудно предположить, что вопрошающий не заметил справки - ведь она специально открывается первой страницей при каждом запуске IDE.
Остается только указать на заголовки, в этой справке, если не цитировать дословно.

Платон Александрович 16.11.2011 08:52

Ответ: Вращение оружия вместе с камерой
 
reumep
* ентити оружия позиционируешь как надо перед камерой и делаешь чайлдом камеры EntityParent(ЕнтитиОружия, ЕнтитиКамеры)

* добавляешь ентити врага на проверку пересечения лучом EntityPickMode(ЕнтитиВрага, 2), 2 - режим проверки по треугольникам модели. Во время удара пускаешь луч из камеры CameraPick(ЕнтитиКамеры, ЦентрЭкранаПоX, ЦентрЭкранаПоY). Если произошло пересечение, функция возвратит ентити. Кроме этого по пересечению проверяешь дистанцию до врага EntityDistance(ЕнтитиКамеры, ЕнтитиВрага), ну и засчитываешь попадание если враг достаточно близко

* так-же, CameraPick

* так-же CameraPick, в точке пересечения луча ставишь спрайт лазерной точки PositionEntity(ЕнтитиСпрайта, PickedX(), PickedY() и PickedZ()). Кроме этого спрайт точки нужно соориентировать по поверхности на которую он лепится, для этого берешь вектор нормали пикнутой поверхности и ориентируешь по нему спрайт AlignToVector(ЕнтитиСпрайта, -PickedNX(), -PickedNY(), -PickedNZ(), 3). Минусы нужны т.к. вектор нормали нужен в обратную сторону - от поверхности.
К оружию можно прицепить два длинных перекрещенных спрайта (лучше сразу при моделлировании сделать, отдельно от оружия чтоб можно было потом найти FindChild(ЕнтитиОружия, "Имя сетки") и скрывать\показывать)
На эти спрайты натянуть дымчатую текстуру (шум перлина в фотошопе или что-то подобное), задать полупрозрачность и нужный цвет (в редакторе). В программе двигать и\или вращать эту текстуру PositionTexture\RotateTexture. Должно получиться красиво :)

* Можно спроецировать позицию врага на экран CameraProject(ЕнтитиКамеры, ПозицияХ, ПозицияY, ПозицияZ) и по полученым координатам ProjectedX() и ProjectedY() нарисовать что надо. (Но 2D в блице не имеет аппаратной поддержки, очень тормозное, так что можешь заюзать библиотеку FastImage)
А лучше делать CameraPick всегда и если пересечение с npc произошло, отобразить EntityShow(СпрайтЕнтити) и спозиционировать спрайт с надписью по координатам npc. Спрайту также нужно выставить порядок отрисовки EntityOrder(ЕнтитиСпрайта, -1), чтоб он рисовался поверх всего.

Leowey 16.11.2011 11:47

Ответ: Вращение оружия вместе с камерой
 
Цитата:

Ну, трудно предположить, что вопрошающий не заметил справки - ведь она специально открывается первой страницей при каждом запуске IDE.
Остается только указать на заголовки, в этой справке, если не цитировать дословно.

Ответ прост! Справка то на английском!! :-D

St_AnGer 16.11.2011 13:32

Ответ: Вращение оружия вместе с камерой
 
Цитата:

Сообщение от Leowey (Сообщение 209899)
Ответ прост! Справка то на английском!! :-D

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

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

Leowey 16.11.2011 14:22

Ответ: Вращение оружия вместе с камерой
 
Цитата:

Сообщение от St_AnGer (Сообщение 209906)


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

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

Я, конечно, в курсе, но судя по вопросам топикстартера он программист начинающий :) .

reumep 16.11.2011 17:52

Ответ: Вращение оружия вместе с камерой
 
Спасибо, конечно, справку я читал. Проблема в том, что я не знаю, что нужно именно вращать мышью, камеру, или модель оружия. Дело в том, что я пользуюсь такой командой
Код:

TurnEntity world\cam,MouseYSpeed(),0,0
TurnEntity player\model,0,-MouseXSpeed(),0

И если вращать только камеру, то она скособочивается

reumep 16.11.2011 18:00

Ответ: Вращение оружия вместе с камерой
 
И как сделать адекватный прыжок и адекватный скайбокс?

RegIon 16.11.2011 18:37

Ответ: Вращение оружия вместе с камерой
 
Цитата:

И как сделать адекватный прыжок и адекватный скайбокс?
Да поможет дебе FOR
Скай.берёшь куб с текстурой,скайлишь его и EntityFx cube,16

reumep 16.11.2011 19:06

Ответ: Вращение оружия вместе с камерой
 
Цитата:

Сообщение от Костян (Сообщение 209978)
Да поможет дебе FOR
Скай.берёшь куб с текстурой,скайлишь его и EntityFx cube,16

да, только вот на куб накладывается одна текстура, а я имел в виду 6 разных текстур по бокам, внизу, вверху

reumep 16.11.2011 19:12

Ответ: Вращение оружия вместе с камерой
 
И вот еще вопрос: как сделать медленное затемнение или обратный затемнению процесс? И как реализовать "поднятие камеры": персонаж встает, тут обратный затемнению процесс. А когда персонаж умер, тут камера как бы падает на пол, экран затемняется. Как это сделать?

NitE 17.11.2011 18:06

Ответ: Вращение оружия вместе с камерой
 
http://boolean.name/index.php?option...13&I temid=69

Тут есть скайбокс и неадекватный прыжок.

reumep 17.11.2011 18:43

Ответ: Вращение оружия вместе с камерой
 
Код:

Function LoadSkyBox( file$ ) ; Скайбокс
        m=CreateMesh()
        ;front face
        b=LoadBrush( file$+"_FR.dds",49 )
        s=CreateSurface( m,b )
        AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
        AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3:
        FreeBrush b
        ;right face
        b=LoadBrush( file$+"_LF.dds",49 )
        s=CreateSurface( m,b )
        AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
        AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;back face
        b=LoadBrush( file$+"_BK.dds",49 )
        s=CreateSurface( m,b )
        AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
        AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;left face
        b=LoadBrush( file$+"_RT.dds",49 )
        s=CreateSurface( m,b )
        AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
        AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;top face
        b=LoadBrush( file$+"_UP.dds",49 )
        s=CreateSurface( m,b )
        AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
        AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;bottom face       
        b=LoadBrush( file$+"_DN.dds",49 )
        If b=0 b=CreateBrush (0,30,50)
        s=CreateSurface( m,b )
        AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
        AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ScaleMesh m,1000000,1000000,1000000
        FlipMesh m
        EntityFX m,1+8
        Return m
End Function

>:(
Почему так сложно

reumep 17.11.2011 19:22

Ответ: Вращение оружия вместе с камерой
 
И еще, как сделать файл с диалогами и функцию его чтения?

FireOwl 18.11.2011 00:51

Ответ: Вращение оружия вместе с камерой
 
Ничего сложного, просто создаются по очереди 12 треугольников для скайбокса. Модель то уникальная, в список примитивов не входит. Можно ее отдельно самому в три-де-максе замоделить. И отекстурить там же. Даже в виде сферы, если текстуру взять специальную.
А потом вставить в игру и чудовищно увеличить.

Что касается диалогов - каждый ворует сочиняет как может.
И это зависит от формата диалогов/квестов.
Например - такая мысля: пишешь в файл в отдельных строчках:
Цитата:

1
Как дела? Хотите купить этот меч?.
>2
Давай.
>3
Отвали.
2
Он стоит 10 золотых.
3
Не хочешь как хочешь.
Номера высказываний и варианты ответов к каждому, с сылками на следующее высказывание ветки.

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

reumep 18.11.2011 14:12

Ответ: Вращение оружия вместе с камерой
 
Скайбокс из макса глючит.
А какая функция считывает построчно?

St_AnGer 18.11.2011 14:53

Ответ: Вращение оружия вместе с камерой
 
построчно читает ReadLine, возвращает данные символьного типа. Как раз в твоём случае поможет

FireOwl 18.11.2011 16:49

Ответ: Вращение оружия вместе с камерой
 
Цитата:

Сообщение от reumep (Сообщение 210222)
Скайбокс из макса глючит.

Это как?

Данил 18.11.2011 20:24

Ответ: Вращение оружия вместе с камерой
 
наверное, сделал кубик, наложил текстуру - вставил в игру - видны углы, стыки.

mr.DIMAS 18.11.2011 20:35

Ответ: Вращение оружия вместе с камерой
 
(не)адекватный прыжок сделать можно так. Вводим переменную скорости прыжка. Константу содержащую максимальную скорость прыжка и константу G. Во время нажатия клавиши прыжка устанавливаем скорость прыжка в максимум. В цикле двигаем сущность этой скоростью вверх.

Таким образом получится плавный прыжок и не нужно городить 2 переменные вроде jumpSpeed и gravity, а использовать отрицательные значения JumpSpeed в качестве гравитации

В коде:

Код:

jumpMaxSpeed# = 1.2
jumpSpeed# = 0
const PHYS_G# = 0.98
 
Function Jump()
if KeyHit( кнопка_прыжка ) jumpSpeed = maxJumpSpeed
end function
 
... где-то в главном цикле( или в функции обновления игрока )
TranslateEntity entity, 0, jumpSpeed, 0
 
if jumpSpeed > -PHYS_G jumpSpeed = jumpSpeed - PHYS_G * 0.1

Можно еще эффектов всяких навесить. Вроде небольшого приседания перед прыжком и т.п.

зы. за блицевский код не бить если в нем недочеты - последний раз писал на нем 5 месяцев назад

Reizel 18.11.2011 21:07

Ответ: Вращение оружия вместе с камерой
 
Прыжок это же простота. Вводим Y объекта, вводим aY. Надеюсь знаем что это такое?? в цикле, если объект на высоте Y касается ландшафта - то проверяем пробел, если щелкнут - то aY выставляем в (0..N), где N - максимальная сила прыжка. Ежели объект " в воздухе" - то Y+=aY, опять же проверяем на коллизию с уровнем

reumep 19.11.2011 15:43

Ответ: Вращение оружия вместе с камерой
 
Я так сделал, но сфера почему-то не касается ландшафта(программа это не засекает

A_Z 13.12.2011 23:58

Ответ: Вращение оружия вместе с камерой
 
пипец.
лучше
skyTexture=loadtexture(""); -здесь вписываешь имя текстуры с небом
cam=createcamera()
skysphere=createsphere(cam) ;- парентишь небо к камере, хотя лучше не надо:-)
entitytexture skysphere,skyTexture
scaleentity skysphere, 1000,1000,-1000 ;выворачиваешь небо на изнанку(чтобы треугольники, составляющие сферу смотрели вовнутрь сферы)

ну как-то так.

Leowey 14.12.2011 01:07

Ответ: Вращение оружия вместе с камерой
 
Цитата:

scaleentity skysphere, 1000,1000,-1000 ;выворачиваешь небо на изнанку(чтобы треугольники, составляющие сферу смотрели вовнутрь сферы)
Flipentity уже не торт?

A_Z 14.12.2011 02:49

Ответ: Вращение оружия вместе с камерой
 
торт конечно, спасибо

Wegox 17.12.2011 00:53

Ответ: Вращение оружия вместе с камерой
 
Цитата:

Сообщение от Leowey (Сообщение 213888)
Flipentity уже не торт?

Если делать так Flipentity то entity фнсится не сможет уж лучше так;)
scaleentity skysphere, 1000,1000,-1000

reumep 18.12.2011 10:44

Ответ: Вращение оружия вместе с камерой
 
Цитата:

Сообщение от Wegox (Сообщение 214215)
Если делать так Flipentity то entity фнсится не сможет уж лучше так;)
scaleentity skysphere, 1000,1000,-1000

а зачем, собственно? эта фича не всем нужна

Wegox 18.12.2011 14:40

Ответ: Вращение оружия вместе с камерой
 
А. C большой буквы, начало предложения, нужна. точка:)

reumep 19.12.2011 23:14

Ответ: Вращение оружия вместе с камерой
 
Цитата:

Сообщение от Wegox (Сообщение 214441)
А. C большой буквы, начало предложения, нужна. точка:)

я уважаю правила грамматики, но мне лично лень тянутья пальцами до кнопки shift


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

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