Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 12:07

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Frage zur nutzung von Shadern
BeitragVerfasst: Fr Jul 16, 2010 01:58 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
ok, ich habe wiedermal viel im Wiki geblättert und nachgedacht
nun habe ich eine ganze reihe von funktionen aneinandergereit um die fensterkoordinaten rauszubekommen

das ganze sieht nun so aus

Code:
    glGetDoublev(GL_MODELVIEW_MATRIX, ModelVievMatrix);
    glGetDoublev(GL_PROJECTION_MATRIX, ProjectionMatrix);
    glGetIntegerv(GL_VIEWPORT, ViewPort);
    gluProject(fPosX-15, fPosY-15, fPosZ, ModelVievMatrix, ProjectionMatrix, ViewPort, LinksUntenX,  LinksUntenY,  LinksUntenZ);
    gluProject(fPosX-15, fPosY+15, fPosZ, ModelVievMatrix, ProjectionMatrix, ViewPort, LinksObenX,   LinksObenY,   LinksObenZ);
    gluProject(fPosX+15, fPosY-15, fPosZ, ModelVievMatrix, ProjectionMatrix, ViewPort, RechtsUntenX, RechtsUntenY, RechtsUntenZ);
    Hoehe := LinksUntenY - LinksObenY;
    Breite := RechtsUntenX - LinksUntenX;

    glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 20, 20, LinksUntenX, LinksUntenY, Breite, Hoehe);


nun gibt mir aber glGetDoublev ein PGLDouble zurück, gluProject benötigt allerdings ein TGLMatrixd4
der viewport mit glGetIntegerv funktioniert jedoch

desweiteren wollte ich mal fragen was PGLDouble ist und wie ich das in einen nützlichen typ umwandeln kann, da die funktionen ja damit arbeiten, glCopyTexSubImage2D allerdings Integer von mir fordert

theoretischer weise müsste ich nun nur noch PGLDouble zu Double machen und danach zu Integer (ich will die kommastellen für alle berechnungen behalten damit die rundung später so genau wie möglich passiert) und dann sollte ich den richtien ausschnitt auf meinem bildschirm ausgewählt haben um mit hilfe des shaders meine "Lampe" zu verwischen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur nutzung von Shadern
BeitragVerfasst: Fr Jul 16, 2010 07:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
PGLDouble ist ein Pointer auf ein GLdouble. Du gibst glGetDoublev einen Pointer auf ein Array mit 16 GLdouble welches dann gefüllt wird. TGLMatrixd4 dürfte auch nichts anderes sein als ein Speicherbereich mit 16 GLdoubles.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur nutzung von Shadern
BeitragVerfasst: Fr Jul 16, 2010 10:31 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
€: beitrag gelöscht wegen unüberlegt :D

€2 : also irgendwie versteh ich das nich so richtig, PGLDouble ist also ein array nur bringt mich das nich weiter weil das ja immernoch nicht kompatibel zu TGLMatrixd4 ist


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur nutzung von Shadern
BeitragVerfasst: Fr Jul 16, 2010 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
PGLDouble ist halt ein Zeiger auf mindestens einen Doublewert, und je nach Funktion der du diesen Wert übergibst will OpenGL hinter diesem Pointer mehr oder weniger Werte. Denn auch eine Matrix, egal wie sie aufgebaut ist, liegt in der Regel so im Speicher dass alle Werte direkt hinterinander liegen, deshalb kann man so auch direkt mit dem @-Operator Matrizen an OpenGL übergeben als Zeiger auf das erste Element (z.b. @MyMatrix[0], unter Delphi sollte aber auch @MyMatrix gehen).

Bei gluProjekt kannst du daher z.b. direkt @LinksUntenX etc. schreiben, also einen Zeiger auf ein Double was dann PGLDouble entspricht.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur nutzung von Shadern
BeitragVerfasst: Fr Jul 16, 2010 11:03 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
Zitat:
Bei gluProjekt kannst du daher z.b. direkt @LinksUntenX etc. schreiben, also einen Zeiger auf ein Double was dann PGLDouble entspricht.


danke das du meinen gedanken bestätigst,

