rotierende Kugeln

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Netshark

Betreff: rotierende Kugeln

BeitragFr, Jun 09, 2006 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe zwei Kugeln importiert K1, die große Kugel und K2 die Kleine Kugel.

Nun soll K1 an der Innenseite von K2 entlangrollen und zwar so, dass das mit der Lauffläche auch realistisch ist.

Wie macht man das? Hat jemand einen Tipp?
 

Netshark

BeitragFr, Jun 09, 2006 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
das Problem dabei ist wohl auch die Schwerkraft, die immer mach außen gerichtet sein soll.
 

Matthias

BeitragFr, Jun 09, 2006 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay Netshake
Hast du eigentlich schon mal an die Kollisions Bewhle gedacht?
 

Netshark

BeitragFr, Jun 09, 2006 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber hilft mir das da weiter? wie rollen kugeln ohne einfluss von schwerkraft oder masse?
 

Matthias

BeitragFr, Jun 09, 2006 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast mich ziemlich neugirig gemacht das ist doch mal ne Herausfoderung
bin schon fleißig beim Proggen.
 

Matthias

BeitragFr, Jun 09, 2006 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay ich habe mal schnell was geprogt vieleicht hift dir das.

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
Cam=CreateCamera():Lis=CreateLight():Piv=CreatePivot()

CameraClsColor Cam,0,0,255:CameraRange Cam,1,10000
Tex=CreateTexture(256,256):SetBuffer TextureBuffer(Tex)
Radius=50
Color 120,120,120:Rect 0,0,256,256
For Z=0 To 15 Step 2:Color 160,160,160
Rect 0,Z*16,16,16:Next:Image=CreateImage(256,256):GrabImage Image,0,0
For Z=0 To 15 Step 2
DrawImage Image,Z*16,0
Next


PositionEntity Cam,0,0,-10
K1=CreateSphere(32)
K2=CreateSphere(32,Piv)
PositionEntity K2,0,0,Radius

ScaleEntity K1,Radius,Radius,Radius
FlipMesh K1
EntityTexture K1,Tex

Repeat:
TurnEntity Piv,0,-1,0
If KeyDown(203)=1 Then TurnEntity K1,0,-1,0
If KeyDown(205)=1 Then TurnEntity K1,0,1,0
RenderWorld
Flip


Until KeyDown(1)=1
End

BladeRunner

Moderator

BeitragFr, Jun 09, 2006 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Spart euch bitte die Doppelpostings, dafür gibts den Edit-Button. Und die Ciodetags sind auch zum Nutzen vorgesehen Wink
Werds jetzt noch editieren, in Zukunft bitte selbst dran denken.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

RobertR

BeitragFr, Jun 09, 2006 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Matthias,

ich sitze mit Netshark am gleichen Problem! Also was du programmiert hast, sieht genau so aus, wie das, was wir brauchen!

Vielen Dank!
 

Matthias

BeitragFr, Jun 09, 2006 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay Kannst du mir sagen für was man so etwas brauch?
Wollt ihr einb Rollet spiel machen oder was?

Gruß Matthias

Tipp: Map Installer
 

RobertR

BeitragFr, Jun 09, 2006 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ja wir wollen fürs Studium ein Spiel entwickeln (also mehr nen Entwurf) Man soll dann später über Löcher zwischen den Kugeln wandern können. Dabei gehts dann auch noch in Richtung --> mehrere innere Kugeln, verschachtelungen, Kollisionen usw.
Wir haben da noch bissl was vor uns!

Smile
 

Netshark

BeitragSa, Jun 10, 2006 9:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Dank Dir Matthias!

Hab Dein Skript ausprobiert und K1 durch ein Mesh ersetzt. Dabei habe ich gesehen, dass die Kugel nicht rollt, sondern immer gleich ausgerichtet bleibt.

Bietet Blitz da eine Möglichkeit das Abrollen zu simulieren, oder muss man die Geschwindigkeit der Eigenrotation durch Ausprobieren manuell einstellen?
 

Matthias

BeitragSa, Jun 10, 2006 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das ist natürlich Klar.
Bei einem Mesh das nicht Kugelförmig ist kann das auch nicht fuktionieren.
Das ist nur eine Optiche lösung. Must du wohl für dein Studium doch ein Paar Figer mehr bewegen.

Also Ich Würde Die XYZ werte von K2(kleineKugel) Relatief zum Pivot messen ,und mal 2 rechnen dann Prüfen mit EntityColi..... und wenn eine Kollision vorligt die Wert wieder durch 2 rechnen. so ungefär

Oder du Schaust dir mall die Collisions Befehle an da gibt es einen mit drauf Sliden als parameter

