D3D Lighting problem

  • GM 8

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

  • D3D Lighting problem

    Hallo zusammen.

    Ich tacker mir gerade ein 3D Spiel zusammen, oder ich tu zumindest so, als haett ich'ne Ahnung von.

    Und da bin ich auf flogendes Furunkel getroffen:

    Ein d3d model wird vom Licht anders gerendert als das andere d3d Model... was ich damit genau meine, weis ich nicht. Aber irgendwie so funktioniert das hier: - Ich setze mein Licht, all die Transformationen, zeichne das Model, und ein Model ist in der Dimension 32.000 und das andere in 8.000, also muss ich das 8.000er Model vergroessern mit Scale Funktionen. Es ist hinterher dunkler als das nicht-modifizierte 32.000er Modell. Ich wuenscht ich koennt euch ein Screenshot geben, aber ich schaeme mich zu sehr. :P

    nochmal: das Licht hat irgendwie einen Einfluss auf die tatsaechliche Groesse des Modell's

    Muss ich irgendwas beachten, bei der Reihenfolge, indem ich die Zeichnungs-Funktionen setze?

    Vielen Dank im Vorraus.
  • ...hm...vielleicht hilft das hier mehr, um mein Problem zu beschreiben:

    also, das hier passiert, wenn ich das spiel "fehlermeldungsfrei" durch die simulation schicke...



    was mich darann stoert, ist dass das meine Wache ziemlich dunkel ist, so als wuerde das Licht nicht wirklich projeziert, so wie es sein sollte... koennte. Mein Spielermodel (rechts, mittig, im Bild) sieht dagegen schon etwas beleuchteter aus, so wie das Levelset/-modell auch beleuchtet ist.

    ich zeichne die Wache wie folgt im Draw Event:

    Quellcode

    1. draw_set_color(c_white);
    2. d3d_set_lighting(true);
    3. d3d_light_enable(0,true);
    4. d3d_light_enable(1,true);
    5. d3d_transform_set_identity();
    6. d3d_transform_add_scaling(7,7,7);
    7. d3d_transform_add_rotation_x(-90);
    8. d3d_transform_add_rotation_z(direction);
    9. d3d_transform_add_translation(x,y,-20);
    10. d3d_model_draw(modhexguardbody[mod_index_body],0,0,0,texhexguardbody);
    11. d3d_model_draw(modhexguardhair[mod_index_body],0,0,0,texhexguardhair);
    12. d3d_transform_set_identity();
    13. d3d_light_enable(0,false);
    14. d3d_light_enable(1,false);
    15. d3d_set_lighting(false);
    Alles anzeigen


    und den Spieler so:

    Quellcode

    1. draw_set_color(c_white);
    2. d3d_set_lighting(true);
    3. d3d_light_enable(0,true);
    4. d3d_light_enable(1,true);
    5. d3d_transform_set_identity();
    6. d3d_transform_add_scaling(0.75,0.75,0.75);
    7. d3d_transform_add_rotation_x(-90);
    8. d3d_transform_add_rotation_z(zro);
    9. d3d_transform_add_translation(x,y,-20);
    10. d3d_model_draw(setrm01playerbody[mod_index_body],0,0,0,texrm01playerbody);
    11. texrm01playerhead = sprite_get_texture(global.sprrm01playerhead,cc_face);
    12. d3d_model_draw(setrm01playerhead[mod_index_body],0,0,0,texrm01playerhead);
    13. texrm01playerhair01 = sprite_get_texture(global.sprrm01playerhair01,cc_hair);
    14. d3d_model_draw(setrm01playerhair01[mod_index_body],0,0,0,texrm01playerhair01);
    15. d3d_model_draw(setrm01playergun01[mod_index_body],0,0,0,texrm01playergun01);
    16. d3d_set_lighting(false);
    17. draw_set_color(c_aqua);
    18. draw_set_blend_mode(bm_add);
    19. d3d_model_draw(setrm01playerbody[mod_index_body],0,0,0,texrm01playerbodyill);
    20. draw_set_blend_mode(bm_normal);
    21. draw_set_color(c_white);
    22. d3d_set_lighting(true);
    23. d3d_transform_set_identity();
    24. d3d_light_enable(0,false);
    25. d3d_light_enable(1,false);
    26. d3d_set_lighting(false);
    Alles anzeigen


    Ich bin durchaus, auch der Meinung, dass ich Code-technisch nicht sehr effizient zu Gange bin, also, wenn jemand eine gute Idee hat, die mir 1 Stunde in Blender ersparrt, dann waere ich sehr gluecklich.

    danke nochmal und entschuldigung, wenn ich gegen irgendwelche Regeln verletze. Ich bin noch nich ganz im Klaren ueber den fetten Waelzer von Post-Regelung. Irgendwo in der Mitte, musst ich wieder ganz hoch-scrollen, weil ich den groessten Teil wieder vergessen hatte :(
  • hi,
    ich hab mir jetzt nicht alles durchgelesen, aber die ersten zeilen in deinem ersten post reichen eigentlich auch aus ;)
    warum weiß ich nicht, aber wenn du ein model mit den scale funktionen vergrößerst dann klappt irgendwas mit der beleuchtung
    nicht mehr. das problem hatte ich auch schon. du musst einfach das model extern vergrößern und neu speichern. dann im GM
    laden und nicht skalieren, dann sollte es eigentlich richtig beleuchtet werden.

    mfg
    HIM

    ps: da fällt mir ein, wenn du es kleiner skalierst, dann gibt es keine probleme, du darfst es nur nicht vergrößern
  • Wenn ich mich nicht irre, tritt dieses Problem auf, weil nach dem Skalieren die Normalen nicht mehr Einheitsvektoren sind. Deswegen kommt es zu Fehlern bei der Beleuchtung, jedoch weiß ich nicht wie man das im GM verhindern kann. Direct3D hat zwar einen RenderState namens D3DRS_NORMALIZENORMALS der das verhindern soll, nur habe ich den Verdacht, dass man mit dem GM nicht darauf zugreifen kann. :pinch:

    © 2008 by Teamgrill Productions
  • @HIM666:

    Ich habe soetwas schon befuerchtet. Bei 57 frames an 3d Animation hab ich gehofft, ich koennte mich da vorher irgendwie durch einen Trick rausmogeln, hehe. Herzlichsten Dank fuer die Muehe :)



    @Soul Reaver:

    Hm, da kann man wohl nichts machen. Das schreit foermlich nach einem Patch. Ich wuenscht, YoYo wuerde sich ein bissl mehr um den 3D-technischen Anteil bewaffeln. Danke fuer die rasche Antwort.