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=9214)

St.AnGer 21.09.2009 00:49

Ответ: Вопросы очередного новичка
 
Попутно вспомнил что для игрока нужно исползовать капсулу. Вот за 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 :)

З.Ы.: хочу тебя поблагодарить, за то, что заставил шевелиться мой мозг :) Если бы не твоя тема, я так бы и не решил проблему с капсулой :) Так и ждал бы нового урока от АВТОМАТа :)

TxN 21.09.2009 19:00

Ответ: Вопросы очередного новичка
 
Помогите мну еще раз)
я долго экспериментировал с функциями перемещения, и наконец собрал ту, которая мне более менее нравится ( физический объект не управляет движением игрока, а только мешает пропам проходить сквозь него. мож это конечно глючно, но пока работает)

И в результате с камерой случилась такая странность:
Она стала искажать то,что видит, вытягивать объекты, текстуры в разные стороны. Шары выглядят сплющенными, кубы трапецевидными, и.т.д. я хз, что я сделал, пока корень проблемы не нашел)

St.AnGer 21.09.2009 20:26

Ответ: Вопросы очередного новичка
 
Первым в голову лезет мысль про команду CameraZoom... ты ей не пользовался случайно, TxN?

TxN 21.09.2009 20:31

Ответ: Вопросы очередного новичка
 
неа, не пользовался, точно)
завтра попробую переписать функцию управления, мож что получится, но выглядит конечно странно, все предметы такие неправильные)

3dr1aN 22.09.2009 22:37

Ответ: Вопросы очередного новичка
 
скейл камеры меняется с объектом-родителем.

TxN 23.09.2009 15:19

Ответ: Вопросы очередного новичка
 
А вот за это гигантское спасибо! действительно, проблема была в скейле объекта-родителя!)
Большое спасибо)

TxN 14.10.2009 17:59

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

Arles 14.10.2009 18:10

Ответ: Вопросы очередного новичка
 
Можно использовать переменную флаг, только очищать экран все равно придется.

coolmen06 21.10.2009 18:39

Ответ: Вопросы очередного новичка
 
Здрасти, у меня есть наитупейший вопрос от чайника..
как сделать чтобы машина мялас от ударов
использую pxCreateMetalCloth, из примера с бочками, но у меня корпус машины движется в 2 раза быстрей колёс и вообще улетает кудата..

вот пример http://sunroze.ru/primer.rar

спасибо всем!!

Morganolla 29.10.2009 23:08

Ответ: Вопросы очередного новичка
 
Еще вопрос от новичка - как сделать свет из солнца в космосе? Я расположил точечный источник около солнца, но когда делаю размер солнца большой (> 30) все планеты пропадают.... :(

NitE 30.10.2009 00:18

Ответ: Вопросы очередного новичка
 
Вложений: 1
я правильно понял ?

Morganolla 30.10.2009 00:26

Ответ: Вопросы очередного новичка
 
Да, в общем правильно... Могу кинуть код для экспериментов. :)

NitE 30.10.2009 00:58

Ответ: Вопросы очередного новичка
 
да былоб здорово

Morganolla 30.10.2009 01:33

Ответ: Вопросы очередного новичка
 
Вот текст: управление 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


NitE 30.10.2009 02:28

Ответ: Вопросы очередного новичка
 
и правда пропадают, хз что делать ))
вот мой код с мега-полезными функциями !
Код:

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



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

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