Du bist nicht angemeldet.

Werbeanzeige

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

1

28.06.2015, 16:14

Frage zu: D3DRS_ALPHABLENDENABLE und D3DRS_ALPHATESTENABLE

Verständnisproblem: Kann ich D3DRS_ALPHATESTENABLE benutzen, wenn D3DRS_ALPHABLENDENABLE aus ist? - Ich gehe mal von JA aus!

Bei mir funktioniert irgendwie nur D3DRS_ALPHABLENDENABLE, aber da sehen die Modelle irgendwie geisterhaft aus. Siehe Anhänge!

Alphatest funzt bei mir nicht! Das sind meine einzigen RenderStates, die ich momentan benutze. Alles Andere wie: TexturStates und SamplerStates hab ich im Quellcode auskommentiert.
Trotzdem wird die schwarze Farbe bei eingeschalteten Alphatest (Ohne Alphablending) nicht weggeblendet.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
D3D.SetRS(D3DRS_LIGHTING, FALSE);
D3D.SetRS(D3DRS_ZENABLE, FALSE);
D3D.SetRS(D3DRS_ZWRITEENABLE, FALSE);

D3D.SetRS(D3DRS_BLENDOP, D3DBLENDOP_ADD);
D3D.SetRS(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
D3D.SetRS(D3DRS_DESTBLEND, D3DBLEND_ONE);

D3D.SetRS(D3DRS_ALPHATESTENABLE, TRUE);
D3D.SetRS(D3DRS_ALPHAFUNC, D3DCMP_GREATER);
D3D.SetRS(D3DRS_ALPHAREF, (DWORD) 0x00000004);
»ByteJunkie« hat folgende Bilder angehängt:
  • AlphaBlending.jpg
  • AlphaTesting.jpg
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

28.06.2015, 17:02

Du brauchst dafür keine Alpha-Func und keinen Alpha-Test. Du brauchst nur Alpha-Blending mit einem echten Alpha-Kanal und nicht mit dem Farb-Kanal. Aktuell addierst Du die Farben der Modelle auf die des Hintergrunds, geblendet basierend auf der Farbe des Modells. Das ist sicher nicht, was Du willst. Du willst Source_Alpha und 1-Source_Alpha. Für premultiplied textures willst Du ONE und 1-Source_Alpha.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

3

28.06.2015, 17:20

Zuerst einmal Danke sehr für die schnelle und präzise Antwort.
Also so:

C-/C++-Quelltext

1
D3D.SetRS(D3DRS_BLENDOP, D3DBLENDOP_ADD);   D3D.SetRS(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);   D3D.SetRS(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

oder so:

C-/C++-Quelltext

1
D3D.SetRS(D3DRS_BLENDOP, D3DBLENDOP_ADD);   D3D.SetRS(D3DRS_SRCBLEND, D3DBLEND_ONE);    D3D.SetRS(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

Muss ich sonst noch etwas aktivieren? Z. B.: ZENABLE?
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

28.06.2015, 17:24

Z hat damit ja erstmal nix zu tun, sondern mit Tiefen-"Sortierung". Wenn Du mit Blending zeichnen willst, willst Du aber eigentlich so oder so zuerst das Zeug ohne Blending und dann das mit Blending zeichnen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 297

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

28.06.2015, 17:50

Alpha-Testing wäre dafür aber schon besser als Blending, es sei denn er will transparente Pflanzen. Alpha-Testing hat auch keinerlei Probleme mit dem Z-Buffer.

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

6

28.06.2015, 17:51

@BlueCobold
Tja, danke. Nur irgend etwas mach ich noch falsch, oder es fehlt noch was, weil nach dem Rendern sieht es immer noch so aus, wie auf Bild 2.
Ich hab schon seit 2 Tagen alles mögliche probiert und Forum Beiträge dazu gelesen. Bei der Einstellung mit D3DBLEND_ONE wird wenigstens geblendet. Darum hab ich jetzt nur noch die Skybox und die Pflanze drin. Alles andere ist auskommentiert.
Mit D3DBLEND_SRCALPHA und D3DBLEND_INVSRCALPHA ist das Schwarze noch zu sehen, wie auf Bild 2. Eben so mit D3DBLEND_ONE und D3DBLEND_INVSRCALPHA.
Mit D3DBLEND_ONE und D3DBLEND_SRCALPHA wird geblendet, aber jetzt ist alles noch heller und milchiger.
Sorry, aber irgendwie ist bei mir hängen im Schacht. :S

@David
Danke für die Info. Funktioniert Alphatesting denn ohne Alphablending?


PS: Irgendwie wird die Schrift hier immer kleiner ... :huh:
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »ByteJunkie« (28.06.2015, 18:03)


David Scherfgen

Administrator

Beiträge: 10 297

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

28.06.2015, 18:13

@David
Danke für die Info. Funktioniert Alphatesting denn ohne Alphablending?


PS: Irgendwie wird die Schrift hier immer kleiner ... :huh:

Ja, Blending und Testing sind völlig unterschiedliche Konzepte.
An der Schrift hat sich nichts geändert, hast du evtl. im Browser Zoom aktiviert? Strg+0 drücken!

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

28.06.2015, 18:29

Alpha-Testing wäre dafür aber schon besser als Blending, es sei denn er will transparente Pflanzen. Alpha-Testing hat auch keinerlei Probleme mit dem Z-Buffer.
Kann er schon, aber das gibt ziemlich unschön Übergänge zwischen Textur und Hintergrund. Da muss er wirklich zusehen, dass die Texturen so sind, dass das noch halbwegs gut aussieht. Dunkle Kanten z.B. wären sicher nicht hübsch. Ist halt die Frage was genau er hat und will. Entweder Blending oder Testing.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

9

28.06.2015, 20:24

Also, ich möchte Alphatesting nutzen. Leider will das bei mir nicht funktionieren.
Als Textur hab ich BMP genommen und ein DDS draus gemacht damit Schwarz auch schwarz ist. Obwohl ich meine das BMP ausreicht.

Hier nochmal die States, die ich momentan benutze, die aber nicht fluppen wollen, oder vielleicht liegt es auch woanders dran:

C-/C++-Quelltext

1
2
3
D3D.SetRS(D3DRS_BLENDOP, D3DBLENDOP_ADD);
D3D.SetRS(D3DRS_DESTBLEND, D3DBLEND_SRCALPHA);
D3D.SetRS(D3DRS_SRCBLEND, D3DBLEND_INVSRCALPHA);

C-/C++-Quelltext

1
2
3
D3D.SetRS(D3DRS_ALPHATESTENABLE, TRUE);
D3D.SetRS(D3DRS_ALPHAFUNC, D3DCMP_GREATER);
D3D.SetRS(D3DRS_ALPHAREF, (DWORD) 0x0000000F);

Jede Hilfe wird dankbar angenommen. :this:
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

David Scherfgen

Administrator

Beiträge: 10 297

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

28.06.2015, 21:52

Du brauchst einen Alphakanal in der Textur, und dieser muss natürlich auch sinnvollen Inhalt haben.

Werbeanzeige