AutoIt-only 3D Engine. Mit Farb-Shading, Models aus Dateien, Rotation, Zoom, uvm.

  • Zitat von »YaeroxXO«
    Ist es nicht möglich konstant so eine geile Grafik für Spiele mit AutoIt zu halten?

    Ich behaupte jetzt einfach mal "Nein, ist es nicht."

    Sowas hab ich mir schon gedacht ^^

    Mit deinem Anhang weiß ich gar nichts anzufangen 8| ?( Sorry ^^

    Grüße Yaerox

    Grüne Hölle

  • Mit deinem Anhang weiß ich gar nichts anzufangen 8| ?( Sorry ^^

    Wenn du das Skript öffnest und ein wenig nach unten scrollst findest du relativ schnell die Stelle, an der der Würfel geladen wird. Das Model aus dem Anhang kopierst du einfach in den Ordner und lädst es an dieser Stelle. Die doppelte Dateiendung kannst du wieder entfernen, ich hätte die Datei nur sonst nicht hochladen können.

    PS: Wieso willst du sowas überhaupt mit AutoIt machen? Mit OpenGL (oder Irrlicht, wenn du eher auf Spiele aus bist) ist das doch sowieso viel leichter.

    minx
    Deine Engine ist ja keine UDF oder sowas, wieso ist sie dann aus vielen Funktionen aufgebaut die alle irgendwelche globalen Variablen deklarieren? Und eigenartigerweise ändert sich der Titel des aktiven Fensters, auch wenn das nicht die GUI von AutoIt ist.

  • Nun Funktionen dienen bekanntlich dazu Code zusammenzufassen. Hier deklariert nur eine Funktion globale Variablen, das ist logischerweise die Startup Funktion. Nur die Hauptschleife ist wichtig, dort kann ist der ganze Programmablaut mittels der Funktionen dargestellt und man kann einzelne Arbeitsschritte an/ausschalten durch auskommentieren.

    Klar kann man die Funktionen auch für andere Skripte verwenden. Rotation, Translation etc. lassen sich doch mit wenig Aufwand auch für eigene Programme als "UDF" nutzen.

    Der Titel ändert sich, da ich schlichtweg zu faul war die korrekte Referenz anzugeben. Daher ändert es immer den Titel des aktiven Fensters ^^ .

    Und was heißt hier Irrlicht :D . Für solch simple Darstellungen wäre OpenGL die viel viel kompaktere und wahrscheinlich schnellere Variante. ^^

    James Der Knot ist cool, sieht vor allem mit der GDI+ Version cool aus  :thumbup: (ist doch garantiert aus einer OBJ Datei konvertiert oder?) Klappt aber nicht so ganz mit dem Culling  :whistling:

    2 Mal editiert, zuletzt von minx (9. September 2013 um 13:20)

  • Und was heißt hier Irrlicht :D . Für solch simple Darstellungen wäre OpenGL die viel viel kompaktere und wahrscheinlich schnellere Variante. ^^

    Bin ja auch eher für OpenGL. ^^

    Der Knot ist cool, sieht vor allem mit der GDI+ Version cool aus  :thumbup: (ist doch garantiert aus einer OBJ Datei konvertiert oder?) Klappt aber nicht so ganz mit dem Culling  :whistling:

    Mit Blender (bzw. einem Addon) erstellt, als OBJ Datei exportiert und mit AutoIt in dein Format umgewandelt.

    Edit: Schade, dass ich die 150 MB high poly Version nicht laden kann, würde garantiert gut aussehen. :D

    AutoIt Version (Prod): 3.3.14.2

    AutoIt Version (Beta): 3.3.9.5

    ausgewählte Skripte: Chatbot, komplexe Zahlen (UDF)

    Einmal editiert, zuletzt von James (9. September 2013 um 13:29)

  • Edit: Schade, dass ich die 150 MB high poly Version nicht laden kann, würde garantiert gut aussehen. :D


    Made my day :D
    Es soll auch Supercomputer geben die n halbes Jahr das Universum simulieren. Die packen es villeicht ein 150MB Modell in AutoIt zu laden :)

    Was ich immer wieder interessant finde: "geile Grafik" ist sowas von subjektiv.
    Wenn ihr ein 3D Spiel mit allem drum und dran bauen wollt, besorgt euch die UE3 (gibts gratis) und versucht euer Glück.
    Mit AutoIt wird man niemals auf den Stand kommen. Da Hilft auch warten nicht. Also ran an die UE !

    lg
    Mars


  • Made my day :D
    Es soll auch Supercomputer geben die n halbes Jahr das Universum simulieren. Die packen es villeicht ein 150MB Modell in AutoIt zu laden :)

    Schön, wenn ich deinen Tag machen konnte. :D

    Solange man Arrays verwendet geht das gar nicht, dafür ist das Limit einfach zu niedrig. Ich hätte allerdings einen Torusknoten mit 40960 Vertices sowie einen Loader für OBJ Dateien im Angebot. :D Ich weiß nur noch nicht ob der Loader damit funktioniert, da es bei 0 FPS etwas dauert bis ein Bild angezeigt wird... (mit einem kleineren Model funktioniert es aber)

    Die Zeile Global $PIover180=((ATan(1)*4)/180), ... in der Funktion StartUp muss dafür allerdings angepasst werden, 100000 sollte als Arraygröße reichen.

    MfG James

    Wavefront OBJ Loader (für die GDI Version)
    [autoit]

    Func LoadOBJ($sFilename, $iColor)
    Local $sData = StringReplace(FileRead($sFilename), @CR, "")
    Local $T1 = StringRegExp($sData, "(?m)^v (.+?)$", 3), $i, $T2, $j
    $VerNum = UBound($T1)-1
    For $i = 0 To $VerNum
    $T2 = StringSplit($T1[$i], " ", 2)
    For $j = 0 To 2
    $Ver[$i][$j] = $T2[$j]
    Next
    Next
    $T1 = StringRegExp($sData, "(?m)^f (.+?)$", 3)
    $LineNum = UBound($T1)-1
    For $i = 0 To $LineNum
    $Lin[$i][0] = 4 ; Blender arbeitet nur mit Rechtecken
    $T2 = StringSplit($T1[$i], " ")
    For $j = 1 To 4
    $Lin[$i][$j] = $T2[$j]-1 ; Blender startet mit den Vertices bei 1, minx bei 0
    Next
    ; $iColor = 0xRRGGBB
    $Lin[$i][21] = BitShift($iColor, 16)
    $Lin[$i][22] = BitAND(BitShift($iColor, 8), 0xFF)
    $Lin[$i][23] = BitAND($iColor, 0xFF)
    Next
    ConsoleWrite('!> "' & $sFilename & '" (' & $VerNum+1 & '/' & $LineNum+1 & ')' & @LF)
    EndFunc ; by James

    [/autoit]
  • Solange man Arrays verwendet geht das gar nicht, dafür ist das Limit einfach zu niedrig. Ich hätte allerdings einen Torusknoten mit 40960 Vertices sowie einen Loader für OBJ Dateien im Angebot.

    Ab damit in eine GLList, kompilieren und dann noch ein formschönes Plugin draus machen, damit wirs in der nächsten OpenGL SDK nutzen können :thumbup:

  • Was genau meinst du mit Plugin?

    Spoiler anzeigen

    ungetestet und hässlich

    [autoit]

    Func LoadOBJ($sFilename, $fR, $fG, $fB)
    Local $Ver, $VerNum, $LineNum
    Local $sData = StringReplace(FileRead($sFilename), @CR, "")
    ; Vertices laden
    Local $T1 = StringRegExp($sData, "(?m)^v (.+?)$", 3), $i, $T2, $j, $T3
    $VerNum = UBound($T1)-1
    ReDim $Ver[$VerNum+1][3]
    For $i = 0 To $VerNum
    $T2 = StringSplit($T1[$i], " ", 2)
    For $j = 0 To 2
    $Ver[$i][$j] = $T2[$j]
    Next
    Next
    ; GLList erstellen
    Local $List = glGenLists(1)
    glNewList($List, $GL_COMPILE)
    glBegin($GL_QUADS)
    glColor3f($fR, $fG, $fB)
    ; Flächen laden und zeichnen
    $T1 = StringRegExp($sData, "(?m)^f (.+?)$", 3)
    $LineNum = UBound($T1)-1
    For $i = 0 To $LineNum
    $Lin[$i][0] = 4 ; Blender arbeitet nur mit Rechtecken
    $T2 = StringSplit($T1[$i], " ")
    For $j = 1 To 4
    $T3 = $Ver[$T2[$j]-1] ; Blender startet mit den Vertices bei 1, das Array bei 0
    glVertex3f($T3[0], $T3[1], $T3[2])
    Next
    Next
    ; Ende
    glEnd()
    glEndList()
    ConsoleWrite('!> "' & $sFilename & '" (' & $VerNum+1 & '/' & $LineNum+1 & ')' & @LF)
    Return $List
    EndFunc ; by James

    [/autoit]