Hier erstmal 2 bilder die das problem zeigen (Bilderer im anhang)
da wird ein dreieck um die x achse rotiert anstatt es korrekt darzustellen wird es jedoch zercuttet...
Normalerweise sollte es unter dem X Strahl weiter gehen
beim ersten render ist alles ok, sobald man das dreieck aber nur um ein "my" rtiert falckert es wild rumm...
init-Code
DisplayMode displayMode = Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode;
var pps = new PresentParameters
{
Windowed = true,
SwapEffect = SwapEffect.Discard,
EnableAutoDepthStencil = true,
AutoDepthStencilFormat = DepthFormat.D16,
PresentationInterval = PresentInterval.Default,
BackBufferFormat = displayMode.Format,
DeviceWindow = drawingContext,
DeviceWindowHandle = drawingContext.Handle
};
device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, drawingContext,
CreateFlags.SoftwareVertexProcessing, pps);
RenderState
device.Clear(ClearFlags.Target|ClearFlags.ZBuffer, backgroundColor, 1.0f, 0);
device.RenderState.CullMode = Cull.Clockwise;
device.RenderState.Clipping = false;
device.RenderState.DitherEnable = true;
device.RenderState.StencilEnable = true;
device.RenderState.AlphaBlendEnable = true;
device.RenderState.SourceBlend = Blend.SourceAlpha;
device.RenderState.DestinationBlend = Blend.DestinationAlpha;
device.RenderState.Lighting = false;
device.RenderState.ZBufferEnable = true;
device.RenderState.ZBufferWriteEnable = true;
var triangle = new CustomVertex.PositionColored[4];
triangle[0] = new CustomVertex.PositionColored { Position = new Vector3(0.2f, 0.2f, -0f), Color = Color.White.ToArgb() };
triangle[1] = new CustomVertex.PositionColored { Position = new Vector3(0.2f, -0.2f, -0f), Color = Color.White.ToArgb() };
triangle[2] = new CustomVertex.PositionColored { Position = new Vector3(-0.2f, 0.2f, -0f), Color = Color.White.ToArgb() };
device.VertexFormat = CustomVertex.PositionColored.Format;
device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, triangle);
jemand eine idee....?
Setze:
device.RenderState.CullMode = Cull.None;
Dadurch ist das Dreieck von beiden Seiten sichtbar.
Wenn du etwas testweise per Frame rotierst, solltest du sehr kleine Abstände wählen, z.B. rot+=0.01 oder so. Die Rotationen werden nämlich in rad angegeben (0 bis 2*PI) und nicht in 0° bis 360° Winkel.
Noch was:
var triangle = new CustomVertex.PositionColored[4];
Du hast hier einen Array für 4 Vertices, 3 würden ausreichen.
Falls das Problem ein anderes ist hab ich es nicht verstanden.
erstmal danke das du dich für diesen post angemeldet hast. Cull.None bringt mir hier nichts, da nichtmal die eine seite richtig dargestellt wird ... (ich beachte wierum ich die Vertices angebe...)
das mit den Winkelangaben in Boogenmaß weiß ich, ich Konvertiere alles 😉
4 statt 3 vertices-> ich weiß, ich stell ja nicht nur ein dreieck dar, das ist ein Testbild...
hier mal das Problem mit meinem eigendlichen Problem... Bild1
Hier ist eine normale Darstellung zu sehen. Die Texte sind über sprites gelöst, die Linien über LineStrips. Das ganze befindet sich in der X/Y Ebene mit Koordinaten im sin(angle)*r|cos(angle)*r- Bereich (kreise halt ^^) soweit alles palettie funktioniert auch prima und ich hab SUPER Frameraten (G der muste sein)
Solange ich die Szene um die Z achse rotere (kreis rechts/links drehen) ist auch noch alles OK
nur bei Drehungen um X|y wirds kritisch: Bild2
Hier wurde das bild um die X Achse gekippt. Wie zu sehen ist werden die sprites korreckt angeordnet (über vector3.Project). Aber die Lines werden Gecutet. und das auch irgendwie unsinnig...
Ok Fehler gefunden, die Projectionsmatrix (DirectX.Device.Transform.Projection) ist mit komischen werden vorbesetzt... wenn man sie richtig initialisiert (1,1,-2,2) werden die objekte koreckt dargestellt...