Entwickler-Ecke
Multimedia / Grafik - Textur auf Objekt "verschieben" - GLScene
svenson08 - So 03.08.03 14:01
Titel: Textur auf Objekt "verschieben" - GLScene
Hallo,
ich möchte die Textur auf einem Objekt etwas verschieben. Also nicht stecken oder der gleichen.
Ich habe einen simplen Cube, den ich mit einer Textur versehen habe. Ich möchte nun die Textur auf dem Objekt nun frei ausrichten, sprich etwas verschieben (etwas höher, oder etwas mehr nach links, etc.). Hat jemand eine Idee wie das geht ?
Sascha
Aya - So 03.08.03 15:02
Hi,
ich kann dir nicht sagen wie es bei GLScene geht, aber bei normale, purem OpenGL geht es einfach in dem du die Texturkoordinaten anpasst...
Also nicht die koordinaten von 0..1 vergeben, sondern z.B. von 0,5 .. 1,5. Damit verschiebst du die Textur um die hälfte zur seite :)
Au'revoir,
Aya~
svenson08 - So 03.08.03 21:03
Hi Aya,
das war mir schon klar und ich glaube mit purem opengl wäre es auch kein solches Problem. Aber ich benutze glScene und würde gerne wissen wie es dort geht.
Jetzt bitte kein Diskussion anfangen was besser ist, pures Opengl oder eben nicht, das war schon öfters zu lesen und genau so einfach zu beantworten wie was zu erst da war das Huhn oder das Ei.
Simon Joker - Mo 04.08.03 08:37
Hi Svenson
das geht bei GLScene genauso (relativ) einfach. Geht nur wenn du mit MaterialLibrarys arbeitest, das ist abber ehe zu empfehlen. Hier hat jedes Material die Eigenschaft TextureOffset und TextureScale. Spiel damit.
svenson08 - Mo 04.08.03 12:17
Hi Simon Joker,
da hast du dann aber ein Problem. Nimm mal 10 Cubes, gib jedem die selbe Textur aus der Library und dann verschiebe mal die Textur von cube1. Dann verschiebt sich die Textur auf allen Cubes, logisch ist auch das selbe Lib Item. Nun könnte man schlau sein und für jeden Cube einen eigenen Lib eintrag machen. damit hätte jeder Cube ein LibItem und damit wäre auch auf alle Cubes separat die Textur auszurichten.
Doch wie siehes bei einem Shooter aus, da hast du x-tausend Objekte von denen etliche Texturen etwas ausgerichtet sind (damit die wand etwas flüssiger aussieht, weist was ich meine).
Was ich sagen will, damit bläht sich die Library aber tierisch auf, und somit ist das game nicht mehr perfomant.
Gibt es denn eine andere möglichkeit als über die Library ?
Logiqu - Mo 04.08.03 13:46
hi! ich habe mich noch nicht mit glscene beschäftigt, aber wenn du die objekte in einem eigenen array oder einer eigenen liste gespeichert hast, dann kannst du doch für jedes objekt eine eigenschaft "TextureOffset" hinzufügen. dann belegst du nicht für jedes objekt einige kb mehr, sondern nur ein paar bytes... die eigenschaft musst du natürlich bei jedem objekt auswerten, bevor du es renderst
svenson08 - Mo 04.08.03 15:04
Hi Logiqu,
leider haben die Objekte kein TexturOffset, ist von der Verwaltung der Objekte dort anders gelöst, so das dein Vorschlag leider nicht funktioniert. Das TexturOffsett kann ich nur an einem TGLLibMaterial angeben, jedenfalls finde ich keine andere stelle. Weis jemand wo ich den Offset noch angeben kann ?
Simon Joker - Di 05.08.03 11:20
Hi Svenson
Sicher geht das. Wenn du für jeden Cube oder was auch immer eigene Materialeigenschaften willst , brachst du auch je ein Material! Mache für jede unabhängige Fläche ein Material in der Library. Wenn sie alle die gleiche Textur bekommen sollen, referenziere auf ein Vorlagenmaterial mit der entsprechenden Textur (MaterialLib & Material; die Tex wird nur ein mal geladen). Setze die Texturen der neuen Materialien auf enabled und verändere dann die Offseteigenschaft.
svenson08 - Di 05.08.03 11:28
Hi Simon Joker
tut mir leid, aber hier versteh ich nicht was du genau damit meinst.
| Zitat: |
| referenziere auf ein Vorlagenmaterial mit der entsprechenden Textur (MaterialLib & Material; die Tex wird nur ein mal geladen). |
Kannst du mir das vielleicht noch etwas anders erklären ?
Simon Joker - Di 05.08.03 11:47
Ok. Du mach erstmal deine LibraryMaterialien ganz normal, lädst die Texturen und schaltest sie auf enabled.
Dann Kannst du für jeden Cube ein neues Material hizufügen. Jedes LibMaterial.Material hat die Eigenschaft MaterialLibrary und LibMaterial. Hier gibst du das eigentlich Material an. Dann musst du noch die Egenschaft LibMaterial.Material.Texture.Enabled auf true setzen und kannst dieses Material normal verwenden. Die eigentliche Textur wird nur einmal geladen und die zusätzlichen Materialie referenzieren nur auf diese. Verarbeitet werden aber die eigen Eigenschaften (nach denen des orginalen)
BeispielProggie? EMail!
svenson08 - Di 05.08.03 12:12
Dann hab ich es jetzt verstanden. Ein BeispielProggie wäre super (Mail Adresse siehe Button).
Der Übersichthalber wäre es doch besser in einer Library die Texturen zu laden und in einer 2. Library die referenzen zu den Texturen, inc. Offsett einstellungen zu verwenden. Sollte doch eigentlich funktionieren
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!