Laden...
U
userid11997
myCSharp.de - Member
93
Themen
400
Beiträge
Dabei seit
07.05.2008
Erstellt vor 12 Jahren

Alles klar, dann mach doch folgendes:

  1. Den Renderer (also deine methode, in der du blending und so setzt) ganz am ANFANG deiner Darstellungsschleife aufrufen, da du sonst erst auf Texturen zugreifst und diese dann erst verfpgbar machst.

  2. Wenn du einen Alphawert setzt, überschreibst du die Farbe deiner Textur und diese wird wiederum sichtbar. Verwende statdessen Color3f

  3. Etwas grundlegendes über OpenGL "OpenGL ist eine Zustandmaschine, dass heißt, dass ein gesetzter Zustand bis zu dessen Aufhebung aktiv bleibt".
    Du musst lediglich ein mal vor dem Aufruf von Gl.Begin eine Textur binden, die dann auf die in Gl.Begin definierte Struktur angewendet wird. Um eine Textur wieder zu "entladen" verwende einfach Gl.glBindTexture(Gl.GL_TEXTURE_2D, 0);

Warum setzt du hier mehrmals die Farbe?
Tue ich nicht, jeder Vertext bekommt eine Farbe verpasst.

Dann solltest du keine Texturen verwenden oder eben die Farbe auf 3 Komponenten reduzieren.

Erstellt vor 12 Jahren

Verushc doch einfach mal statt zwei TYPINSTANZEN die WERTE für den Construktor anzugeben. Was vermutlich passiert ist folgendes, du übergibst 2 dem Activator zwei Typinstanzen mit typeof(), dieser such dann nach einem passenden Constructor mit den Parametern Type,Type und das schlägt dann fehl.

Erstellt vor 12 Jahren

Moin,

nur eine kurze Frage:
Wenn ich einen Satz Shader habe, der beispielsweise ein Partikelsystem darstellt und mit jedem Frame die Partikel in Größe, Farbe und Position verändert, werden die Variablen, wenn ich sie innerhalb meiner Main setze, bei jedem Durchlauf der Pipelin wieder zurückgesetzt oder bleiben diese auf dem Wert des letzten durchlaufs stehen?

Wenn ja, ist dies bei allen Typen so oder nur bei Uniforms?

Erstellt vor 12 Jahren

Schau dir bitte die Fragen in deinem Quellcode einmal an und versuche diese zu beantworten.


private static void DrawImmediateModeVertex(Vector pos, Color color, Point uvs)
        {
            //Wird hier ein Alphawert gesetzt?, wen ja welcher?
            Gl.glColor4f(color.Red, color.Green, color.Blue, color.Alpha);
            Gl.glTexCoord2f(uvs.X, uvs.Y);
            Gl.glVertex3d(pos.X, pos.Y, pos.Z);
        }

        public void DrawSprite(Sprite sprite)
        {
            Gl.glBegin(Gl.GL_TRIANGLE_STRIP);
            {
                for (var i = 0; i < sprite.VertexAmount; i++)
                {
                    //Warum bindest du hier mehrmals dieselbe Textur?
                    Gl.glBindTexture(Gl.GL_TEXTURE_2D, sprite.Texture.TextureId);
                    DrawImmediateModeVertex(sprite.VertexPositions[i],
                    //Warum setzt du hier mehrmals die Farbe?
                        sprite.VertexColors[i], sprite.VertexUVs[i]);
                }
            }
            Gl.glEnd();
        }

Wann und wo rufst du Renderer auf?
Ich nehme mal an, dass du Renderer auch vor dem laden deiner Texturen aufrufst?

Vor allem bei mir funktionierts einwandfrei. Das Logo in der Mitte und der Text sind jeweils texturierte Quads.

Erstellt vor 12 Jahren

Verwende einfach folgendes um eine 32bpp Alphachaneltextur zu laden

var bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                             ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);

            Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, bitmap.Width, bitmap.Height, 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, bitmapData.Scan0);

Dann aber die Belndfunction nicht vergessen (sowohl beim erzeugen, als auch beim rendern)

GL.Enable(Blend);
                    GL.BlendFunc(SrcAlpha, OneMinusSrcAlpha);

Da zwar der Alphakanal gesetzt ist, der aber den alpha nicht verwendet. Hier wird dann der alphasource zum blenden verwendet.

Erstellt vor 12 Jahren

Einfach wie in Texture Mapping die Bitmapdaten laden, den Pointer an OGL und wieder freigeben.

Wenn die Darstellung fehlschläg, bist du sicher, dass deine Texturkoordinaten richtig sind?
Ansonsten kanns nurnoch n Parameterfehler in der Methode sein.

Erstellt vor 12 Jahren

Am besten lädst du dir die Textur selber. Da das ja nur in seltenen fällen mehr als ein 4 Zeiler ist und das in jedem Tutorial irgendwannd rann kommt, würd ich das lieber so machen.

Was ist denn genau die Fehlermeldung?

Erstellt vor 12 Jahren

Moin,

ich habe mir überlegt einen flexiblen ErrorManager zu schreiben. Dazu möchte ich sowas machen wie


ErrorManager.Begin(SektionID);

//critical Code
...
ErrorManager.Log("some log message");

ErrorManager.End(SektionID);

Gibt es da eine Möglichkeit fehler abzufangen, die auf den Try-Catch-Block verzichtet?

Erstellt vor 13 Jahren

Du könntest es dem NN etwas einfacher machen, schließlich lernt ein Mensch auch nur durch Erfolg und Misserfolg. Du könntest also ein paar einfachere testformeln erzeugen, die du dein NN solange machen lässt bis esdas richtige Ergebnis ausspukt.
Um sich das merken zu können bräuchte dein NN ein Gedächtnis, in das es positive (also erfolgreiche) Ergebnisse ablegt um es dann mit anderen Aufgaben assoziieren zu können.

Erstellt vor 13 Jahren

Kurz gesagt, alles was dem Anwender/Entwickler der Engine interessiert. Dazu zählt sicherlich die Menge des VRam zu entwicklungs/initialisierungs Zeiten für die größe der Modelle und die Detailtiefe von Texturen/Texturlevels, oder eben die Temperatur oder der Akkustatus (gehört jetzt nicht zur GH) im Spiel oder in der Anwendung, dass die Anwendung Crashes bereits vorhersagen und entsprechend reagieren kann.

Bisweilen beschränkt auf den Windows-Treiber, Linux und Mac kommt später.