Rubik würfel fliegt auseinander [erledigt]

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Iguan

Betreff: Rubik würfel fliegt auseinander [erledigt]

BeitragMo, Okt 02, 2006 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Bin langsam am verzweifeln... ich schlage mich schon seit 2 Tagen mit dem gleichen Problem herum... Mein Rubik-Würfel fliegt auseinander...

muss wohl in der Funktion "Ebene setzen" passieren... irgendwie klappt das mit den Pivots nicht...


vielleicht könnt ihr mir helfen, wäre seeehr dankbar!!

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
Cam=CreateCamera()
CameraFogMode Cam,1
AmbientLight 255,255,255
MoveEntity Cam,10,8,-10

Global Pivot = CreatePivot()


Dim Wuerfel(27)
p = CreatePlane()
PositionEntity p,0,-2,0
EntityColor p,100,100,255
EntityAlpha p,.5
m = CreateMirror()
EntityParent m,p,0

Ebene = 1


WuerfelBemalen()


Repeat



If Winkel >= 90 Then
  Winkel = 0
  Ebene = Rnd(1,9)
  VorZurück = Rnd(-1,1)
  If VorZurück = 0 Then VorZurück = 1
  ;RotateEntity Pivot,0,0,0
  EbeneSetzen(Ebene) 
End If

Winkel = Winkel + 5
If Ebene < 4 Then RotateEntity Pivot,Winkel*VorZurück,0,0
If Ebene < 7 And Ebene > 3 Then RotateEntity Pivot,0,Winkel*VorZurück,0
If Ebene > 6 Then RotateEntity Pivot,0,0,Winkel*VorZurück


If KeyDown(203) Then CamWinkel# = CamWinkel# - 5
If KeyDown(205) Then CamWinkel# = CamWinkel# + 5