ich schreibe das ganze gerade um und kontrolliere ob sinnvolle werte ankommen, dem scheint nämlich nicht so, noch nicht ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur nutzung von Shadern
BeitragVerfasst: Fr Jul 16, 2010 11:35 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
ok, langsam aber sicher gehen mir die optionen aus :(

ich hab den shader eingelesen kompiliert gebunden mit variablen gefüttert und am ende auch genutzt, aber wie immer nur ein schwarzes bild

ich lasse die position des bildes das verschwimmen soll nun berechnen und nutze diese ergebnisse die recht brauchbar aussehen, es ist nicht perfekt aber man kann sie nutzen

aber irgenwo liegt noch ein fehler, mein lösungsansatz sieht nun so aus

die kugel mit dem viereck zeichnen
Code:
    glBindTexture(gl_Texture_2D, fTex);
    glTranslatef(fPosX,fPosY,fPosZ);
    glBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR);
    gldisable(GL_Blend);
    glColor4f(fColorR, fColorG, fColorB, fAlpha);
    gluSphere(fMesh, 10, 15, 13);
    FXBillBoardBegin;
      glBegin(GL_QUADS);
        glTexCoord2D(-1,-1);
        glVertex3f(fPosX-15,fPosY-15,fPosZ);
        glTexCoord2D(-1, 1);
        glVertex3f(fPosX-15,fPosY+15,fPosZ);
        glTexCoord2D( 1, 1);
        glVertex3f(fPosx+15,fPosY+15,fPosZ);
        glTexCoord2D( 1,-1);
        glVertex3f(fPosX+15,fPosY-15,fPosZ);
      glEnd;
    FXBillBoardEnd;


hier hole ich mir die matrizen und die werte des vierecks

Code:
    glGetDoublev(GL_MODELVIEW_MATRIX, @ModelVievMatrix);
    glGetDoublev(GL_PROJECTION_MATRIX, @ProjectionMatrix);
    glGetIntegerv(GL_VIEWPORT, @ViewPort);
    gluProject(fPosX-15, fPosY-15, fPosZ, ModelVievMatrix, ProjectionMatrix, ViewPort, @LinksUntenX,  @LinksUntenY,  @LinksUntenZ);
    gluProject(fPosX-15, fPosY+15, fPosZ, ModelVievMatrix, ProjectionMatrix, ViewPort, @LinksObenX,   @LinksObenY,   @LinksObenZ);
    gluProject(fPosX+15, fPosY+15, fPosZ, ModelVievMatrix, ProjectionMatrix, ViewPort, @RechtsUntenX, @RechtsUntenY, @RechtsUntenZ);
    gluProject(fPosX+15, fPosY-15, fPosZ, ModelVievMatrix, ProjectionMatrix, ViewPort, @RechtsObenX,  @RechtsObenY,  @RechtsObenZ);

    Hoehev := round(LinksUntenY - LinksObenY);
    Breitev := round(RechtsUntenX - LinksUntenX);
    Hoehei := round(Hoehev);
    Breitei := round(Breitev);

    glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 20, 20, round(LinksUntenX), round(LinksUntenY), Breitei, Hoehei);


nun übergebe ich das bild an den shader und binde es um es neu zu zeichnen
Code:
  glBindTexture(gl_Texture_2D, fBlurTex);
    glUniform1i(glGetUniformLocation(ProgramObject, PGLCharARB('Texture')), 0);
    glUseProgram(ProgramObject);
    FXBillBoardBegin;
      glBegin(GL_QUADS);
        [...]
     glend;
   [...]


eigentlich müsste alles stimmen, ich hab alles geprüft, nur funktionieren will es nicht


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur nutzung von Shadern
BeitragVerfasst: Fr Jul 16, 2010 12:12 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Mach doch einfahc mal ein Miniprojekt mit dem Shader und stell das hier rein. Vielleicht ist das problem wo ganz anders.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur nutzung von Shadern
BeitragVerfasst: Fr Jul 16, 2010 12:29 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
joa das is auch ne möglichkeit warte das haben wir gleich

€ da isses

der Shader und alles rendertechnisch interessante befindet sich in der SpotLight.pas, ich hoff es is nicht allzu sehr unübersichtlich

Demo


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]