3D: Rotationsproblem eventuell falscher Origin?

  • GM 6

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 3D: Rotationsproblem eventuell falscher Origin?

    Hallöchen,

    Vorne weg: !!ES HANDELT SICH UM EIN 3D PROBLEM!!

    Ich hab ein Problem...
    Ich möchte mein Programm so programmieren dass mein Modell sich bei Tastendruck um die eigene Achse dreht
    habe die Suche angewendet, hab da auch was gefunden und bei mir übertragen aber
    funktioniert trotzdem nicht :huh:
    informationen:

    Ich hab zwei Objekte:
    obj_control (macht die kamera und sonstiges...)
    obj_rocket (lässt ein mit Anim 8 or gebasteltes objekt zeichnen (in der mitte des Screens)

    so sieht das von obj_rocket gezeichnete objekt aus: (wie ein Torpedo-UBOOT-Raketen mix :D

    oder so:


    Ich poste mal den Code der beiden Objekte:

    obj_control: Das Create-Event:

    GML-Quellcode

    1. d3d_start();
    2. d3d_set_perspective(true)
    3. d3d_set_projection_perspective(x,y,0,0,270)

    obj_rocket: Das Create-Event:

    GML-Quellcode

    1. d3d_start();
    2. rotation_z=0//die rotationsvariable
    3. model = d3d_model_create();
    4. d3d_model_load(model,"runner.d3d");//mein mix-modell
    5. d3d_transform_set_rotation_x(90)//weil es sonst auf dem Kopf steht ;)

    obj_rocket: Das Draw-Event:

    GML-Quellcode

    1. d3d_model_draw(model,room_width/2,32,room_height/2,-1)//also in der Mitte

    obj_rocket: Das Key-Press-Left (!ohne den roten Pfeil!)-Event:

    GML-Quellcode

    1. rotation_z+=1
    2. d3d_transform_add_rotation_z(rotation_z)


    wenn ich es ausführe ist es so:
    es dreht sich zwar um sich herum aber weit von seiner achse entfernt
    also nicht um die achse sondern mit einem viel grösserem radius
    ausserdem wird es immer schneller und irgendwann nur noch eine schnelle "weit-um-die-eigentliche-achse-schnell-dreh-rotation"

    Ausserdem:
    Ich verstehe nicht warum der GameMaker mein Modell
    weiß zeichnet obwohl es im anim 8 or so schön glänzig
    aussieht ^^ vermute das hat was mit Licht zutun
    hab mir das tutorial für licht in 3D angeguckt und wollte es in mein Programm übertragen es funktioniert
    aber nicht ;(

    mein screen :

    meinscreen.jpeg

    naja schauts euch bitte mal an
    thx DSS
    Ihc hab so voll den ij
  • Zur Sache mit dem Licht:

    Der Gamemaker unterstützt nur Flat- und Smooth-Shading, kein Per Pixel Lighting wie du es dir wahrscheinlich erhoffst. Alle Informationen welche diesen Bereich betreffen gehen also verloren. Weiß deswegen, weil du ihm keine Textur zugewiesen hast.

    Zu deinem eigentlichen Problem:

    Ich tu es ja ungern, aber ich muss leider auf eines meiner eigenen Tutorials verweisen, da ich es dir jetzt auch nicht besser erklären kann, als ich es dort formuliert habe.
    Es ist nur so, dass dein Screenshot, welcher im *.bmp Format erst heruntergeladen werden muss, überhaupt keine Aussagekraft hat. Dein Code ist mir um diese Uhrzeit zu verworren, ich weiß gar nicht wie du auf solche Ideen kommst. Sachen wie "d3d_transform" sollten sich im Draw Event befinden, nicht irgendwo anders, wo es keinen Sinn macht.

    Ich mach' mal einen Vorschlag:

    GML-Quellcode

    1. d3d_transform_set_identity();
    2. d3d_transform_add_rotation_x(90);
    3. d3d_transform_add_rotation_z(rotation_z);
    4. d3d_transform_add_translation(x,y,0);
    5. d3d_model_draw(model,room_width/2,32,room_height/2,-1)
    6. d3d_transform_set_identity();


    Ob das so geht, weiß ich nicht, probier es aus. Am besten ohne C&P, da müssen sicher noch einige Sachen angepasst werden, sonst kannst du ja nochmal nachfragen.