Billboarding-Problem mit c# direct3d
-
Ich hab einen 3D Text mit einem mesh erzeugt den ich immer zu dem benutzer gedreht haben möchte ohne das sich die Position verändert(billboarding). Ich mein das die Zahl im koordinatensystem immer an der gleichen position bleibt, aber immer zum betrachter gedreht ist.
irgendwie klappt das aber nicht so wie ich das will... Es scheitert an der Mathematik. Hat hier jemand die durchsicht und sieht wie ich welche matrix miteinander verrechnen muss?
Der folgende Auszug ist meine rendermethode. Ich habe nach einigen strukturierten versuchen einfach mal weiter rumprobiert, demensprechend funktioniert es momentan immer noch nicht

mesh3DText soll hierbei immer zum benutzer gedreht sein :
public void Render() { Material material = new Material(); device.BeginScene(); //==========================================================================// // render something for (int i = 0; i < meshes_to_sign; i++) { if (activeMesh == mesharray[i]) device.RenderState.FillMode = FillMode.WireFrame; else device.RenderState.FillMode = FillMode.Solid; mesharray[i].DrawSubset(0); loecher[i].DrawSubset(0); } device.VertexFormat = Vertex.FVF_Flags; device.SetStreamSource(0, vertexBuffer, 0); device.DrawPrimitives(PrimitiveType.LineList, 0, 3); Bez_Achse_x.DrawText(null, "Hello World", 100, 10, Color.Red); /* start billboarding */ Matrix m_inv_cam = Matrix.Invert(Matrix.Translation(new Vector3(0, 0, camDistance))); Matrix m_turn = Matrix.RotationYawPitchRoll(Geometry.DegreeToRadian(distX), Geometry.DegreeToRadian(distY), 0.0f); Matrix m_inv = Matrix.Invert(device.Transform.World); device.Transform.World = Matrix.Identity; device.Transform.World *= /*Matrix.Translation(new Vector3(0, 0, camDistance));// */ Matrix.Translation(new Vector3(1,1,1)); mesh3DText.DrawSubset(0); /* end billboarding */ device.Transform.World = Matrix.RotationYawPitchRoll(Geometry.DegreeToRadian(distX), Geometry.DegreeToRadian(distY), 0.0f) * Matrix.Translation(new Vector3(0, 0, camDistance)); //device.Transform.World = device.Transform.World * m3DText; //=========================================================================// device.EndScene(); device.Present(); }hat jemand eine idee?
Gruss Trider
-
Hiermit bleibt die Position erhalten, aber ich schaff es nicht das der Text zu mir gedreht ist :
Matrix m_turn = Matrix.RotationYawPitchRoll(Geometry.DegreeToRadian(distX), Geometry.DegreeToRadian(distY), 0.0f); device.Transform.World = Matrix.Identity; device.Transform.World = m_turn * Matrix.Translation(new Vector3(0, 0, camDistance)); mesh3DText.DrawSubset(0);...
Gruss Trider
-
du wirst dein mesh ja vermutlich irgendwie so erzeugen, dass es bei nicht-transformierter kamera "richtig" ausgerichtet ist.
damit es so ausgerichtet bleibt, wird das mesh einfach mit der inversen (3x3) kamera-matrix transformiert, was zusammen wieder identity ergibt.
-
ich glaub mien fehler liegt nicht nur dort...
hab mal versucht mit
device.Transform.World = Matrix.Identity; mesh3DText.DrawSubset(0); device.Transform.World = Matrix.RotationYawPitchRoll(Geometry.DegreeToRadian(distX), Geometry.DegreeToRadian(distY), 0.0f) * Matrix.Translation(new Vector3(0, 0, camDistance));den text darzustellen...
er erscheint nicht auf dem bildschirm, selbst nicht wenn ich ihn suche... Ich glaub meine ganze Kameralogic is reif für die Mülltonne....