
MfG Falko
Code: Alles auswählen
Structure Drawing3D_Object
StructureUnion
Type.i
Cluster.Drawing3D_Cluster ;<<<<<<<<< dieses Element
Line.Drawing3D_Line
Triangle.Drawing3D_Triangle
EndStructureUnion
EndStructure
Code: Alles auswählen
With *use
\p11=CosZ*CosY : \p21=-SinZ : \p31=-SinY
\P12=SinZ : \p22=CosZ*CosX : \p32=-SinX
\p13=SinY : \p23=SinX : \p33=CosY*CosX
EndWith
Code: Alles auswählen
*Use\p11 = CosY*CosZ : *Use\p12 = -CosY*SinZ : *Use\p13 = SinY
*Use\p21 = SinX*SinY*CosZ+CosX*SinZ : *Use\p22 = -SinX*SinY*SinZ+CosX*CosZ : *Use\p23 = -SinX*CosY
*Use\p31 = -CosX*SinY*CosZ+SinX*SinZ : *Use\p32 = CosX*SinY*SinZ+SinX*CosZ : *Use\p33 = CosX*CosY
ja aber was genau mache Ich da Falsch ?Also die Matrix die jetzt noch im Post von dir steht ist falsch.
da Habe Ich das ganze Web durchsucht und auch viel gefunden nur leider wieder alles in der Mathesprache wo bei mir dann der Kopf RauchtTransformationsmatrix nach einigen Multiplikationen wieder "orthogonalisieren"
Code: Alles auswählen
EnableExplicit
Structure Vector
x.f
y.f
z.f
EndStructure
Structure surface
xp.f : yp.f :image.i
scale.f
List vertex.Vector()
EndStructure
Structure Matrix3D
p11.f : p21.f : p31.f
p12.f : p22.f : p32.f
p13.f : p23.f : p33.f
EndStructure
OpenWindow(0,0,0,800,600,"Test Grafik ausgaben !",#PB_Window_SystemMenu |#PB_Window_ScreenCentered )
ImageGadget(0,0,0,800,600,0)
Define image=CreateImage(#PB_Any,800,600)
Define testm.Matrix3D,sur1.surface
sur1\scale=100 :sur1\xp=400 : sur1\yp=300
Procedure addvertex(*use.surface,x.f,y.f,z.f)
AddElement(*use\vertex())
*use\vertex()\x=x* *use\scale
*use\vertex()\y=y* *use\scale
*use\vertex()\z=z* *use\scale
EndProcedure
Procedure.i Draw_Rotate3D(*Use.Vector, *Source.Matrix3D)
Protected Buffer.Vector
CopyMemory(*Use, @Buffer, SizeOf(Vector))
*Use\Z = Buffer\z**Source\p33 + Buffer\Y**Source\p32 + Buffer\x**Source\p31
*Use\Y = Buffer\z**Source\p23 + Buffer\Y**Source\p22 + Buffer\x**Source\p21
*Use\X = Buffer\z**Source\p13 + Buffer\Y**Source\p12 + Buffer\x**Source\p11
ProcedureReturn *Use
EndProcedure
Procedure.i Rotation(*use.Matrix3D,x.f,y.f,z.f)
Protected CosZ.f = Cos(Z), CosY.f = Cos(Y), CosX.f = Cos(X)
Protected SinZ.f = Sin(Z), SinY.f = Sin(Y), SinX.f = Sin(X)
; *Use\p11 = CosY*CosZ : *Use\p12 = -CosY*SinZ : *Use\p13 = SinY
; *Use\p21 = SinX*SinY*CosZ+CosX*SinZ : *Use\p22 = -SinX*SinY*SinZ+CosX*CosZ : *Use\p23 = -SinX*CosY
; *Use\p31 = -CosX*SinY*CosZ+SinX*SinZ : *Use\p32 = CosX*SinY*SinZ+SinX*CosZ : *Use\p33 = CosX*CosY
With *use
\p11=CosZ*CosY : \p21=-SinZ : \p31=-SinY
\P12=SinZ : \p22=CosZ*CosX : \p32=-SinX
\p13=SinY : \p23=SinX : \p33=CosY*CosX
EndWith
ProcedureReturn *use
EndProcedure
Procedure draw(*this.surface)
Shared testm
Protected bx.f,by.f,x.f,y.f,z.f
Box(0,0,800,600,$000000)
bx=*this\vertex()\x : by=*this\vertex()\y
ForEach *this\vertex()
x=*this\vertex()\x : y=*this\vertex()\y
LineXY(*this\xp+bx,*this\yp+by,*this\xp+x,*this\yp+y)
bx=x : by=y
Draw_Rotate3D(*this\vertex(), testm)
Next
EndProcedure
addvertex(sur1,-1,1,0)
addvertex(sur1,1,1,0)
addvertex(sur1,1,-1,0)
addvertex(sur1,-1,-1,0)
Rotation(testm,0.01,0.0,0.002)
Repeat
If StartDrawing(ImageOutput(image))
draw(sur1)
StopDrawing()
EndIf
SetGadgetState(0,ImageID(image))
Until WindowEvent()=#PB_Event_CloseWindow