PositionEntity Cam,Sin(CamWinkel#)*30,15,Cos(CamWinkel#)*30
PointEntity Cam,Wuerfel(14)

RenderWorld
Flip
Until KeyDown(1)
End


Function WuerfelBemalen()
   i = 0
For Y = 1 To 3
  For Z = 1 To 3
    For X = 1 To 3
        i = i + 1      
       Wuerfel(i) = CreateCube()
        
        EntityFX Wuerfel(i),2
     
        EntityColor Wuerfel(i),80,80,80
        MoveEntity Wuerfel(i),X*2.08,Y*2.08,Z*2.08
        If Z = 1 Then FlaecheFaerben(1,i,255,0,0)
      If X = 3 Then FlaecheFaerben(2,i,255,255,0)
      If Z = 3 Then FlaecheFaerben(3,i,0,255,0)
      If X = 1 Then FlaecheFaerben(4,i,0,0,255)
      If Y = 3 Then FlaecheFaerben(5,i,255,0,255)
      If Y = 1 Then FlaecheFaerben(6,i,255,255,255)
     
      If X = 1 Then FlaecheFaerben(2,i,80,80,80)
      If X = 2 Then FlaecheFaerben(2,i,80,80,80)
      If X = 2 Then FlaecheFaerben(4,i,80,80,80)
      If X = 3 Then FlaecheFaerben(4,i,80,80,80)   
      If Y = 1 Then FlaecheFaerben(5,i,80,80,80)
      If Y = 2 Then FlaecheFaerben(5,i,80,80,80)
      If Y = 2 Then FlaecheFaerben(6,i,80,80,80)
      If Y = 3 Then FlaecheFaerben(6,i,80,80,80)
      If Z = 1 Then FlaecheFaerben(3,i,80,80,80)
      If Z = 2 Then FlaecheFaerben(3,i,80,80,80)
      If Z = 2 Then FlaecheFaerben(1,i,80,80,80)
      If Z = 3 Then FlaecheFaerben(1,i,80,80,80)     
     
    Next
  Next
Next
End Function

Function FlaecheFaerben(Flaeche,i,R,G,B)
   Surf=GetSurface(Wuerfel(i),1)
   V = (Flaeche-1) * 4     
  VertexColor Surf,V,R,G,B
  VertexColor Surf,V+1,R,G,B
  VertexColor Surf,V+2,R,G,B
  VertexColor Surf,V+3,R,G,B
End Function

Function EbeneSetzen(Ebene)
 
   For i = 1 To 27
     EntityParent Wuerfel(i),0
  Next
 
  FreeEntity Pivot
   Pivot = CreatePivot()
 
  If Ebene = 1 Then
     PositionEntity Pivot,EntityX(Wuerfel(13)),EntityY(Wuerfel(13)),EntityZ(Wuerfel(13))
     EntityParent Wuerfel(1),Pivot, 1
     EntityParent Wuerfel(4),Pivot, 1
     EntityParent Wuerfel(7),Pivot, 1
     EntityParent Wuerfel(10),Pivot, 1
     EntityParent Wuerfel(13),Pivot, 1
     EntityParent Wuerfel(16),Pivot, 1
     EntityParent Wuerfel(19),Pivot, 1
     EntityParent Wuerfel(22),Pivot, 1
     EntityParent Wuerfel(25),Pivot, 1
  EndIf
  If Ebene = 2 Then
     PositionEntity Pivot,EntityX(Wuerfel(14)),EntityY(Wuerfel(14)),EntityZ(Wuerfel(14))
     EntityParent Wuerfel(2),Pivot, 1
     EntityParent Wuerfel(5),Pivot, 1
     EntityParent Wuerfel(8),Pivot, 1
     EntityParent Wuerfel(11),Pivot, 1
     EntityParent Wuerfel(14),Pivot, 1
     EntityParent Wuerfel(17),Pivot, 1
     EntityParent Wuerfel(20),Pivot, 1
     EntityParent Wuerfel(23),Pivot, 1
     EntityParent Wuerfel(26),Pivot, 1
  EndIf
  If Ebene = 3 Then
     PositionEntity Pivot,EntityX(Wuerfel(15)),EntityY(Wuerfel(15)),EntityZ(Wuerfel(15))
     EntityParent Wuerfel(3),Pivot, 1
     EntityParent Wuerfel(6),Pivot, 1
     EntityParent Wuerfel(9),Pivot, 1
     EntityParent Wuerfel(12),Pivot, 1
     EntityParent Wuerfel(15),Pivot, 1
     EntityParent Wuerfel(18),Pivot, 1
     EntityParent Wuerfel(21),Pivot, 1
     EntityParent Wuerfel(24),Pivot, 1
     EntityParent Wuerfel(27),Pivot, 1
  EndIf
  If Ebene = 4 Then
     PositionEntity Pivot,EntityX(Wuerfel(5)),EntityY(Wuerfel(5)),EntityZ(Wuerfel(5))
     For ii = 1 To 9
       EntityParent Wuerfel(ii),Pivot, 1
    Next
  EndIf
  If Ebene = 5 Then
     PositionEntity Pivot,EntityX(Wuerfel(14)),EntityY(Wuerfel(14)),EntityZ(Wuerfel(14))
     For ii = 10 To 18
       EntityParent Wuerfel(ii),Pivot, 1
    Next
  EndIf
  If Ebene = 6 Then
     PositionEntity Pivot,EntityX(Wuerfel(23)),EntityY(Wuerfel(23)),EntityZ(Wuerfel(23))
     For ii = 19 To 27
       EntityParent Wuerfel(ii),Pivot, 1
    Next
  EndIf
  If Ebene = 7 Then
     PositionEntity Pivot,EntityX(Wuerfel(11)),EntityY(Wuerfel(11)),EntityZ(Wuerfel(11))
     EntityParent Wuerfel(1),Pivot, 1
     EntityParent Wuerfel(2),Pivot, 1
     EntityParent Wuerfel(3),Pivot, 1
     EntityParent Wuerfel(10),Pivot, 1
     EntityParent Wuerfel(11),Pivot, 1
     EntityParent Wuerfel(12),Pivot, 1
     EntityParent Wuerfel(19),Pivot, 1
     EntityParent Wuerfel(20),Pivot, 1
     EntityParent Wuerfel(21),Pivot, 1
  EndIf
  If Ebene = 8 Then
     PositionEntity Pivot,EntityX(Wuerfel(14)),EntityY(Wuerfel(14)),EntityZ(Wuerfel(14))
     EntityParent Wuerfel(4),Pivot, 1
     EntityParent Wuerfel(5),Pivot, 1
     EntityParent Wuerfel(6),Pivot, 1
     EntityParent Wuerfel(13),Pivot, 1
     EntityParent Wuerfel(14),Pivot, 1
     EntityParent Wuerfel(15),Pivot, 1
     EntityParent Wuerfel(22),Pivot, 1
     EntityParent Wuerfel(23),Pivot, 1
     EntityParent Wuerfel(24),Pivot, 1
  EndIf
  If Ebene = 9 Then
     PositionEntity Pivot,EntityX(Wuerfel(17)),EntityY(Wuerfel(17)),EntityZ(Wuerfel(17))
     EntityParent Wuerfel(7),Pivot, 1
     EntityParent Wuerfel(8),Pivot, 1
     EntityParent Wuerfel(9),Pivot, 1
     EntityParent Wuerfel(16),Pivot, 1
     EntityParent Wuerfel(17),Pivot, 1
     EntityParent Wuerfel(18),Pivot, 1
     EntityParent Wuerfel(25),Pivot, 1
     EntityParent Wuerfel(26),Pivot, 1
     EntityParent Wuerfel(27),Pivot, 1
  EndIf
End Function
  • Zuletzt bearbeitet von Iguan am Do, Okt 05, 2006 21:51, insgesamt einmal bearbeitet

Christoph

BeitragMo, Okt 02, 2006 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm, das Problem ist das sich beim Rubikwürfel alles irgendwie und in beliebig viele Richtungen drehen lässt.

Meine Lösungsidee (bin mir nicht sicher ob das klappt):

Erstelle doch einfach immer dann einen pivot, wenn du ihn brauchst. Dann movst du den Pivot an die richtige Stelle, setzt die entsprechenden Würfel parent und rotierst sie. Danach machst du freeentity pivot.

Würde das so gehen?

Iguan

BeitragMo, Okt 02, 2006 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
aber das mache ich ja schon so:

siehe function EbeneSetzen...
Code: [AUSKLAPPEN]

   For i = 1 To 27
     EntityParent Wuerfel(i),0
  Next
 
  FreeEntity Pivot
   Pivot = CreatePivot()

Iguan

BeitragDi, Okt 03, 2006 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm... kennt sich denn niemand hier im Forum mit Pivots aus, um mir zu helfen?

ich hab die Drehung auch schon mit
Code: [AUSKLAPPEN]

RotateEntity Pivot,Winkel*VorZurück,0,0,0


versucht, und auch mit
Code: [AUSKLAPPEN]

RotateEntity Pivot,Winkel*VorZurück,0,0,1



aber mein Zauberwürfel fliegt auseinander...
ich kann mir echt nicht erahnen warum.. könntet ihr mir vielleicht einen Denkanstoss geben bitte!

mfg


Iguan
 

Krümel

BeitragDo, Okt 05, 2006 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Würfel fliegt ausseinander weil die Würfelteile von Dir einer festen Position zugeordnet sind.
Z.B. liegen die Würfelteile 1,4,7,10,13,16,19,22,25 anfangs alle in Ebene 1.
Verdrehst Du nun Beispielsweise Ebene 7,8 oder 9 drehst Du ebenfalls Teile aus Ebene 1 heraus. In Ebene 1 liegen also anschliessend Teile mit anderen Indexwerten. Je weiter Du nun den Würfel verdrehst desto wilder vermischst Du deine Würfelteile.

Du musst also vor jedem Verdrehen ermitteln, welche Würfelteile tatsächlich in der entsprechenden Ebene liegen und diese an das Pivot "binden".
Alles klar ? Cool

Iguan

BeitragDo, Okt 05, 2006 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine Antwort Krümel! Das problem konnte ich bereits lösen... Smile aber ein weiteres ist aufgetaucht, siehe "Problem mit Würfel-Würfel Kollision"

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group