Also soetwas habe ich selbst noch nicht ausprobiert. Deshalb alles ohne Gewähr.
 

Netshark

BeitragSa, Jun 10, 2006 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Heißt das, ich kann keine in Maya "selbstgebauten" Kugeln importieren, die sich dann entsprechend drehen, sondern muss in diesem Fall die Rotationsbewegung des Meshes selbst steuern? Oder habe ich Dich falsch verstanden?

Ein anderes Problem ist, dass ich mit meiner Kamera immer y Einheiten über der K2-Oberfläche schweben will und zwar immer senkrecht, wie eben die Perspektive einer Fliege wäre. Hast Du da einen Ansatzpunkt? Die Egoshooter-Perspektive habe ich schon:

Code: [AUSKLAPPEN]

;Relative Mausbewegung holen
x= MouseXSpeed()
y= MouseYSpeed() 
;Blickwinkel der Kamera veraendern
TurnEntity camera, y, -x, 0
;Mauscursor in die Mitte setzen
MoveMouse 400,300

;Tastatur links gieren
If KeyDown(203) Then MoveEntity camera, -0.3, 0, 0
;Tastatur rechts gieren
If KeyDown(205) Then MoveEntity camera, 0.3, 0, 0
;Tastatur vor
If KeyDown(200) Then MoveEntity camera, 0, 0, 0.3
;Tastatur zurueck
If KeyDown(208) Then MoveEntity camera, 0, 0, -0.3
 

Matthias

BeitragSa, Jun 10, 2006 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Schade Das ich das Prg. Maya nicht kenne, aber du kannst nur 3ds,x,B3D,MD2 datein laden. Lade mal bitte datei die du als mesh benutzen wilst im Archiv hoch damit ich mall sehen kann wie viele eken und kannten das ding hat. Habe das Prg. mus ich mal selber testen das Problem.
 

Netshark

BeitragSa, Jun 10, 2006 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe ich gemacht. Um Maya nutzen zu können, konvertiere ich die Dateien mit "DeepExploration" ins 3ds-Format. Das ist auch nur ein Prototyp, die beiden Löcher in der Kugel müssen sein.
 

Matthias

BeitragSa, Jun 10, 2006 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
MaxHin=20
Dim Hinder(MaxHin)
Piv=CreatePivot()
Cam=CreateCamera(Piv):Lis=CreateLight()
Pla=CreatePlane()

PositionEntity Piv,0,10,0:Mit=CreateCylinder(32,1,Piv):
RotateEntity Mit,90,0,0:ScaleEntity Mit,1,8,1:EntityAlpha Mit,.1


PositionEntity Cam,0,0,-10


CameraRange Cam,1,5000
CameraClsColor Cam,0,0,255:TurnEntity Lis,90,0,0
EntityColor Pla,0,150,0
For ZZ=0 To MaxHin-1:Hinder(ZZ)=CreateCube():ScaleEntity Hinder(ZZ),Rnd(1,20),Rnd(1,20),Rnd(1,20)
EntityColor Hinder(ZZ),Rnd(100,255),Rnd(100,255),Rnd(100,255)
PositionEntity Hinder(ZZ),Rnd(200),Rnd(10),Rnd(200)

:Next




Repeat:
Select KeyDown(200):Case 1:MoveEntity Piv,0,0,1:End Select
Select KeyDown(208):Case 1:MoveEntity Piv,0,0,-1:End Select
Select KeyDown(203):Case 1:TurnEntity Piv,0,1,0:End Select
Select KeyDown(205):Case 1:TurnEntity Piv,0,-1,0:End Select
PositionEntity Piv,EntityX(Piv),5,EntityZ(Piv)
Repeat:ColJa=0
For Z=0 To MaxHin-1
Select MeshesIntersect(Mit,Hinder(Z)):Case 1:MoveEntity Piv,0,1,0:ColJa=1:End Select
Next
Until ColJa=0

RenderWorld
Flip
Until KeyDown(1)=1:End


Ich hasse If
 

Netshark

BeitragSa, Jun 10, 2006 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok - habe Deinen Code ausprobiert und ihn auch soweit verstanden. Allerdings kann ich ihn nicht auf die gekrümmte Oberfläche meiner Kamera umsetzen, das ist doch etwas anderes als nur eine Ebene.

Außerdem brauche ich immer die richtige Ausrichtung der Kamera - wie eine Fliege, die in der Kugel rumläuft.

Mein Code bisher:

Code: [AUSKLAPPEN]




Graphics3D 800,600,32,2
camera=CreateCamera():Lis=CreateLight():Piv=CreatePivot()

;Mauszeiger verstecken
HidePointer
 
