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

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

1

29.08.2006, 09:55

Texturierungsproblem!

Hi!

Ich schreibe derzeit einen Terrainrenderer aber habe enorme probleme mit der Texturierung!
Ich möchte eine Volumentexture über das gesamte Terrain legen. Doch dei Texture erscheint nie so wie sie soll...

Damit ihr alle wisst, was ich mein, ein paar screenies...
Hab das Terrain aus DEBUG gründen auf ein Quad reduziert:
http://www.archexcubitor.net/cms/downloads/Screenshot019.jpg

Das Ergebnis der Textureierung ist folgendes:
http://www.archexcubitor.net/cms/downloads/Screenshot020.jpg

und das ist die unterste Ebene der Volumentexture:
http://www.archexcubitor.net/cms/downloads/Dirt06.png

Also... meine Vertexstruktur ist folgende:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
struct OMEGA_API ogTerrainVertex
{
    og3DVector vPosition;
    og3DVector vNormal;
    og3DVector vTexture;

    static const DWORD dwFVF;
};

const DWORD ogTerrainVertex::dwFVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX0 | D3DFVF_TEXCOORDSIZE3(0);


Die TextureKoordinaten werden gleichzeitig mit den Positionsdaten generiert, und ich hab sie mit dem Debugger überprüft, sie stimmen!
Für dieses Quad gilt: von 0/0/0 bis 1/1/0
Nun hab ich mehrere Möglichkeiten probiert. Mit diesem Effekt und der std Transformationspipline gehts net!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TECHNIQUE Terrain
{
    PASS P1
    {
        CullMode            = CCW;
        texture[0]          = <DetailMap>;
        ColorOp[0]          = SelectArg1;
        ColorArg1[0]        = Texture;
        ColorOp[1]          = Disable;
        Lighting            = false;
        Alphablendenable    = false;
        Specularenable      = false;
        //FillMode          = wireframe;        //DEBUG!

        
        //VertexShader = compile vs_1_1 VS_Terrain();

        //PixelShader = compile ps_2_0 PS_Terrain();

    }
}


(DetailMap ist die Volumentexture [wird richtig geladen und gesetzt!)

Mit dem eigentlich konzipierten Shadern funktioniert es auch nicht:

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//Variablen

float4x4        mWorldViewProjection;
float3x3        mRotation;

texture         NormalMap;
texture         DetailMap;
texture         HeightMap;

//****************************************//


//Ausgangsstruktur

struct VS_OUTPUT_Terrain
{
    float4      vPosition   : POSITION;
    float3      vTex0       : TEXCOORD0;
};

//VertexShader

VS_OUTPUT_Terrain VS_Terrain(float4 vInPos : POSITION, float3 vInTex0 : TEXCOORD0)
{
    VS_OUTPUT_Terrain Out = (VS_OUTPUT_Terrain)(0);
    
    //Position mit Höhe

    Out.vPosition   = mul(vInPos, mWorldViewProjection);
    
    //3DTexture-Coordintaten

    Out.vTex0       = vInTex0;
    
    return Out;
}

//****************************************//


//Sampler

sampler SS_DetailMap = sampler_state
{
    texture   = <DetailMap>;
    MINFILTER = LINEAR;
    MAGFILTER = LINEAR;
    MIPFILTER = LINEAR;
    //ADDRESSU = CLAMP;

    //ADDRESSV = CLAMP;

    //ADDRESSW = CLAMP;

};
sampler SS_NormalMap = sampler_state
{
    texture     = <NormalMap>;
    MINFILTER   = LINEAR;
    MAGFILTER   = LINEAR;
    MIPFILTER   = NONE;
};
sampler SS_HeightMap = sampler_state
{
    texture     = <HeightMap>;
    MINFILTER   = LINEAR;
    MAGFILTER   = LINEAR;
    MIPFILTER   = NONE;
};

//PixelShader

float4 PS_Terrain(float3 vInTex0 : TEXCOORD0) : COLOR
{
    //NormalVektor

    //float4 vNormal = tex2D(SS_NormalMap, vInTex0);

    
    //DetailMap (3D-TextureCoords!)

    //float3 vTexDetail = float3(vInTex0.x, tex2D(SS_HeightMap, vInTex0).r, vInTex0.y);

    
    return tex3D(SS_DetailMap, vInTex0);
    //return tex2D(SS_DetailMap, float2(vInTex0.x, vInTex0.y));

    //return float4(1.0f, 1.0f, 1.0f, 1.0f);

}

(NormalMap braucht ich später für die Beleuchtung!)

Wie man hier sieht, hab ich schon vieles ausprobiert! Von 2D-Koords auf 3D-Koords erst im Shader zu gehen (funktioniert ebenfalls nicht!) [btw: funktioniert das überhaupt??]
Sampler hab ich auch mal als sampler3D gehabt, keine veränderung. Wenn ich die Clamps einschalte, dann verändert sich das Bild stark:

http://www.archexcubitor.net/cms/downloads/Screenshot023.jpg

Was seehr merkwürdig ist, ist, dass sich die Texture beim näherkommen ändert. So sieht die texture ohne Clamp von nahem aus:
http://www.archexcubitor.net/cms/downloads/Screenshot021.jpg
und so mit clamp:
http://www.archexcubitor.net/cms/downloads/Screenshot024.jpg

Das merkwürdige dabei ist, dass ein solcher streifen (wie auf dem Bild OHNE clamp) mehr oder weniger den Querschnitt der Volumentexture darstellt...

Bitte helft mir weiter... ich weiß absolut nicht was da falsch läuft! Hab ich ein RS, TSS oder SS vergessen? (hab das GrundlagenBuch zu hause...)

Hoffentlich hat jemand eine Idee!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

29.08.2006, 11:03

Re: Texturierungsproblem!

Zitat von »"Black-Panther"«

C-/C++-Quelltext

1
const DWORD ogTerrainVertex::dwFVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX0 | D3DFVF_TEXCOORDSIZE3(0);

D3DFVF_TEX0 bedeutet keine Texturkoordinaten!

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

3

29.08.2006, 11:14

ach du heilige SCH****!!!!!!!!!!!!!

Danke!!!
Das wars! Oh mein Gott... wie blöde bin ich? :oops: :oops: :oops:
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

29.08.2006, 13:28

Ist mir auch schonmal passiert ;)

DarioFrodo

Treue Seele

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

5

30.08.2006, 17:16

Ich hätte auch schon auf Texturkoordinaten Fehler getippt, aber es hat sich ja schon erledigt.
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

Werbeanzeige