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

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


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

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