Der Titel sagt alles. Die Engine ist nur eine Zeile groß und kann 3D Punkte mit Rotation usw. in 2D Punkte umrechnen. War eigentlich nur ein Teil eines Skripts, ist aber so schon ganz witzig.
Haph phun!
Spoiler anzeigen
$lTheta = 0
$lAlt = 0
$lSize = 1000
$lperspective = 10000
Opt("GUIOnEventMode", 1)
GUICreate("This", 500, 500,-1,-1,Default,34078728)
GUISetBkColor(0)
Global $hGR = GUICtrlCreateGraphic(0,0)
GUISetState()
GUISetOnEvent(-3, "done")
Local $Timer = TimerInit()
AdlibRegister("main", 50)
While 1
WEnd
Func main()
$b = $hGR
$hGR = GUICtrlCreateGraphic(0,0)
GUICtrlSetGraphic($hGR, 8, 0xFFFFFF)
For $zPos = -2 To 2
$zOffset = $zPos * 40
For $yPos = -2 To 2
$yOffset = $yPos * 40
For $xPos = -2 To 2
$Size = 15
$xOffset = $xPos * 40
PlotLine($xOffset - $Size, $yOffset - $Size, $zOffset + ($Size-1), $xOffset + $Size, $yOffset - $Size, $zOffset + ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset + $Size, $yOffset - $Size, $zOffset + ($Size-1), $xOffset + $Size, $yOffset + $Size, $zOffset + ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset - $Size, $yOffset + $Size, $zOffset + ($Size-1), $xOffset + $Size, $yOffset + $Size, $zOffset + ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset - $Size, $yOffset - $Size, $zOffset + ($Size-1), $xOffset - $Size, $yOffset + $Size, $zOffset + ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset - $Size, $yOffset - $Size, $zOffset - ($Size-1), $xOffset + $Size, $yOffset - $Size, $zOffset - ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset + $Size, $yOffset - $Size, $zOffset - ($Size-1), $xOffset + $Size, $yOffset + $Size, $zOffset - ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset - $Size, $yOffset + $Size, $zOffset - ($Size-1), $xOffset + $Size, $yOffset + $Size, $zOffset - ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset - $Size, $yOffset - $Size, $zOffset - ($Size-1), $xOffset - $Size, $yOffset + $Size, $zOffset - ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset - $Size, $yOffset - $Size, $zOffset + ($Size-1), $xOffset - $Size, $yOffset - $Size, $zOffset - ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset + $Size, $yOffset - $Size, $zOffset + ($Size-1), $xOffset + $Size, $yOffset - $Size, $zOffset - ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset - $Size, $yOffset + $Size, $zOffset + ($Size-1), $xOffset - $Size, $yOffset + $Size, $zOffset - ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
PlotLine($xOffset + $Size, $yOffset + $Size, $zOffset + ($Size-1), $xOffset + $Size, $yOffset + $Size, $zOffset - ($Size-1), $lTheta, $lAlt, $lsize, $lperspective)
Next
Next
Next
GUICtrlSetGraphic($hGR, 22)
GUICtrlDelete($b)
$lAlt = $lAlt + .1
If $lAlt >= 360 Then $lAlt = $lAlt - 360
$lTheta = $lTheta + .3
If $lTheta >= 360 Then $lTheta = $lTheta - 360
If $lsize < 15000 Then $lsize = $lsize + 100
EndFunc
Func PlotLine($x1, $y1, $z1, $x2, $y2, $z2, $Theta, $Alt, $Size, $Perspective)
Local $Phi = 90 - $Alt, $cX = 250, $cY = 250,$Sin_Theta = Sin($Theta),$Cos_Theta = Cos($Theta),$Sin_Phi = Sin($Phi),$Cos_Phi = Cos($Phi),$vX = -$x1 * $Sin_Theta + $y1 * $Cos_Theta,$vY = -$x1 * $Cos_Theta * $Cos_Phi - $y1 * $Sin_Theta * $Cos_Phi + $z1 * $Sin_Phi, $vZ = -$x1 * $Cos_Theta * $Sin_Phi - $y1 * $Sin_Theta * $Sin_Phi - $z1 * $Cos_Phi + $Perspective,$pX1 = $cX + $Size * $vX / $vZ,$pY1 = $cY - $Size * $vY / $vZ,$vX = -$x2 * $Sin_Theta + $y2 * $Cos_Theta,$vY = -$x2 * $Cos_Theta * $Cos_Phi - $y2 * $Sin_Theta * $Cos_Phi + $z2 * $Sin_Phi,$vZ = -$x2 * $Cos_Theta * $Sin_Phi - $y2 * $Sin_Theta * $Sin_Phi - $z2 * $Cos_Phi + $Perspective,$px2 = $cX + $Size * $vX / $vZ,$pY2 = $cY - $Size * $vY / $vZ
GUICtrlSetGraphic($hGR, 6, $pX1, $pY1)
GUICtrlSetGraphic($hGR, 2, $px2, $py2)
EndFunc
Func done()
Exit
EndFunc