Texturen durch Mausklick ändern + Lichteffekt

Das Forum befindet sich im reduzierten Betrieb. Die Addon- und Supportforen bleiben weiterhin verfügbar.
Bitte beachte, dass OMSI nicht mehr weiterentwickelt wird. Ein Teil der Entwickler widmet sich inzwischen der Entwicklung eines neuen Simulators. Weitere Informationen zum LOTUS-Simulator findest Du hier.
  • Hallo Leute,


    ich baue momentan einen neuen Betriebshof für meine Map. Ich fände es richtig cool, wenn man in der Bushalle, das Licht an und ausschalten könnte (per Mausklick).


    Meine Fragen sind:

    • Ist es möglich, bei einem Objekt durch Mausklick die Texturen zu wechseln ("Licht aus Textur" + "Licht an Textur")? (Natürlich soll es bei einem weiteren Mausklick wieder die alte Textur sein...)
    • Ist es möglich, durch diesen Mausklick einen Lichteffekt zu erzeugen? (Natürlich soll der Lichteffekt bei einem weiteren Mausklick wieder verschwinden...)

    Ich würde mich wirklich sehr freuen, wenn mir jemand helfen könnte, weil dies meinen Betriebshof nocht echter machen würde.

    :thumbsup:


    Lukas

  • Es gibt sowas ähnliches eine Schranke die sich bei Knopfdruck öffnet.


    Ja, solche Objekte hab ich auch schon gemacht. Ich hab aber keine Schranken, sondern Garagentore etc. gemacht...

    :)


    Ich hätte das mit dem Licht eben gerne gemacht, um meinen Betriebshof realistischer zu machen - wenn die ganze Nacht das Licht in der Halle an ist, (Laternenobjekte) ist es auch ein bischen unrealistisch...

    :(


    Vieleicht fällt noch jemanden etwas ein.

    :thumbsup:


    Es würde im Prinzip schon reichen, wenn durch Mausklick ein Lichteffekte erzeugt wird, auf die Texturveränderung könnte ich verzichten...

    :D



    Lukas

  • Ich glaube das ist nicht möglich. Aber ich bin in dem Gebiet leider kein experte.


    Warum antwortest du auf eine Frage, wenn du garkeine Ahnung davon hast? Ist es dir wichtig, eine falsche Antwort zu geben, als garkeine? Glauben ist nicht wissen. Wie würde es dir gefallen, wenn man auf deine Frage eine falsche Antwort gibt, obwohl man deinen Wunsch leicht umsetzen kann?


    Ist es möglich, bei einem Objekt durch Mausklick die Texturen zu wechseln


    Das ist natürlich möglich. Was anderes macht Omsi auch nicht. Der Unterschied ist lediglich, wer das Licht schaltet. In Omsi wird das ein- und ausschalten des Lichtes (Lichttexturen von Häusern, oder Lichtpunkte und Lichtschein von Straßenlaternen) durch die Zeit (Haustexturen) oder den Sonnenstand (Straßenlaternen) beeinflusst. Man kann das ganze natürlich auch mit einem Mausevent versehen. Funktioniert aber nicht so einfach, wie in einem Bus.


    Waldheini12 hat es auf Ettbruck schon umgesetzt. Hier geht zwar kein Licht an, aber das Garagentor öffnet sich. Was der Mausevent letztenendes auslöst, ist aber vollkommen egal. Man kann damit Garagentore öffnen oder Lichttexturen wechseln, oder alles zusammen. Schau dir mal die Garage von Waldheini12 an.
    Allerdings muß man dazu vom Bus unabhängig sein (Taste F4), damit das Objekt die Maus erkennt (Busfremdes Objekt).


    Der Befehl zum umschalten der Texturen auf eine Lichttextur, wird dann dreimal verwendet. Einmal um die Innenlampen, von der Licht-aus-Textur auf eine Licht-an-Textur zu wechseln und andererseits, um die Lichtpunkte und den Lichtschein zu aktivieren. Hat aber auch einen Nachteil. Der Lichtschein leuchtet auch durch Objekte durch, egal ob diese tranzparent sind oder nicht. Da eine Garage im allgemeinen eckig ist, der Lichtschein aber rund um die Lichtquelle leuchtet, kann es passieren, dass der Lichtschein durch die Wand nach außen leuchtet.
    Der Lichtpunkt und der Lichtschein (das sind zwei verschiedene Dinge), werden dann genauso umgesetzt, wie eine Straßenlaterne, nur der Lichtbefehl ist anders.

  • Lichteffekt weiß ich nicht. Es gibt aber ne Funktion, die freetex heißt, da kannst du per Script Texturen wechseln. Ich check das im Moment aber selber nicht, sobald ich es hab, melde ich mich.

    Danke, wäre nett von dir!

    :thumbsup:


    Das ist natürlich möglich. Was anderes macht Omsi auch nicht. Der Unterschied ist lediglich, wer das Licht schaltet. In Omsi wird das ein- und ausschalten des Lichtes (Lichttexturen von Häusern, oder Lichtpunkte und Lichtschein von Straßenlaternen) durch die Zeit (Haustexturen) oder den Sonnenstand (Straßenlaternen) beeinflusst. Man kann das ganze natürlich auch mit einem Mausevent versehen. Funktioniert aber nicht so einfach, wie in einem Bus.


    Waldheini12 hat es auf Ettbruck schon umgesetzt. Hier geht zwar kein Licht an, aber das Garagentor öffnet sich. Was der Mausevent letztenendes auslöst, ist aber vollkommen egal. Man kann damit Garagentore öffnen oder Lichttexturen wechseln, oder alles zusammen. Schau dir mal die Garage von Waldheini12 an.
    Allerdings muß man dazu vom Bus unabhängig sein (Taste F4), damit das Objekt die Maus erkennt (Busfremdes Objekt).


    Der Befehl zum umschalten der Texturen auf eine Lichttextur, wird dann greimal verwendet. Einmal um die Innenlampen, von der Licht-aus-Textur auf eine Licht-an-Textur zu wechseln und andererseits, um die Lichtpunkte und den Lichtschein zu aktivieren. Hat aber auch einen Nachteil. Der Lichtschein leuchtet auch durch Objekte durch, egal ob diese tranzparent sind oder nicht. Da eine Garage im allgemeinen eckig ist, der Lichtschein aber rund um die Lichtquelle leuchtet, kann es passieren, dass der Lichtschein durch die Wand nach außen leuchtet.
    Der Lichtpunkt und der Lichtschein (das sind zwei verschiedene Dinge), werden dann genauso umgesetzt, wie eine Straßenlaterne, nur der Lichtbefehl ist anders.

    Ich hab mir nochmal überlegt, wie ich es genau machen möchte:



    1. Ich baue einen Lichtschalter (bei rotem Pfeil)
    2. Script für Lichteffekt per Mausklick
    3. Man kann die Position des Lichtes (wie in einem Koordinatensystem) festlegen, oder lieg ich da falsch? Wenn ja, würde ich die gekennzeichnete Position an der Decke nehmen.
    4. Anschließend baue in ein seperates Objekt, welches wie eine Lampe aussieht. Dieses bringe ich dort an der Decke an, wo der Lichteffekt ist.



    Wenn das so klappen würde, bräuchte ich jetzt "nur noch" das Script für das Mausevent. Wäre echt super, wenn mir dabei jemand helfen könnte.

    :thumbsup:

    :thumbsup:


    Lukas

  • 1. Ich baue einen Lichtschalter (bei rotem Pfeil)


    Ganz genau. Wichtig ist hier, dass der Lichtschalter Objektmäßig vollständig unhängig vom Gebäude ist. Dieser wird nur für die Objektdatei hinzugefügt. Dort wird dann auch das Mausevent gestellt.


    2. Script für Lichteffekt per Mausklick


    Auch richtig. Du erstellst ein Script, indem angegeben wird:
    Wenn das Mausevent ausgelöst wird, soll eine Variable von 0 auf 1 geändert werden.
    Wie das genau aussieht, findest du auf Ettbruck. An der auf dem Brteibeteil stehenden Garage am Bahnhof, findest du auch einen Taster. Der Ändert auch nur eine Variable von 0 auf 1.


    3. Man kann die Position des Lichtes (wie in einem Koordinatensystem) festlegen, oder lieg ich da falsch?


    Du liegst da natürlich richtig. Ansonsten hätte es keinen Sinn. Du mußt natürlich genau festlegen, wo sich die Position deines Lichtschein befindet. Aber dieser Schritt kommt erst ab der 4. Stelle.


    4. Anschließend baue in ein seperates Objekt, welches wie eine Lampe aussieht. Dieses bringe ich dort an der Decke an, wo der Lichteffekt ist.


    Das machst du an dritter Stelle. Du baust eine Lampe (egal ob Strahler, Leuchtstoffröhre, Glühlampe, ...) und baust diese an die Decke. Wenn du mit Blender gut umgehen kannst, dann baust du deine Lampe als seperates Objekt, aber setzt es später in Blender an die Garage fest an (Garage und Lampe ergeben dann ein Objekt in Omsi). Die Lampentextur setzt du dann einfach auf die zweite Materialebene. Hast du diese Fähigkeiten noch nicht, kannste die Lampe auch so einsetzen, als seperates Objekt.
    Das wird in der Datei dann mit [matl_nightmap] zum leuchten gebracht. In dieser Datei kommt dann auch der Lichtschein rein. Beide werden mit der Variable Licht_an versehen und der Schalter (wird auch einzeln eingetragen) bekommt das Mausevent. Alle Teile deiner Garage, deren Flächen irgendwie richtung Lichtquelle stehen werden dann auch hell, während die vom Licht abgewendeten Teile dunkel bleiben.
    Wenn deine Lampe an der Decke hängt, kannst du auch die genaue Position der Lampe auslesen.


    Aber denke bitte daran, dass Mausevent funktioniert nur, wenn du nicht in einem Bus sitzt. Sitzt du in einem Bus, wird das Busfremde Objekt nicht erkannt und kann nicht angeklickt werden.

  • ... Beide werden mit der Variable Licht_an versehen und der Schalter (wird auch einzeln eingetragen) bekommt das Mausevent. Alle Teile deiner Garage, deren Flächen irgendwie richtung Lichtquelle stehen werden dann auch hell, während die vom Licht abgewendeten Teile dunkel bleiben.
    Wenn deine Lampe an der Decke hängt, kannst du auch die genaue Position der Lampe auslesen.


    Aber denke bitte daran, dass Mausevent funktioniert nur, wenn du nicht in einem Bus sitzt. Sitzt du in einem Bus, wird das Busfremde Objekt nicht erkannt und kann nicht angeklickt werden.

    Ok, schonmal danke für die Hilfe!

    :)

    Ich probier einfach mal, ob ich das mit dem scripten hinbekomme - wenn nicht, melde ich mich nochmal.

    :D


    Einen schönen Abend noch!


    Lukas

  • So, da bin ich wieder.

    :D


    Ich habe jetzt ein bischen herum probiert, aber ich komme irgendwie nicht weiter...

    :(


    Ich zeige euch mal wie ich es gemacht habe - ich hoffe, dass ihr mir helfen könnt, den (die) Fehler zu finden.

    :thumbsup:



    Ich hoffe ihr könnt mir helfen!

    :thumbsup:


    Lukas

  • irgendwie ist das aber schon arg seltsam was du da gebastelt hast. Normal funktioniert ein Licht etwas anders.


    In die Datei.osc deiner Garage trägst du deine Lichtquelle als weiteres Mesh ein:
    [mesh]
    Garage.o3d


    [mesh]
    Lampe.o3d


    [matl_change]
    Lichttextur_aus.bmp
    0
    Lichtschalter


    [matl_nightmap]
    Lichttextur_an.bmp


    [maplight]
    0
    0
    4.5
    245
    255
    64
    10
    Lichtschalter



    Die Eintragungen des Lichtes sind fest vorgegeben:

    Zitat

    Der Befehl [maplight] erzeugt eine Lichtquelle, die die Karte anleuchtet. Zunächst folgen x, y, z,
    dann r, g, b und zuletzt der Radius, bei dem die volle Intensität erreicht wird. Danach gilt die
    Abnahme mit dem Quadrat der Entfernung.


    Du kannst dort nicht einfach weitere Sachen dazutragen, weil es dir so gefällt. Alle folgenden Strings unter einem Befehl haben immer einen Sinn. Du hast bei den Koordinaten den Mittelpunkt der Garage angegeben direkt auf der Erde und das Licht schwarz gemacht, mit einen ungültigen Farbwert.


    Außerdem setzt du einen Befehl ein ohne weiteren Sinn [newanim]. Du kannst nicht einfach einen Befehl einkopieren und dann einen Kommentar drunter stehen lassen. Unter einen Befehl erwartet Omsi beim auslesen mehrere Strings die er auslesen muß.


    Außerdem wird das Licht nicht als einzelnes Objekt zur Garage gestellt, sondern als Eintrag in der Garage.


    Ob es dir gefällt oder nicht, an den Vorgaben der Befehle mußt du dich halten, unabhängig ob sie für dich Sinn machen oder nicht.


    Was soll der Trigger machen? Du stellst eine variable mit dem namen 1 um. Schön und dann? Wäre es nicht sinnvoll eine Variable richtig zu benennen? Als Beispiel würde doch Lichtschalter gut klingen. also:
    {Trigger:Garagenlicht}
    (L.L.Lichtschalter1) ! (S.L.Lichtschalter1)
    {end}
    der Lichtschalter ist dann eine variable womit das Licht ein und ausschaltet, wenn das Mausevent Garagenlicht angeklickt wird. Diese Variable muß in der varlist erscheinen. Ansonsten ist dieser Befehl (also die Variable) ungültig.


    Du solltest dir wirklich mal andere Objekte genau anschauen, wie zum Beispiel die Schranke am Betriebshof.

  • Hallo Tatra,


    ja, wie man sieht hab ich leider keine Ahnung vom scripten

    :(

    , deswegen schaut des alles ein bischen komisch aus...

    :D


    Ich habe jetzt deine Scriptvorschläge eingetragen, jetzt bekomme ich aber beim setzen im Editor eine Fehlermeldung:



    Hier ist meine Logfile, wenn nötig:



    So sehen meine Einträge nun aus, ich würde mich freuen, wenn du mir nochmal helfen könntest.

    :thumbsup:



    Es tut mir leid, dass ich immer wieder mit meinen Scriptfragen nerve, aber ich verstehe das Scripten einfach nicht...

    :(


    Lukas

  • Ich habe jetzt deine Scriptvorschläge eingetragen, jetzt bekomme ich aber beim setzen im Editor eine Fehlermeldung:


    Das waren keine Vorschläge, sondern direkte Anweisungen.

    :D


    Sorry aber du vermurkst deine ganzen Einträge und würfelst alles durcheinander.


    Trigger:Lichtschalter ist kein gültiger Wert.
    Sorry, wenn du meine Eintragungen nicht genau befolgst, wird das nichts.

    {Trigger:Garagenlicht}
    (L.L.Lichtschalter1) ! (S.L.Lichtschalter1)
    {end}


    Dieser Abschnitt kommt natürlich nicht in die model.cfg, sondern einzig und allein ins Script. Ein Script in Omsi hat immer die Dateiendung osc. Alles was eine andere Dateiendung hat, ist in Omsi kein Script. Ein Script beinhaltet immer Berechnungen. Im Trigger wird also folgendes berechnet:


    (Lese die Variable "Lichtschalter1" aus) ! (speichere diese Variable unter "Lichtschalter1" ab)
    ! = kehre den ausgelesenen Wert um.


    Wenn "Lichtschalter1" den Wert NULL hat, wird der Wert umgekehrt in Wert 1
    Wenn "Lichtschalter1" den Wert EINS hat, wird der Wert umgekehrt in Wert 0.


    Null bedeutet Unwahr, Falsch, nicht zutreffend, unrichtig, aus ... etc.
    EINS bedeutet Wahr, Richtig, zutreffend, ein, stimmt ... etc. etc. etc.


    In einer Model.cfg stehen Befehl drin, gefolgt von auszulesende Strings (Zeilen). Ein Befehl, um etwas auszulesen wird dabei IMMER in einer eckigen Klammer gesetzt. runde (Klammern) oder geschwungene {Klammer} werden in der model.cfg nicht akzeptiert. In Bussen ist die Objektdatei eine model.cfg, bei Szeneryobjekten ist es die Objekt.sco. Die model.cfg kannst du also erstmal löschen. Da ich nur Busse oder Teile von Busse baue, schreibe ich meist model.cfg.


    Übertrage nicht meine Angaben 1:1 und hoffe drauf, dass es funktioniert. Das wird es nicht, NIE!
    Zeige mir bitte die Texturen Lichttextur_aus.bmp und die Lichttextur_an.bmp
    Ist die Lichttextur_aus.bmp in der o3d Datei deiner Lampe eingetragen? Du mußt also schon deine Sachen selbst eintragen. Da ich die von dir verwendeten Namen nicht kenne, muß ich mir welche ausdenken, damit du weißt was ich meine.
    Lichttextur_aus.bmp ist dann also deine Textur vom Licht, wo das Licht ausgeschaltet gezeigt wird.


    Beispiel: Lichttextur_aus-jpg


    Beispiel: Lichttextur_an.jpg
    Bilder sind von Routeres.


    Ich habe deine Garage nicht gebaut. Woher soll ich also wissen, wie deine verwendeten Texturen heißen?


    in die osc-Datei gehört alles mit den eckigen Klammern.
    [mesh]
    Garage.o3d <<<--- Hier sollte der Dateiname deiner Garage stehen.


    [mesh]
    Licht.o3d <<<--- Hier muß der Dateiname deiner Lampe stehen.


    [matl_change]
    Lichttextur_aus.bmp <<<--- Hier steht deiner Lampentextur mit ausgeschaltetem Licht, welche auch in der o3d-Datei drin steht (zugewiesene Materialtextur)
    0
    Lichtschalter1 <<<--- Hier ist die Variable, aus dem Script, die angibt wann die Textur gewechselt werden soll.


    [matl_nightmap]
    Lichttextur_an.bmp <<<--- Hier steht der Dateiname der Textur, mit angeschaltetem Licht.


    [maplight]
    0
    0
    4.5
    245
    255
    64
    10
    Lichtschalter1 <<<--- Auch hier sollte wieder die Variable stehen.


    [mesh]
    Lichtschalter.o3d


    [mouseevent]
    Garagenlicht


    Ob der Lichtschalter funktioniert, wenn er hier eingetragen wird, weiß ich nicht. Lade dir am besten Ettbruck herrunter und schaue dir da die Garage an. Da ist der Schalter für das Garagentor im Vehicles-Ordner.


    In das Script kommt der Trigger und das Script hat die Dateiendung osc.


    {Trigger:Garagenlicht}
    (L.L.Lichtschalter1) ! (S.L.Lichtschalter1)
    {end}


    Die Variable "Lichtschalter1" muß noch verifiziert werden, indem man diese Variable in die _varlist.txt einträgt.
    Lichtschalter1


    Und nochmal: Schaue dir unbedingt bereits vorhandene Objekte aus Ettbruck und Spandau an, die dir weiterhelfen. Also die Schranke mit dem Licht am Betriebshof und die Garage in Ettbruck auf dem Betriebshof. Ich beschäftige mich mit dem Objektbau und das Scripten in Bussen, hier wird einiges ander4s geschrieben, als bei Sceneryobjekten. Ich habe zwar schon Gebäude für eine Map gebaut, aber ohne zusätzlichen Dateien. Diese Objekte kannle ich Pennermaster vor dem Latz und er muß den Rest machen.


    Ich gebe dir hier nur einige Vorgaben, der Rest ist deine Eigeninitiative. Schau dir als andere Mapobjekte an, deren Eintragungen, Scripte, Texturen usw.
    Und trage das Licht nicht als seperate Objektdatei ein, sondern in der Objektdatei.sco deiner Garage.