Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

1

28.03.2005, 18:23

Alpha Blending

Hi,

ich will mein model immer opaker werden lassen. dazu muss ich ja den Alphawert meiner tbModel klasse ändern, wie mach ich das??
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

28.03.2005, 19:35

hm, ich würds einmal so in der art versuchen:

C-/C++-Quelltext

1
2
3
D3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_BLENDFACTOR );
D3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVBLENDFACTOR );
D3DDevice->SetRenderState( D3DRS_BLENDFACTOR, 0xFF444444 ); //0xFF444444 <- z.b.


is nicht getestet, ka ob das funzt.
blendfactor is, wenn ich die doku verstanden hab, im prinzip der alphawert für jeden farbkanal, einfach eine D3DXCOLOR( r, g, b, a ) nehmen.

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

3

28.03.2005, 20:13

Es funktioniert:

C-/C++-Quelltext

1
2
3
4
5
        tbDirect3D::SetRS(D3DRS_ALPHABLENDENABLE, TRUE);
        tbDirect3D::SetRS(D3DRS_SRCBLEND, D3DBLEND_BLENDFACTOR);
        tbDirect3D::SetRS(D3DRS_DESTBLEND, D3DBLEND_INVBLENDFACTOR);
        tbDirect3D::SetRSF(D3DRS_BLENDFACTOR, 0xFF444444 );
        tbDirect3D::SetRS(D3DRS_BLENDOP, D3DBLENDOP_ADD);


Aber das mit dem Wert kapier ich nicht was für eine Variable muss ich jetzt deklarieren?? ich hatte mir das so gedacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
Variable += Wert;   //Die Varible zählt hoch und macht das Model immer opaker

tbDirect3D::SetRS(D3DRS_ALPHABLENDENABLE, TRUE);
        tbDirect3D::SetRS(D3DRS_SRCBLEND, D3DBLEND_BLENDFACTOR);
        tbDirect3D::SetRS(D3DRS_DESTBLEND, D3DBLEND_INVBLENDFACTOR);
        tbDirect3D::SetRSF(D3DRS_BLENDFACTOR, Variable);
        tbDirect3D::SetRS(D3DRS_BLENDOP, D3DBLENDOP_ADD);

if(Varaible >= MAXWert)
       Variable = MAXWert;
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

28.03.2005, 20:17

im prinzip isses ein DWORD wert.

je 1 byte steht für den blendfactor vom jeweiligen farbkanal.
also isses im prinzip eine RGBA farbe mit der komponentenweise multipliziert wird.

tbDirect3D::SetRSF(D3DRS_BLENDFACTOR, tbColor( a, a, a, 1.0f ) );

dürfte vermutlich hinhaun.

so hab ichs zumindest aus der doku entnommen...

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

5

29.03.2005, 17:43

Es funktionier zwar besser avber immer noch nicht korrekt, wenn ich mit hilfe der Tasten die Variable a verstelle. es ist zwar durchsichtig aber bei 1 ist es nicht opak und bei 0 nicht völlig durchsichtig. Wenn ich die Variable a von 1 - 0.0 in 0.1 Schritten laufen lasse dann wechselt es von 70% opak bis ca 60%.

Hat noch jemand eine Idee??
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

29.03.2005, 18:51

also das is irgendwie komisch.
vielleicht hab ich mich vertan was tbColor angeht...

versuch z.b. mal das:

C-/C++-Quelltext

1
tbDirect3D::SetRSF(D3DRS_BLENDFACTOR, tbColor( a, a, a, a ) ); 


es muss halt ein DWORD sein, wobei jedes byte den zu verwendenden alphawert zwischen 0 und 255 für den entspr. farbkanal darstellt. notfalls kannst du das ja auch selber berechnen...

für 0xFFFFFFFF muss alles opak und für 0x0 alles vollständig durchsichtig sein...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

29.03.2005, 18:53

ansonsten:

C-/C++-Quelltext

1
2
3
4
tbDirect3D::SetRS(D3DRS_ALPHABLENDENABLE, TRUE); 
        tbDirect3D::SetRS(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); 
        tbDirect3D::SetRS(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); 
        tbDirect3D::SetRS(D3DRS_BLENDOP, D3DBLENDOP_ADD);


ich denk dann sollte sich der alphawert über die diffuse color vom material bzw. die texturen ergeben...

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

8

29.03.2005, 19:29

Fehler gefunden, und so funktionierts:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
tbColor test;
        test=tbColor(fBlend, fBlend, fBlend, 1.0f);

        // Alphablending anstellen

        tbDirect3D::SetRS(D3DRS_ALPHABLENDENABLE, TRUE);
        tbDirect3D::SetRS(D3DRS_SRCBLEND, D3DBLEND_BLENDFACTOR);
        tbDirect3D::SetRS(D3DRS_DESTBLEND, D3DBLEND_INVBLENDFACTOR);
        tbDirect3D::SetRS(D3DRS_BLENDFACTOR, test );
        tbDirect3D::SetRS(D3DRS_BLENDOP, D3DBLENDOP_ADD);


Des F beim Renderstate musste weg. Des heißt das der 2. Parameter ein Float und kein DWORD Wert ist.
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

29.03.2005, 20:27

Zitat von »"bassdscho"«

Des heißt das der 2. Parameter ein Float und kein DWORD Wert ist.

... was dot Dir ja auch die ganze Zeit schon versucht hat, mitzuteilen *g*

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

29.03.2005, 21:20

das mit dem F war mir nicht bekannt, weil ich die TriBase engine nicht verwende...

Werbeanzeige