CameraClsColor camera,0,0,255:CameraRange camera,1,10000
Tex=CreateTexture(256,256):SetBuffer TextureBuffer(Tex)
Radius=100
Color 120,120,120:Rect 0,0,256,256
For Z=0 To 15 Step 2:Color 160,160,160
Rect 0,Z*16,16,16:Next:Image=CreateImage(256,256):GrabImage Image,0,0
For Z=0 To 15 Step 2
DrawImage Image,Z*16,0
Next


PositionEntity camera,0,0,-10
K1=CreateSphere(32)

Global K2=LoadMesh( "kugel2.3ds",Piv )
PositionEntity K2,0,0,Radius

ScaleEntity K1,Radius,Radius,Radius
ScaleEntity K2, 2,2,2

FlipMesh K1
EntityTexture K1,Tex




While Not KeyHit(1)
;TODO: Spieler bewegt sich nur auf Kugelinnenseiten und steht senkrecht


;Relative Mausbewegung holen
x= MouseXSpeed()
y= MouseYSpeed() 
;Blickwinkel der Kamera veraendern
TurnEntity camera, y, -x, 0
;Mauscursor in die Mitte setzen
MoveMouse 400,300

;Tastatur links gieren
If KeyDown(203) Then MoveEntity camera, -0.3, 0, 0
;Tastatur rechts gieren
If KeyDown(205) Then MoveEntity camera, 0.3, 0, 0
;Tastatur vor
If KeyDown(200) Then MoveEntity camera, 0, 0, 0.3
;Tastatur zurueck
If KeyDown(208) Then MoveEntity camera, 0, 0, -0.3




;Kugel rotieren
TurnEntity Piv,0,-1,0



UpdateWorld
RenderWorld
Flip
Wend

End

Rone

BeitragSa, Jun 10, 2006 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

hab mich spaßeshalber auch mal dran versucht... Very Happy
Folgendes ist bei rausgekommen:

Code: [AUSKLAPPEN]

Graphics3D 640,480,16
SetBuffer BackBuffer()

Const radius = 100

;textur
Tex=CreateTexture(256,256):SetBuffer TextureBuffer(Tex)
Color 120,120,120:Rect 0,0,256,256
For Z=0 To 15 Step 2:Color 160,160,160
Rect 0,Z*16,16,16:Next:Image=CreateImage(256,256):GrabImage Image,0,0
For Z=0 To 15 Step 2
DrawImage Image,Z*16,0
Next
SetBuffer BackBuffer()

;Kugel
bli=CreateSphere(64)
ScaleEntity bli,Radius,Radius,Radius
EntityColor bli,Rand(0,255),Rand(0,255),Rand(0,255)
FlipMesh bli
EntityTexture bli,tex

;Licht
light = CreateLight(1)
TurnEntity light,25,00,0
PositionEntity light ,0,1,-1

;Camera
camera = CreateCamera()
PositionEntity camera,0,0,0
TurnEntity camera,25,0,0

;Spieler
player = CreatePivot()
plKugel=CreateSphere()
EntityTexture plKugel,tex
PositionEntity plKugel,0,.75,0
EntityParent plKugel,player
EntityParent light  ,player

While Not KeyHit(1)
   ;Spielergravitation nach außen
   MoveEntity player,0,-1,0
   If EntityDistance(player,bli)>Radius Then
      MoveEntity player,0,1,0
   EndIf
   ;Kameraausrichten
   PositionEntity camera,EntityX(player),EntityY(player)+4,EntityZ(player)-10
   RotateEntity camera,10,0,0
   ;Bewegen   
   If KeyDown (203) Then TurnEntity bli,0,1,0 ,1
   If KeyDown (205) Then TurnEntity bli,0,-1,0,1
   If KeyDown (200) Then
      TurnEntity bli,.5,0,0 ,1
      TurnEntity plKugel,5,0,0
   EndIf
   If KeyDown (208) Then
      TurnEntity bli,-.5,0,0,1
      TurnEntity plKugel,-5,0,0
   EndIf
   If KeyDown(57) Then
      count=count+1
      SpeedX = SpeedX + aX*(0.01666*count)
      SpeedY = SpeedY + aY*(0.01666*count)
      SpeedZ = SpeedZ + aZ*(0.01666*count)   
   Else
      count=0
   EndIf
   UpdateWorld    
   RenderWorld
   Flip
Wend

End



Lauffläche ist zwar nicht richtig, aber man muß ja eigendlich nur noch das richtige Rotationsverhältnis ausrechnen... Wink
 

RobertR

BeitragSa, Jun 10, 2006 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Bizar98,

schaut gut aus, ist aber bissl geschummelt, da die kleine kugel ja nicht rollt, sondern beide kugeln "an einander lang rotieren".

Man bekommt dann ein Problem, wenn man mehrere Kugeln rollen lassen will.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group