d3d_draw_floor > Beleuchtung von unten nicht möglich???

  • GM 8
  • d3d_draw_floor > Beleuchtung von unten nicht möglich???

    Hallo Leute!

    Ich probier mich ein wenig mit den 3D Funktionen des GMs rum. Nun, ich habe ein kleines Problem was die funktion d3d_draw_floor angeht.

    Ich zeichne mit volgendem Code eine Decke (jaja... aus dem Yoyogames example...)

    GML-Quellcode

    1. //zeichne decke
    2. {
    3. x1 = x+16;
    4. x2 = x-16;
    5. y1 = y+16;
    6. y2 = y-16;
    7. z = 0;
    8. tex_f = background_get_texture(texture_floor);
    9. tex_c = background_get_texture(texture_ceiling);
    10. }

    GML-Quellcode

    1. d3d_draw_floor(x1,y1,z,x2,y2,z,tex_c,1,1);


    Nun... Ich beschäftige mich ein wenig mit Blender und weiss daher das die Flächen immer eine richtung besitzen in der sie gezeichnet werden (Face-Direction) Dies ist ja auch beim GM der Fall.

    Das Problem: Ich kann die zeichenrichtung der Fläche NICHT umdrehen! Beim GM sollte man die Vorzeichen der 1er und 2er Koordinaten einfach vertauschen (also x1 wird zu x2 und x2 zu x1, usw...)
    Dies sollte die Fläche "umgekehrt" zeichnen und somit auch die Richtung in die es gedrawt wird. Das problem: Das funktioniert nicht. Egal was ich mit den Koordinaten anstelle, es wird immer "nach oben" gezeichnet. (Dies ist nur der fall wenn man 3D Lichter eingeschaltet hat.) Von unten sieht man garnichts (Die decke wird nicht beleuchtet.).

    Ist das irgendeine eigenart der Funktion, oder liegt das an mir?

    (PS: Die koordinaten die hier stehen wurden von mir schon umgedreht. Der Code sollte also funktionieren, dies tut er aber nicht.)

    lg

    LEWA
  • Wie wäre es, wenn du ein einen Block nimmst?
    ODER gleich ein Modell?
    Da funktioniert die Beleuchtung immer.
    (Wenn du ein statisches Modell machst, sparst du etwas Rechenaufwand ein.)

    Wie sich da mit dem Licht beim Floor verhält, weis ich nicht.
    Ist wahrscheinlich eine dieser Gm-Geschichten...
  • Es könnte auch sein, dass das "Dach" einfach zu groß ist, um beleuchtet zu werden.

    Angenommen, das Licht ist dieser orange Punkt, das Gitter das Dach ( mit den Eckpunkten ) und der Kreis der Radius des Lichts.

    Das Licht kommt nicht an die Eckpunkte heran und sie bleiben somit dunkel.

    - Tobi97
    8|
  • Also die Flächen sind sichtbar aber nicht beleutet, hab ich das richtig verstanden?
    Wie ist es, wenn du culling ausstellst?
    Ist das Licht vielleicht über den Floors oder so?
    Kannst du den Fehler reproduzieren, also mit einer frischen Datei anfangen?
    Wenn du die anhängen könntest, wäre das sehr nett :)
  • ja, sicher. Habe die Datei eben mal angehängt.

    Wenn ihr die Datei startet werdet ihr bemekren dass die Decke nicht beleuchtet wird. (mit der + und - taste kann man in der z-Achse höher, und tiefer gehen.)

    Den Drawbefehl für die Decke findet ihr in "obj_floor" das Objekt zeichnet nähmlich die Decke und den Boden in einem Draw event gleichzeitig.

    /Edit: Upps! Falsche datei. X(
    Dateien
    • light problem.zip

      (78,69 kB, 100 mal heruntergeladen, zuletzt: )
  • Habe es gerade mal getestet und entgegen meiner Erwartung scheint es wohl wirklich so zu sein, dass das Vertauschen von Koordinaten bei d3d_draw_floor nichts bewirkt und die Normalen immer nach oben zeigen (im Gegensatz zu d3d_draw_wall). Es bleibt dir also nichts anderes übrig als auf diese Funktion zu verzichten und stattdessen die d3d_vertex_normal Funktionen zu verwenden.

    EDIT: zu spät, Soul Reaver's Lösung ist natürlich noch einfacher.
  • hi
    also ich weiß ja nicht wie das im GM8 aussieht, aber im 6er den ich benutze erstelle ich decken mit der floor funktion ohne probleme...
    hier mal mein code

    GML-Quellcode

    1. d3d_set_lighting(global.lighting) //global.lighting = 1
    2. d3d_draw_block(x,y,z, x+32,y+32, z+2, texFloor,1,1) // boden
    3. d3d_draw_block(x,y,RoomHeight, x+32,y+32, RoomHeight+2, texCeiling,1,1) // decke; RoomHeight = 128

    und das kommt dabei raus..
    Bilder
    • ceiling.jpg

      165,49 kB, 1.920×1.080, 123 mal angesehen