Zoomender Rotierender Würfel aus Würfeln (eigene "Engine")

  • 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
    [autoit]

    $lTheta = 0
    $lAlt = 0
    $lSize = 1000
    $lperspective = 10000

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    GUICreate("This", 500, 500,-1,-1,Default,34078728)
    GUISetBkColor(0)
    Global $hGR = GUICtrlCreateGraphic(0,0)
    GUISetState()
    GUISetOnEvent(-3, "done")

    [/autoit] [autoit][/autoit] [autoit]

    Local $Timer = TimerInit()
    AdlibRegister("main", 50)
    While 1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Func done()
    Exit
    EndFunc

    [/autoit]