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

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

1

03.08.2006, 16:20

Stahl Rohr mit Beleuchtung

Hallo!

Ich brauche für mein 2D Spiel alle Möglichen Arten von Stahl Rohre.
Anfangs wollte ich einfach normale Sprites dafür verwenden. Bis mir die Idee gekommen ist, die Rohre über Vertex Grafiken zu zeichnen. Das heißt ich möchte mittels Beleuchtung das Rohr 3d aussehen lassen.
Nur wie löse ich das am besten?
Also ich habe mal gedacht, ich verwende 2 Polygone und gebe alle Vertices verschiedene Diffuse Color Werte. Also ganz oben z.B eine Helligkeit von 0.5f, in der Mitte 1.0f, und ganz unten 0.1f.
Es sieht auch schon ganz gut aus!
Nur würde ich meinem Spiel gerne eine Sonne rendern die sich bewegt und dann wäre die Beleuchtung immer anderst. Kann mir jemand sagen wie ich das genau machen muss?
Mir is da irgendwie nicht klar welchen Vektor dabei die Sonne hat, wenn sie zB von links nach rechts geht.
Weil über die NormalVektoren und dem Punktprodukt aus dem Vektor der Sonne müsste ich dann die Helligkeit bekommen, oder?


Und noch eine Frage, kann ich dem ganzen irgendwie noch eine Struktur geben, dass es mehr nach Stahl aussieht, irgendwie eine Textur drauf rendern?


Danke!

cya,
Stefan

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

2

03.08.2006, 17:33

Re: Stahl Rohr mit Beleuchtung

Zitat von »"Stefan"«


Und noch eine Frage, kann ich dem ganzen irgendwie noch eine Struktur geben, dass es mehr nach Stahl aussieht, irgendwie eine Textur drauf rendern?

Stahl kann man ganz gut mit ner Environment-map simulieren. Der refelektiert ja groesstenteils. Stahl-Texturen fuer die Oberflaeche selbst, gibt es zu genuege, kann man mit 2D-Software a la Photoshop aber auch recht einfach selbst machen.
Edit: Ok, ich hab ueberlesen, dass es ein 2D-Spiel ist, vergiss die Environment-Map.. musst ne geeignete Textur finden

Und mit der "Richtung" der Sonne: Das muss nicht naturgetreu nachgebildet werden, es wuerde wohl reichen eine Lichtquelle durch die Szene zu bewegen. Und welche API verwendest du? Oder machst du alles selbst?
"Have you tried turning it off and on again?"

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

3

03.08.2006, 17:40

Achso ja, habe ich ganz vergessen. Ich verwende DirectX 9.

Also wohin sollte der Vektor der Sonne zeigen?
Und wie kann ich die Textur mit der Helligkeit mischen?

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

4

03.08.2006, 17:56

Ich glaub die TextureStageStates bieten da eine Möglichkeit...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

5

03.08.2006, 18:29

Einen Richtungsvektor brauchst du fuer die Sonne nicht, nehm doch einfach eine Punktlichtquelle. Die Helligkeit wird schon von DirectX errechnet, da musst du dich nicht selber drum kuemmern
"Have you tried turning it off and on again?"

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

6

03.08.2006, 20:03

Vielen dank für eure Hilfe!

Leider aber habe ich noch Probleme mit den TextureStageStates.
Also ich hab ein Vertex Struktur die so aussieht:

C-/C++-Quelltext

1
2
3
4
5
6
7
struct SVertex2
{
    D3DXVECTOR3 vPosition;
    float fRHW;
    D3DXVECTOR2 vTexture;
    DWORD dwColor;
};


So und jetzt möchte ich die Textur mit Diffuse mischen.

C-/C++-Quelltext

1
2
3
4
5
d3d->GetD3DDevice()->SetFVF(D3DFVF_XYZRHW |D3DFVF_TEX1);
d3d->GetD3DDevice()->SetTexture(0,Texturemanager::Get()->SetTextrue(0));
d3d->GetD3DDevice()->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
d3d->GetD3DDevice()->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TEXTURE);
d3d->GetD3DDevice()->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_ADD);


Naja, mein Ergebnis ist leider weis =)

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

7

03.08.2006, 20:42

Zitat von »"Chase"«

Einen Richtungsvektor brauchst du fuer die Sonne nicht, nehm doch einfach eine Punktlichtquelle. Die Helligkeit wird schon von DirectX errechnet, da musst du dich nicht selber drum kuemmern

Das finde ich keine gute Idee. Ein Richtungslicht zu erstellen ist nun ja auch nicht so schwer: Denk dir einfach mal die Sonne=>Erde geschichte stark verkleinert. Die Erde und die Sonne sind dann nur noch Punkte. Die Erde liegt bei (0/0/0) und die Sonne liegt sagen wir mal 1 Einheit darüber und dreht sich von Ost nach West (ich gehe mal davon aus Ost ist immer links und West immer rechts in der 2D Ansicht, falls du auch Drehung um di z-Achse hast, musst du das noch ein wenig anpassen...) => 0 nach 180 Grad => 0 nach Pi.

Sonnenposition(Cosinus(Winkel)/0/-Sinus(Winkel)).

Der Richtungsvektor ist dann = -Sonnenposition

= Normalisieren( Vektor( -Cosinus(Winkel) / 0 / Sinus(Winkel) ) )

Benütze mal D3DTOP_MODULATE. Falls das auch nicht geht: Was hast du für eine Farbe und was ungefähr für eine Textur (einfarbitg, Foto, ...)?
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

8

03.08.2006, 21:03

Super danke für die gute Beschreibung. Das werde ich dann gleich mal umsetzen. Aber glaube ich werde es trozdem mit dem Punktprodukt versuchen, dann brauch ich die Beleuchtung von D3D nicht extra benützen.

D3DTOP_MODULATE habe ich versucht, aber dann sieht man gar keinen Unterschied. Also die Textur wird ganz normal gerendert.
Als Textur hab ich eine eher einfache Struktur aus Metall(helle Farben).

Farbe habe ich diese:

C-/C++-Quelltext

1
2
3
4
5
6
this->m_Vertex2[0].dwColor = D3DXCOLOR(0.5f,0.5f,0.5f,0.0f);
this->m_Vertex2[1].dwColor = D3DXCOLOR(0.5f,0.5f,0.5f,0.0f);
this->m_Vertex2[2].dwColor = D3DXCOLOR(1.0f,1.0f,1.0f,0.0f);
this->m_Vertex2[3].dwColor = D3DXCOLOR(1.0f,1.0f,1.0f,0.0f);
this->m_Vertex2[4].dwColor = D3DXCOLOR(0.1f,0.1f,0.1f,0.0f);
this->m_Vertex2[5].dwColor = D3DXCOLOR(0.1f,0.1f,0.1f,0.0f);



cya,
Stefan

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

9

04.08.2006, 09:15

Probier ein bisschen mit den TextureStageStates herum... Schau einfach in der DX-Doku nach, und versuch dich eigene kombis zusammenzustellen... Probieren ist angesagt! ^^
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

04.08.2006, 11:03

du könntest eine art normalmapping verwenden. ich denke du kannst sogar auf shader verzichten und einfach mit TextureOp = D3DTOP_DOTPRODUCT3 arbeiten.

Werbeanzeige