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

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

11

22.05.2005, 17:59

Der Code hat nichts mit C/C++ zu tun, es ist sogennanter Effekt Code. Der Code wird von DirectX interprettiert und dient dazu, verschiedene Techniken (Multitexturing, AlphaBlending...) zu kombinieren und nach dem Effekt den Ursprungszustand wieder herzustellen. Durch diese Kombination ist es möglich z.B. Scheiben eben halb durchsichtig zu machen, das Auto aber nicht.

Wie man Materialien setzt siehst du in einen nur halbwegs gutem 3D Editor. Diesen Materialien kannst du dann die Effekte zuordnen!

Den Code kannst du am besten lernen, in dem du einige Beispiele in Davids Buch, oder wenn du das nicht hast, in dem DirectX SDK ansiehst! Schau da mal unter Tools, da findest du nen Effekt Editor. Beispiele gibt es auch glauch dazu. Die Variblen unterscheiden sich kaum von denen aus deinem C Quelltex, nur das die LP, P und sonstige Teile der Namen weggelassen wurden, welche Zeiger oder irgendwelche Typen anzeigen. Weiterhin fehlen von den 3D Renderstates das D3DRS_ alles andere ist gleich.

Beispiel: Aus dem SDK

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Sample effect file


// Here is a texture parameter

texture tex0 < string name = "tiger.bmp"; >;

// Here is a vector parameter representing the direction

// vector from a light source.  The UIDirectional annotation

// tells EffectEdit to create a user interface element that can

// be used to interactively change the light direction.

float3 lightDir
<
    string UIDirectional = "Light Direction";
> = {0.577, -0.577, 0.577};

string XFile = "tiger.x";   // Model to load

string BIMG  = "lake.bmp";  // Background image

DWORD  BCLR = 0xff202080;  // Background color (if no image)


technique tec0
{
    pass p0
    {
        // Set up reasonable material defaults

        MaterialAmbient = {1.0, 1.0, 1.0, 1.0}; 
        MaterialDiffuse = {1.0, 1.0, 1.0, 1.0}; 
        MaterialSpecular = {1.0, 1.0, 1.0, 1.0}; 
        MaterialPower = 40.0f;
        
        // Set up one directional light

        LightType[0]      = DIRECTIONAL;
        LightDiffuse[0]   = {1.0, 1.0, 1.0, 1.0};
        LightSpecular[0]  = {1.0, 1.0, 1.0, 1.0}; 
        LightAmbient[0]   = {0.1, 0.1, 0.1, 1.0};
        LightDirection[0] = <lightDir>; // Use the vector parameter defined above

        LightRange[0]     = 100000.0;
        
        // Turn lighting on and use light 0

        LightEnable[0] = True;
        Lighting = True;
        SpecularEnable = True;
        
        // Set up texture stage 0

        Texture[0] = <tex0>; // Use the texture parameter defined above

        ColorOp[0] = Modulate;
        ColorArg1[0] = Texture;
        ColorArg2[0] = Diffuse;
        AlphaOp[0] = Modulate;
        AlphaArg1[0] = Texture;
        AlphaArg2[0] = Diffuse;
        MinFilter[0] = Linear;
        MagFilter[0] = Linear;
        MipFilter[0] = Linear;
        
        // Disable texture stage 1

        ColorOp[1] = Disable;
        AlphaOp[1] = Disable;
    }
}

Atlan

Frischling

Beiträge: 27

Wohnort: Deutschland, NRW

Beruf: Azubi

  • Private Nachricht senden

12

22.05.2005, 19:56

Super Erklärung :)

Nur hab ich im SDK keine Beispiele gefunden, in denen (teile von) Objekten gespiegelt werden. Gibt es da wirklich keine, oder finde ich die nur nicht??

mfg
Atlan

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

13

22.05.2005, 20:30

naja, bei spiegeln kenne ich micht so aus ;) aber ich würde auf jedem Fall erstmal AlphaBlending aktivieren, da das eine Scheibe ist und die sind je bekanntlich durchsichtlich. Ich würde die aber nicht ganz durchsichtig machen (z.B. mache ein paar graue Kleckse druf), sieht bestimmt besser aus.

Mir kommt da gerade mal so ne Idee zum Spiegeln ...

Wieso machstes nocht ganz einfach! Du legst zwei Texturen einfach übereinander. Ich denke da z.B. an eine Wolkentextur. Diese addiertst du per Multitexturing und wola. Jetzt kannst du natürlich die Textur noch bewegen, damit das realistischer wirkt!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

23.05.2005, 11:19

naja, wenn du ganz realistische reflexionen willst, kannst du das mit dynamischen cubemapping machen. ansonsten sollte für den scheibeneffek spheremapping auch schon nette ergebnisse erzielen.

gleichnamige beispiele zu beiden techniken finden sich wie immer im dx sdk.

Atlan

Frischling

Beiträge: 27

Wohnort: Deutschland, NRW

Beruf: Azubi

  • Private Nachricht senden

15

23.05.2005, 16:59

OK, super Tipps!! :)

Momentan ist die Scheibe aus einem grauen, transparenten (alphablending!) Material. Soweit gehts schon. Ich werd mir jetzt erstmal die dx SDK Beispiele anschauen.

mfg
Atlan

Werbeanzeige