Multitextur-Verwirrung

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Kernel32

Betreff: Multitextur-Verwirrung

BeitragFr, Mai 11, 2007 10:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Brauche mal eben ein wenig Nachhilfe... das mit den Layern und Textur-Blendmodes in Sachen Multitextur hat mich immer schon ein wenig verwirrt. Shocked

Mein Problem: ich habe ein Quadrat aus vier Vertices, auf dem ich zwei Texuren miteinander mischen möchte, und zwar so:

user posted image

Da die Online-Hilfe hier ein wenig unklar ist (jedenfalls für meine Art zu Denken Wink ), schnalle ich das nicht ganz, welche Textur in welchen Layer gehört und auf welchen Blendmode man die jeweilige Textur setzen muss. Ich probiere jetzt schon die ganze Zeit herum, aber das ist eher ein zufälliges Kombinieren, als ein zielgerichtetes Vorgehen Sad
-------------
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

BeitragFr, Mai 11, 2007 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein bisserl rumgespielt und tada : user posted image

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

BeitragFr, Mai 11, 2007 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool! Danke dir Very Happy

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 Shocked

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

BeitragFr, Mai 11, 2007 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter

Mr.Keks

BeitragFr, Mai 11, 2007 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
als zumeist deutlich erfolgreicher hat sich in solchen fällen übrigens das erstellen von zwei übereinanderliegenden quads erwiesen (=.
MrKeks.net

Lunatix

BeitragFr, Mai 11, 2007 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 12, 2007 8:43
Antworten mit Zitat
Benutzer-Profile anzeigen
@sky-z: Das Mesh ist doch bereits auf schwarz gesetzt:
Code: [AUSKLAPPEN]
EntityColor cube,0,0,0

-Dunkler geht es also nicht Sad

@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

BeitragSa, Mai 12, 2007 9:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Guck dir mal meinen letzten Code an Wink
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

BeitragSa, Mai 12, 2007 10:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Junkprogger hat Folgendes geschrieben:
Guck dir mal meinen letzten Code an Wink
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.

user posted image
-------------
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

BeitragSa, Mai 12, 2007 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 12, 2007 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Btw: Es gibt auch negative Lichtquellen Wink
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 Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Lunatix

BeitragSa, Mai 12, 2007 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Was spricht eigendlich dagegen, eine Gemischte Textur in einem Grafikprogramm zu machen... Oo

Nebenbei, so sieht das ganze bei SingleSurface aus :
user posted image
*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

BeitragSo, Mai 13, 2007 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Sad
-------------
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

BeitragSo, Mai 13, 2007 10:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 13, 2007 10:52
Antworten mit Zitat
Benutzer-Profile anzeigen
mmmmh, meinst du so ?
Code: [AUSKLAPPEN]
TextureBlend grass,3
TextureBlend gradient,3
TextureBlend rock,2
EntityColor cube,0,0,0


user posted image
[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

BeitragSo, Mai 13, 2007 11:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 13, 2007 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Junkprogger hat Folgendes geschrieben:
mmmmh, meinst du so ?
Code: [AUSKLAPPEN]
TextureBlend grass,3
TextureBlend gradient,3
TextureBlend rock,2
EntityColor cube,0,0,0


user posted image

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 Sad
-------------
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

BeitragSo, Mai 13, 2007 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch

2 Quads, über einander legen, die Gradient texture nutzem um Vertex Alpha einzustellen.

Alles ganz simpel Smile

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.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Mai 13, 2007 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 14, 2007 6:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
2 Quads, über einander legen, die Gradient texture nutzem um Vertex Alpha einzustellen.

Alles ganz simpel Smile

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 Sad

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.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group