Laden...

Rotation um den mittelpunkt ?

Erstellt von Fab96 vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.373 Views
F
Fab96 Themenstarter:in
66 Beiträge seit 2004
vor 18 Jahren
Rotation um den mittelpunkt ?

Hi

nachdem ich bis jetzt nur die sprite klasse benutzt habe im mit D3D 2D texturen darzustellen habe ich nun auf vertieces umgestellt.

Mein problem momentan ist nur das er nicht richtig rotiert,

  1. er rotiert um den X,Y punkt( Der punkt um den rotiertwird ist also falsch
  2. wird die grafik gestreckt etc. wo es nicht sein sollte.

/// <summary>
		/// Draw Texture and rotate it
		/// </summary>
		/// <param name="x">The X Position</param>
		/// <param name="y">The Y Position</param>
		/// <param name="angle">The angle for the rotation in Degrees</param>
		public void RenderTexture(int x, int y, int angle)
		{
			// Init  Stream Source
			(DirectXForm.Device).SetStreamSource(0,vertexBuffer,0);

			// Set CustomVertex Format
			(DirectXForm.Device).VertexFormat = CustomVertex.PositionTextured.Format;

			// Rotate texture(Z axies)
			matrix = Matrix.RotationZ( RAD * angle );

			// Set Position per translate
			matrix *= Matrix.Translation(-1f + (float)((2*x*(100/(float)DirectXForm.Resolution.Width))/100),
				1f - (float)(2*(y*(100/(float)DirectXForm.Resolution.Height))/100),
				0f);

			// Transform object matrix to World Matrix
			DirectXForm.Device.SetTransform(TransformType.World, matrix);

			// Set the texture into the device
			(DirectXForm.Device).SetTexture(0, texture);
			
			// Draw the Vertices & Texture 
			(DirectXForm.Device).DrawPrimitives(PrimitiveType.TriangleFan, 0,2);
		}

OK source ist nicht wirklich spitze(grad kommentare😉)

Aber ich denke es sagt aus was ich mache.

RAD:

float RAD = (float)((2*Math.PI)/360); 

Wie bekomm ich es nun hin das er sauber um den mittelpunkt rotiert?
Habs auf verschiedene arten versucht nur nix klappt wirklich da ich ja per Translation die X,Y werte berechne und so nicht fürden mittelpunkt benutzen kann(meines wissens nach jedenfalls).

Anbei ein bild das das problem aufzeigt(ja abrtiges bild und farben ich weiß 😉

Und hierder aufruf zum rendernderbilder:


texture1.RenderTexture(180,180,0);
			texture1.RenderTexture(180,180,90);
			texture1.RenderTexture(180,180,180);
			texture1.RenderTexture(180,180,270);

			texture1.RenderTexture(500,400);

F
Fab96 Themenstarter:in
66 Beiträge seit 2004
vor 18 Jahren

Habs nun endlich über Transformation2D verbessern können, ich kann nun um den mittelpunkt rotieren, aber trozdem hab ich noch immer dieseverzerrung, worran kann das liegen ?

wenn ich als skalierung 1f,1f angeben ist es ja orginal größe da ist es verzerrt, bei 1.5f,1.5f aber nicht mehr, oder nur noch sehr wenig.

Wie kommt das?

Ich hoffe es kann mal einer was dazu sagen da ich dasproblem seit 4-5Tagen habe und jedentag 2-5 stunden dransaß bisjetzt 🙁