Laden...

Problem: Direct3D und Z-Achse

Erstellt von Raptor 2101 vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.297 Views
R
Raptor 2101 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren
Problem: Direct3D und Z-Achse

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....?

C
1 Beiträge seit 2009
vor 15 Jahren

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.

R
Raptor 2101 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren

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...

R
Raptor 2101 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren

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...