Multitextur-Verwirrung
Übersicht

Kernel32Betreff: Multitextur-Verwirrung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Brauche mal eben ein wenig Nachhilfe... das mit den Layern und Textur-Blendmodes in Sachen Multitextur hat mich immer schon ein wenig verwirrt. ![]() Mein Problem: ich habe ein Quadrat aus vier Vertices, auf dem ich zwei Texuren miteinander mischen möchte, und zwar so: ![]() Da die Online-Hilfe hier ein wenig unklar ist (jedenfalls für meine Art zu Denken ![]() ![]() |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein bisserl rumgespielt und tada : ![]() Ist vielleicht nicht ganz genauso, aber immerhin fast =) Materialien (128x128, vom obigen bild) : Download Code: [AUSKLAPPEN] Graphics3D 800,600,32,2 SetBuffer BackBuffer () cam=CreateCamera() cube=CreateCube() ScaleEntity cube,2,2,2 PositionEntity cube,0,0,7 grass = LoadTexture("grass.png",1) gradient=LoadTexture ("blend.png",1) rock=LoadTexture("rock.png",1) gradient2=LoadTexture ("blend.png",1) EntityColor cube,0,0,0;255 TextureBlend grass,2 TextureBlend gradient,3 TextureBlend gradient2,2 ScaleTexture gradient2,0,-1 TextureBlend rock,3 EntityTexture cube,gradient,0,0 EntityTexture cube,grass,0,1 EntityTexture cube,gradient2,0,3 EntityTexture cube,rock,0,3 RotateEntity cube,0,0,180 Repeat TurnEntity cube,1,1,0 RenderWorld Flip Until KeyHit(1) End |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Cool! Danke dir ![]() Aber zwei Fragen wirft das dennoch auf: Code: [AUSKLAPPEN] EntityTexture cube,gradient2,0,3
EntityTexture cube,rock,0,3 1. Du legst hier doch zwei Texturen in ein und denselben Layer -ich wusste gar nicht, daß das geht ![]() 2. Die Multi-Textur hat zwar jetzt genau die richtige Mischung, ist dafür aber deutlich heller, als eine normale Textur. Lässt sich das irgendwie umgehen oder ist das ein Nebeneffekt, mit dem man leben muss? |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu 2.
färbe das Mesh mit 128, 128, 128 ein, dadurch sollte es dunkler werden. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
als zumeist deutlich erfolgreicher hat sich in solchen fällen übrigens das erstellen von zwei übereinanderliegenden quads erwiesen (=. | ||
MrKeks.net |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oops O_o
mh, den 2ten Gradient braucht man garnicht sehe ich gerade ^^ Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer () cam=CreateCamera() cube=CreateCube() ScaleEntity cube,2,2,2 PositionEntity cube,0,0,7 grass = LoadTexture("grass.png",1) gradient=LoadTexture ("blend.png",1) rock=LoadTexture("rock.png",1) EntityColor cube,128,128,128 TextureBlend grass,2 TextureBlend gradient,3 TextureBlend rock,3 EntityTexture cube,gradient,0,0 EntityTexture cube,grass,0,1 EntityTexture cube,rock,0,2 RotateEntity cube,0,0,180 Repeat TurnEntity cube,1,1,0 RenderWorld Flip Until KeyHit(1) End |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@sky-z: Das Mesh ist doch bereits auf schwarz gesetzt:
Code: [AUSKLAPPEN] EntityColor cube,0,0,0
-Dunkler geht es also nicht ![]() @Mr.Keks: zwei übereinander liegende Meshes scheiden leider aus, da das zu viele Probleme verursacht. Entweder liegen die Meshes zu dicht beieinander, dann verschwinden die Polys des einen Meshes in denen des anderen, wenn die Kamera weiter weg ist (Z-Buffer zu ungenau) oder der Abstand ist zu gross, dann sieht man deutliche Lücken zwischen den einzelnen Tiles. Einen wirklich perfekter Abstand ist nicht möglich. Also bleibt wohl leider nur die Multitextur-Methode @Junkprogger: bei deinem zweiten Beispiel beginnt das Gras schon an der gegenüberliegenden Kante. Die Überblendung sollte aber erst in der Mitte der Textur beginnen. Das erste Code-Beispiel schafft das besser -nur, das die Textur eben leider trotz EntityColor cube,0,0,0 noch viel zu hell ist. Gibt es keinen Weg, die Textur dunkler hinzubekommen -ausser vielleicht, das man die Grafiken selbst abdunkelt? |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guck dir mal meinen letzten Code an ![]() 128,128,128 reicht vollkommen aus eigendlich. |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Junkprogger hat Folgendes geschrieben: Guck dir mal meinen letzten Code an
![]() 128,128,128 reicht vollkommen aus eigendlich. Nein, die Textur ist viel zu hell. Hier der Vergleich, unten eine normale Textur und oben die gemischte. Und hier ist EntityColor auf 128 gesetzt. Sogar bei 0,0,0 ist sie noch deutlich zu hell. ![]() |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wobei das untere auch wieder zu dunkel ist... schon mal am Licht rumgespielt ? | ||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Btw: Es gibt auch negative Lichtquellen ![]() |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was spricht eigendlich dagegen, eine Gemischte Textur in einem Grafikprogramm zu machen... Oo
Nebenbei, so sieht das ganze bei SingleSurface aus : ![]() *klick* Edit : Woher hast du das eigendlich? Link ? |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
StepTiger hat Folgendes geschrieben: Btw: Es gibt auch negative Lichtquellen
Aber die würden ja wiederrum alle Objekte in der Szene beeinflussen. Junkprogger hat Folgendes geschrieben: Was spricht eigendlich dagegen, eine Gemischte Textur in einem Grafikprogramm zu machen... Oo
Weil pro Textur zu viele Ecktile-Kombinationen nötig wären, um sie passend und ohne störende Kanten mit einer Nachbartextur zu vermischen. Deshalb wäre die Mischmethode ganz ok, wenn die Textur dadurch nicht deutlich heller werden würde. Bei deinem geposteten Bild sieht man ja auch, daß das Gras auf der gemischten Textur viel heller ist, als die original Grastextur. Es scheint einfach keine brauchbare Lösung zu geben... ![]() |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Anderen Blendmode nehmen statt Add, mit Add wirds halt nunma heller.
Alpha und MultiplyX2 bieten sich an. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
mmmmh, meinst du so ?
Code: [AUSKLAPPEN] TextureBlend grass,3
TextureBlend gradient,3 TextureBlend rock,2 EntityColor cube,0,0,0 ![]() |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu der idee mit dem anderen grafikprogramm:
Code: [AUSKLAPPEN] pixel=readpixel[fast](x,y,imagebuffer(im1))
red1=(pixel And $00FF0000) shr 16 green1=(pixel And $0000FF00) shr 8 blue1=(pixel And $000000FF) pixel=readpixel[fast](x,y,imagebuffer(im2)) red2=(pixel And $00FF0000) shr 16 green2=(pixel And $0000FF00) shr 8 blue2=(pixel And $000000FF) red=red1*(y/ImageHeight(im1))+red2*(1-y/ImageHeight(im1)) green=green1*(y/ImageHeight(im1))+green2*(1-y/ImageHeight(im1)) blue=blue1*(y/ImageHeight(im1))+blue2*(1-y/ImageHeight(im1)) pixel=$FF000000 + (red shl 16) + (green shl 8) +blue writepixel[fast] x,y,imagebuffer(result) das ganze in ne for-next schleife.... ans ende noch savebuffer und die sachedürfte doch klappen |
||
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Junkprogger hat Folgendes geschrieben: mmmmh, meinst du so ?
Code: [AUSKLAPPEN] TextureBlend grass,3
TextureBlend gradient,3 TextureBlend rock,2 EntityColor cube,0,0,0 ![]() Habe ich auch schon probiert, dann stimmt zwar die Helligkeit, aber wenn man genau hinsieht, sieht man, das eine Textur sich über die ganze Grafik ausdehnt (in diesem Fall der Felsen). Es sollte aber so sein, das jede Textur auf der gegenüberliegenden Seite des Bildes nicht mehr zu sehen ist, nur dann entstehen keine sichtbaren Ränder zu anderen Texturen. Ich sage ja... das ganze ist gar nicht so simpel, wie man anfangs denkt ![]() |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Doch
2 Quads, über einander legen, die Gradient texture nutzem um Vertex Alpha einzustellen. Alles ganz simpel ![]() Beim drunter liegenden direkt die gradient für alpha nutzen (bzw. helligkeit / 255.0) beim drüber liegenden quad dafür dann halt (255 - helligkeit)/255.0 für die vertexalpha oh und für das mesh (wäre ja nur ein mesh mit 2 quads zb) dann einfach entityfx 32 setzen |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nachdem ich es selber wissen wollte, habe ich es mal versucht. Viele Versuche habe ich gemacht, um es doch mit nur einem Mesh als Multitextur hinzubekommen. Letztendlich fehlt sowas wie Difference für TextureBlend oder Alpha innerhalb eines Layers.
Naja, jetzt habe ich es probeweise mit zwei Sprites (Quads) mal probiert und bekommen habe ich das hier. Code: [AUSKLAPPEN] Graphics3D 600,600,32,2
SetBuffer BackBuffer() camera=CreateCamera() PositionEntity camera,0,0,-1.2 CameraClsColor camera,64,64,64 sprite1=CreateSprite() sprite2=CreateSprite() EntityFX sprite2,32 text1=LoadTexture("grass.png",1) text2=LoadTexture("rock.png",1) blend=LoadTexture("blend.png",2) EntityTexture sprite1,text1,0,0 EntityTexture sprite2,text2,0,0 EntityTexture sprite2,blend,0,1 TextureBlend blend,5 RenderWorld Flip FlushKeys WaitKey End Es funktionert zwar, aber kann mich mit so ein Provisorium nicht anfreunden. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: 2 Quads, über einander legen, die Gradient texture nutzem um Vertex Alpha einzustellen.
Alles ganz simpel ![]() Leider nicht, habe ja oben schon geschrieben, das diese Methode keine Alternative ist wg. Z-Buffer-Ungenauigkeiten. Entweder der Y-Abstand zwischen beiden Quads ist zu gering, dann erscheint je nach Kameradistanz und -Winkel manchmal ein Quad oben, manchmal das andere, oder man erhöht den Y-Abstand zwischen beiden Quads, wodurch dann aber sichtbare Spalten an den Kanten entstehen, wo ein normales Tile mit einem der weiter oben liegenden Alpha-Quads nebeneinanderliegen. Allein das habe ich schon stundenland probiert, es gibt einfach keinen "perfekten" Y-Abstand bei der Vertex-Methode, vor allem nicht bei einer bewegten Kamera. Entweder "ploppen" einzelne Polygone oder man sieht, das einige Tiles weiter oben liegen ![]() Genau das wird bei hectics Methode sicher auch der Fall sein, und die benötigt zudem gleich drei Quads pro Tile. Wenn dieses Z-Buffer-Problem nicht wäre, wären zwei übereinanderliegende Quads sicher die beste Lösung, aber das funktioniert ja leider nicht. Bei stärkeren Erhebungen im Gelände (also wenn die Quads verzerrt werden) ist oben beschriebenes Problem sogar noch stärker sichtbar. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group