Rubik würfel fliegt auseinander [erledigt]
Übersicht

![]() |
IguanBetreff: Rubik würfel fliegt auseinander [erledigt] |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ? ![]() |
||
![]() |
Iguan |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für deine Antwort Krümel! Das problem konnte ich bereits lösen... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group