|
3D-программирование Вопросы, касающиеся программирования 3D мира |
21.09.2009, 00:49
|
#16
|
Нуждающийся
Регистрация: 02.09.2007
Сообщений: 50
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Вопросы очередного новичка
Попутно вспомнил что для игрока нужно исползовать капсулу. Вот за 20 минут сделал небольшой примерчик по поводу этой проблемы (воспользовался небольшим участком кода из примера от товарища cahekp из этой темы) Не вините за корявость, это делалось на скорую руку, да и я далеко не хороший программист на BB.
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()
Wireframe 1
cam=CreateCamera()
CameraRange cam,.1,100
PositionEntity cam,0,5,-12
lit1=CreateLight()
pxCreateWorld(0,"")
pxSetGravity(0,-9.8,0)
pl_b=pxBodyCreateCube(2,.1,2,0)
pxBodySetPosition pl_b,0,1,0
pl=CreateCube()
ScaleEntity pl,2,.01,2
pxBodySetEntity pl,pl_b
pl2_b=pxBodyCreateCube(5,.1,5,0)
pl2=CreateCube()
ScaleEntity pl2,5,.01,5
pxBodySetEntity pl2,pl2_b
Global char%
Global mesh%
Global naklon_pitch#
Global naklon_roll#
char=pxBodyCreateCapsule(1.5,.5,80)
pxBodySetPosition char,0,3,0
pxBodySetRotation char,0,0,0
mesh=CreateCylinder(8)
ScaleEntity mesh, .5, 1.5, .5
force#=800
While Not KeyHit(1)
UpdateWorld()
RenderWorld()
pxBodySetEntity mesh, char
If KeyDown(17)
pxBodyAddLocalForce(char,0,0,(vz#-pxBodyGetLocalLinearSpeedZ(char))*force#,0)
vz#=1
Else If KeyDown(31)
pxBodyAddLocalForce(char,0,0,-(vz#+pxBodyGetLocalLinearSpeedZ(char))*force#,0)
vz#=1
Else
pxBodyAddLocalForce(char,0,0,-pxBodyGetLocalLinearSpeedZ(char)*force#,0)
End If
If KeyDown(30)
pxBodyAddLocalForce(char,-(vx#+pxBodyGetLocalLinearSpeedX(char))*force#,0,0,0)
vx#=1
Else If KeyDown(32)
pxBodyAddLocalForce(char,(vx#-pxBodyGetLocalLinearSpeedX(char))*force#,0,0,0)
vx#=1
Else
pxBodyAddLocalForce(char,-pxBodyGetLocalLinearSpeedX(char)*force#,0,0,0)
End If
naklon_pitch=pxBodyGetRotationPitch(char)
naklon_roll=pxBodyGetRotationRoll(char)
If naklon_pitch>0 Then
pxBodySetRotation char,-naklon_pitch,-mx,0
pxBodySetRotation char,0,-mx,0
Else If naklon_pitch<0 Then
pxBodySetRotation char,Abs(naklon_pitch),-mx,0
pxBodySetRotation char,0,-mx,0
End If
If naklon_roll>0 Then
pxBodySetRotation char,0,-mx,-naklon_roll
pxBodySetRotation char,0,-mx,0
Else If naklon_roll<0 Then
pxBodySetRotation char,0,-mx,Abs(naklon_roll)
pxBodySetRotation char,0,-mx,0
End If
mx=mx+MouseXSpeed()*.2
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
pxRenderPhysic(30,0)
Flip
Wend
End
W,S,A,D и мышь - управление капсулой (не смотрите что меш - цилиндр, лень было делать капсулу )
Рад, если чем то помог тебе, TxN
З.Ы.: хочу тебя поблагодарить, за то, что заставил шевелиться мой мозг Если бы не твоя тема, я так бы и не решил проблему с капсулой Так и ждал бы нового урока от АВТОМАТа
Последний раз редактировалось St.AnGer, 21.09.2009 в 11:09.
Причина: Что то говорил про капсулу, а выложил с цилиндром... Спать хотелось, запутался :) TxN, я исправил одну строчечку, если воспользовался моим примером - исправь её у себя.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.09.2009, 19:00
|
#17
|
AnyKey`щик
Регистрация: 22.11.2007
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы очередного новичка
Помогите мну еще раз)
я долго экспериментировал с функциями перемещения, и наконец собрал ту, которая мне более менее нравится ( физический объект не управляет движением игрока, а только мешает пропам проходить сквозь него. мож это конечно глючно, но пока работает)
И в результате с камерой случилась такая странность:
Она стала искажать то,что видит, вытягивать объекты, текстуры в разные стороны. Шары выглядят сплющенными, кубы трапецевидными, и.т.д. я хз, что я сделал, пока корень проблемы не нашел)
|
(Offline)
|
|
21.09.2009, 20:26
|
#18
|
Нуждающийся
Регистрация: 02.09.2007
Сообщений: 50
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Вопросы очередного новичка
Первым в голову лезет мысль про команду CameraZoom... ты ей не пользовался случайно, TxN?
|
(Offline)
|
|
21.09.2009, 20:31
|
#19
|
AnyKey`щик
Регистрация: 22.11.2007
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы очередного новичка
неа, не пользовался, точно)
завтра попробую переписать функцию управления, мож что получится, но выглядит конечно странно, все предметы такие неправильные)
|
(Offline)
|
|
22.09.2009, 22:37
|
#20
|
Нуждающийся
Регистрация: 26.12.2008
Сообщений: 70
Написано 26 полезных сообщений (для 46 пользователей)
|
Ответ: Вопросы очередного новичка
скейл камеры меняется с объектом-родителем.
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо 3dr1aN за это полезное сообщение:
|
|
23.09.2009, 15:19
|
#21
|
AnyKey`щик
Регистрация: 22.11.2007
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы очередного новичка
А вот за это гигантское спасибо! действительно, проблема была в скейле объекта-родителя!)
Большое спасибо)
|
(Offline)
|
|
14.10.2009, 17:59
|
#22
|
AnyKey`щик
Регистрация: 22.11.2007
Сообщений: 13
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы очередного новичка
Народ, есть такой тупой вопрос:
как перестать отрисовывать какое-нибудь изображение?
я знаю, можно просто очистить весь экран и отрисовать все заново, но нет ли способа попроще?
|
(Offline)
|
|
14.10.2009, 18:10
|
#23
|
ПроЭктировщик
Регистрация: 24.07.2009
Сообщений: 142
Написано 52 полезных сообщений (для 103 пользователей)
|
Ответ: Вопросы очередного новичка
Можно использовать переменную флаг, только очищать экран все равно придется.
|
(Offline)
|
|
21.10.2009, 18:39
|
#24
|
AnyKey`щик
Регистрация: 23.01.2009
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы очередного новичка
Здрасти, у меня есть наитупейший вопрос от чайника..
как сделать чтобы машина мялас от ударов
использую pxCreateMetalCloth, из примера с бочками, но у меня корпус машины движется в 2 раза быстрей колёс и вообще улетает кудата..
вот пример http://sunroze.ru/primer.rar
спасибо всем!!
|
(Offline)
|
|
29.10.2009, 23:08
|
#25
|
Бывалый
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений (для 245 пользователей)
|
Ответ: Вопросы очередного новичка
Еще вопрос от новичка - как сделать свет из солнца в космосе? Я расположил точечный источник около солнца, но когда делаю размер солнца большой (> 30) все планеты пропадают....
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
|
(Offline)
|
|
30.10.2009, 00:18
|
#26
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Вопросы очередного новичка
я правильно понял ?
|
(Offline)
|
|
30.10.2009, 00:26
|
#27
|
Бывалый
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений (для 245 пользователей)
|
Ответ: Вопросы очередного новичка
Да, в общем правильно... Могу кинуть код для экспериментов.
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
|
(Offline)
|
|
30.10.2009, 00:58
|
#28
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Вопросы очередного новичка
да былоб здорово
|
(Offline)
|
|
30.10.2009, 01:33
|
#29
|
Бывалый
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений (для 245 пользователей)
|
Ответ: Вопросы очередного новичка
Вот текст: управление wasd и стрелки , 1,2,3 - скорость полета...
SeedRnd MilliSecs()
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
lit=CreateLight(2)
LightColor lit,255,200,50
LightRange lit,300000
Dim sp(99)
k=1
center=CreateSphere(32) ;---------это солнце!!!!!!!!!!!!!!!!!
EntityFX center,1
EntityColor center,255,255,100
c=20; ------------- размер солнца..........
ScaleEntity center,c,c,c
PositionEntity center,0,0,100
;EntityAlpha center,1
;tex=LoadTexture("Picture.bmp")
AmbientLight 0,0,0
For i=0 To 99 ; Это планеты
sp(i)=CreateSphere(32,center)
sc#=Rnd(100,300)
ScaleEntity sp(i),sc#,sc#,sc#
EntityColor sp(i),Rnd(0,200),Rnd(0,200),Rnd(0,200)
EntityShininess sp(i), .2
PositionEntity sp(i),Rnd(-20000,20000),Rnd(-2000,2000),Rnd(-20000,20000)
;EntityTexture sp(i),tex
Next
cam=CreateCamera()
PositionEntity cam,0,0,-40
CameraRange cam,0.1,1000000
time=MilliSecs()
Repeat
;Print time2
;TurnEntity center,.0,.003,.0
If KeyDown(2) k=1
If KeyDown(3) k=30
If KeyDown(4) k=1000
If KeyDown(200) MoveEntity cam,0,0,1000/k
If KeyDown(208) MoveEntity cam,0,0,-1000/k
If KeyDown(203) TurnEntity cam,0,0,1
If KeyDown(205) TurnEntity cam,0,0,-1
If KeyDown(17) TurnEntity cam,-1,0,0
If KeyDown(31) TurnEntity cam,1,0,0
If KeyDown(30) TurnEntity cam,0,1,0
If KeyDown(32) TurnEntity cam,0,-1,0
time2=MilliSecs()-time
time=time +time2
UpdateWorld
RenderWorld
Text 50,50,k
Flip
Until KeyHit(1)
FreeFont f
End
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
|
(Offline)
|
|
30.10.2009, 02:28
|
#30
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Вопросы очередного новичка
и правда пропадают, хз что делать ))
вот мой код с мега-полезными функциями !
Function mouselook(ent)
mxspd#=MouseXSpeed()*Mousespeed
myspd#=MouseYSpeed()*Mousespeed
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
campitch#=EntityPitch(ent)+myspd#
If campitch#<-89 Then campitch#=-89
If campitch#>89 Then campitch#=89
RotateEntity ent,campitch#,EntityYaw(ent)-mxspd#,EntityRoll(ent)
End Function
Function player_move(ent)
If KeyDown(17) MoveEntity ent,0,0,player_speed
If KeyDown(31) MoveEntity ent,0,0,-player_speed
If KeyDown(30) MoveEntity ent,-player_speed,0,0
If KeyDown(32) MoveEntity ent,player_speed,0,0
End Function
Function create_planet()
planet=CreateSphere(32,sun)
size#=Rnd(100,300)
ScaleEntity planet,size#,size#,size#
EntityColor planet,Rnd(0,200),Rnd(0,200),Rnd(0,200)
EntityShininess planet,.2
PositionEntity planet,Rnd(-20000,20000),Rnd(-2000,2000),Rnd(-20000,20000)
End Function
Global mousespeed#=0.5
Global player_speed=10
SeedRnd(MilliSecs())
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
AmbientLight 0,0,0
light=CreateLight(2)
LightColor light,255,200,50
LightRange light,99999
camera=CreateCamera()
CameraRange(camera,0.001,99999999999999)
Global sun=CreateSphere()
EntityFX sun,1
EntityColor sun,255,255,100
size=10
ScaleEntity sun,size,size,size
For i=1 To 100
create_planet()
Next
CameraClsMode(camera,1,1)
CameraZoom(camera,1.4)
Repeat
mouselook(camera)
player_move(camera)
UpdateWorld()
RenderWorld()
Flip()
Until KeyHit(1)
End
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:35.
|