Laden...

Flickerndes Dreieck

Erstellt von Blue_Dragon vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.225 Views
B
Blue_Dragon Themenstarter:in
198 Beiträge seit 2005
vor 17 Jahren
Flickerndes Dreieck

Hi Leute!

Also ich hab erst kürzlich mit Managed DirectX angefangen....

Ich hab mir ein Programm geschrieben das ein Dreieck zeichnen soll und dieses dann einfach mal ein bisschen im Raum herumfliegen lassen soll.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace Übung00
{
    public partial class Form1 : Form
    {

        private Device device = null;
        float angle = 0.0f;

        public Form1()
        {
            InitializeComponent();
            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
        }

        /// <summary>
        /// We will initialize our graphics device here
        /// </summary>
        public void InitializeGraphics()
        {
            // Set our presentation parameters
            PresentParameters presentParams = new PresentParameters();

            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;

            // Create our device
            device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            device.Clear(ClearFlags.Target, System.Drawing.Color.CornflowerBlue, 1.0f, 0);
            device.Present();

            SetupCamera();
            CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[3];
            verts[0].Position = new Vector3(0.0f, 1.0f, 1.0f);
            verts[0].Color = System.Drawing.Color.Aqua.ToArgb();
            verts[1].Position = new Vector3(-1.0f, -1.0f, 1.0f);
            verts[1].Color = System.Drawing.Color.Black.ToArgb();
            verts[2].Position = new Vector3(1.0f, -1.0f, 1.0f);
            verts[2].Color = System.Drawing.Color.Purple.ToArgb();

            device.BeginScene();
            device.VertexFormat = CustomVertex.PositionColored.Format;
            device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, verts);
            device.EndScene();
            device.Present();

            this.Invalidate();
        }

        private void SetupCamera()
        {
            device.RenderState.CullMode = Cull.None;
            device.RenderState.Lighting = true;
            device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 100.0f);
            device.Transform.View = Matrix.LookAtLH(new Vector3(0,0,5.0f), new Vector3(), new Vector3(0,1,0));
            device.Transform.World = Matrix.RotationAxis(new Vector3(angle / ((float) Math.PI * 2.0f), angle / ((float) Math.PI * 4.0f), angle / ((float) Math.PI * 66.0f)), angle / (float) Math.PI);
            angle += 0.1f;
        }
    }
}

Eigentlich soltle ich dadruch ein komplett schwarzes Dreieck im Raum herumfliegen lassen, doch ich bekomme ein leicht bläulich schimmerndes... Das meine Grafikkarte das nicht schafft kann ich mir nicht vorstellen da ich eine ziemlich Karte habe.

Kann es sein das ich mich mit dem Invalidate Befehl geirrt habe?

lg

B
Blue_Dragon Themenstarter:in
198 Beiträge seit 2005
vor 17 Jahren

Fällt niemanden etwas zu dem Problem ein?

Oder hab ich mich unklar ausgedrückt was mein Problem ist?

Bitte sagt es mir falls ich mich anders ausdrücken soll....

N
177 Beiträge seit 2006
vor 17 Jahren

OK, du willlst es nicht anders:

  1. Code selber erst mal lesen. (Nicht nur was das "schwarze Dreieck" betrifft.)
  2. Treffenden Titel wählen.
  3. Forumsuche benutzen.
E
265 Beiträge seit 2004
vor 17 Jahren

Original von nop

  1. Code selber erst mal lesen. (Nicht nur was das "schwarze Dreieck" betrifft.)

Stimm ich zu.
Wenn du dir deinen code genau durchliest (OnPaint) dann solltest den Fehler von alleine finden.

Original von nop
3. Forumsuche benutzen.

Und nach was soll er suchen? Das ist ein mini fehler, den wird man in keinem Forum finden, IMHO.

Dein Code macht folgendes.

Clear - Blue
Present
Draw Triangle
Present

Clear - Blue
Present
Draw Triangle
Present

Ich hoffe es ist dir jetzt klar welche Zeile du entfernen musst damit das flickern aufhört.

N
177 Beiträge seit 2006
vor 17 Jahren

Original von EvilTK
Und nach was soll er suchen? Das ist ein mini fehler, den wird man in keinem Forum finden, IMHO.

Dragon kann den Code weder selbst geschrieben noch ihn sich überhaupt angeschaut haben. Der Unterschied zu seiner Text-Beschreibung des Codes und dem tatsächlichen Code ist dafür bei weitem zu gross und schreit geradzu ins Auge (Stichworte: Code wird von der Grafikkarte ausgeführt, schwarzes Dreieck, Flickering). Es ist das bisher frechste Posting (einschliesslich unschuldig-ahnungslos tun), das ich hier seit meinem Einstieg gelesen habe.

E
265 Beiträge seit 2004
vor 17 Jahren

Hm, ich sollte mir mal den Post durchlesen ^^;; Ich hab den titel gelesen, mir die OnPaint methode angesehen und geantwortet.

*post les*

🤔 Also ich weis nicht.
Der Hauptteil kommt aus einem Tutorial. Aber wer fängt nicht mit einem Tutorial an?

> (Stichworte: Code wird von der Grafikkarte ausgeführt, ...
Hab ich nirgends gelesen.

> ... schwarzes Dreieck, Flickering)
Ich führe das eher auf learing by doing zurück. Er hat den tutorial code genommen und daran herumgespielt. Irgendwann kam ein flackerndes schwarzes dreieck heraus.

Wer aktiviert das licht ohne eine lichtquelle anzugeben? Nur die die es nicht wissen. Das extra Present kam wahrscheinlich dadurch zustande das er code rumkopiert hat.
Also ich nehme schon an das es sein code ist. (Ansonsten würd ich den tutorial schreiber verklagen 😁 )

> Es ist das bisher frechste Posting (einschliesslich unschuldig-ahnungslos tun), das ich hier seit meinem Einstieg gelesen habe.
Freches in seinem Posting konnt ich auch nicht erkennen ...
Außerdem, "Dabei seit: 11.03.2006", Wundert mich nicht das du noch nix erlebt hast 😁 (der war jetzt gemein 8))

@Blue_Dragon wenn du wieder on bist sag bescheid ob du es zum laufen gebracht hast.

B
Blue_Dragon Themenstarter:in
198 Beiträge seit 2005
vor 17 Jahren

Danke!

Ich hatte den SourceCode aus einem Tutorial und hab mir ein Videoruntergeladen wo das Dreick so aussehen sollte.... was es bei mir aber nicht tat.
Und weil ich erst in den Anfängen von DirectX bin wusste ich nicht das es mit dem Present falsch war.... ich dachte das muss sein weil es im Tutorial so im Code gestanden ist.

lg