www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheDirectX-Forum

DerHulk

Gepostet:
18.03.2006 13:17

Texturen spiegeln  
Hi, leutz habe mal wieder ein Problem, und zwar möchte ich Sprites(oder ne Textur) spiegeln.Habe mich auch schon mal in der SDK zu DX umgesehen und da folgendes gefunden:


// For this example, device is a valid Device object.
//
using System;
using Microsoft.DirectX.Direct3D;

// Load a texture.
Texture tx = new Texture(device, 4, 4, 0, 0, Format.X8R8G8B8, Pool.Managed);

// Set the texture in stage 0.
device.SetTexture(0, tx);

// Set some sampler states.
device.SamplerState[0].AddressU = TextureAddress.Clamp;
device.SamplerState[0].AddressV = TextureAddress.Border;

// Retrieve a sampler state.
TextureAddress ta = device.SamplerState[0].AddressU;


Nur habe ich leider keine Peilung wie ich das verwenden kann oder ob mir das überhaupt was bringt!

Da ich damit nicht weiter gekommen bin, habe ich mir auch überlegt das ich ja das Sprite um 180° um die Y-Achse drehen kann das währe der selbe Effekt, leider funktioniert das nur Teilweise(Wortwörtlich gesehen Smilie), und zwar wird mir nur die hälfte vom Sprite (zwar gespiegelt) angezeigt!


Matrix transformation =

Matrix.Translation(x,y,0)
* Matrix.Scaling(1,1,0)
* Matrix.RotationY(Math.PI)
* Matrix.Translation(toX,toY,0);

mySprite.Transform = transformation;


Einer ne Idee dazu?

mfg derHulk Smilie
Zum Seitenanfang    
 
Jammni

Gepostet:
18.03.2006 16:46

   
Also wie man Texturen generell spiegeln kann, kann ich dir leider nicht sagen. Ich weiß nicht mal, ob das überhaupt irgendwie vorgesehen ist.

Aber rotieren lassen sich Sprites allemal ;-) Dafür musst du nur mySprite.Draw2D() mit sieben Parametern aufrufen. Die anderen überladenen Versionen haben leider keine Parameter zum Rotieren. In der Hilfe des DirectX-SDKs findest du auch eine kurze Beschreibung der Parameter.

Alternativ könntest du bei deinem Quelltext auch mySprite.Transform.RotationY() mal extra aufrufen. Obwohl ich da jetzt mal spontan anzweifle, dass du dann mehr als die bisherige Hälfte sehen würdest.

MfG,
Jammni
Zum Seitenanfang Homepage   ICQ    
 
DerHulk

Gepostet:
19.03.2006 14:32

   
Hab die Lösung für Sprites,(also ein Kollege hat mir da weiter geholfen Smilie), man muss nur das Scaling um die zu spiegelnde
Achse ins Negative verschieben (-1)
die Rotation kann man dann weglassen oder auf 0 setzen.


Matrix transformation =

Matrix.Translation(x,y,0)
* Matrix.Scaling(-1,1,0) //bewirkt die Spieglung
* Matrix.RotationY(0)
* Matrix.Translation(toX,toY,0);

mySprite.Transform = transformation;


mfg DerHulk
Zum Seitenanfang    
 
Jammni

Gepostet:
19.03.2006 18:52

   
Stimmt, über die negative Skalierung kann mans wirklich machen. Und liegt eigentlich auch nicht so fern ;-)
Zum Seitenanfang Homepage   ICQ