Du bist nicht angemeldet.

Werbeanzeige

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 26

Wohnort: Berlin

Beruf: Entwickler

  • Private Nachricht senden

1

27.10.2015, 08:20

IntersectColor

Hallo zusammen,

ich durchschneide ein Objekt mit einer transparenten Plane. Ich möchte das die Schnittflächen eingefärbt werden.

Das löse ich im Moment sehr kompliziert indem ich auf der geraden die unterliegenden Z Ordinaten mit GL_POINT auf die Transparente Intersektionsplane schreibe.
Nun gibt es aber Möglichkeiten über Stencilbuffer Colorbuffer Blend Eigenschaften usw. diesen Effekt zu ermöglichen.
Weiß jemand wie das technisch aussehen kann ?

So ist es zu kompliziert und unsauber:

(Link)

Schrompf

Alter Hase

Beiträge: 1 428

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

2

27.10.2015, 08:26

Mit nem Fragment Shader sollte das ein Fünfminüter sein. Schnittebene in den Shader reinreichen, Weltposition im Fragmentshader errechnen, Punkte in Epsilonumgebung der Schnittebene umfärben.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

27.10.2015, 11:02

Du könntest einen ähnlichen Ansatz nutzen wie für Softpartikel: also im Pixelshader den Abstand von Fragment-Depth/Scene-Depth verwenden um die Schnittlinie einzufärben. Siehe auch hier: (Slide 26 "Intersection Highlights")
@D13_Dreinig

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 26

Wohnort: Berlin

Beruf: Entwickler

  • Private Nachricht senden

4

27.10.2015, 11:39

Hi,

Stichwort IntersectHighlight.. so hat das Kind schon mal einen Namen :)

"Shader" Da muss ich forschen wie ich das nun integriere.

lacht.. in 5 Minuten würde ich nichtmal die Codeststelle finden^..

Vielen Dank für die Hinweise, und toller Link der Knabe hat's ja fett^^

Lg.
K aus B

Schrompf

Alter Hase

Beiträge: 1 428

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

5

27.10.2015, 12:16

Ah. Oh. Ach herje. Ohne Shader? Mein Beileid.

Was klappen könnte:

- Stencil Buffer clearen
- Modell rendern
- Ebene minimal weiter vorn mit Stencil Pass Op "bit setzen"
- Ebene minimal weiter hinten mit Stencil Pass Op "bit löschen"
- Fullscreen Pass oder Modell nochmal rendern mit Stencil Test auf diesem Bit und "Bunt"
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 26

Wohnort: Berlin

Beruf: Entwickler

  • Private Nachricht senden

6

29.10.2015, 04:12

Hi,

Zitat

h. Oh. Ach herje. Ohne Shader? Mein Beileid.


Naja das ist etwas schwierig, ich habe ein riesen Projekt basierend auf OpenGL2.0 dort war seiner Zeit der Wrapper für die GL Funktionen in der
GLS verkapselt, so habe ich bis heute als glLoder die Dateien gls.h,gls.cpp,glsu.h,WGLEXT.H und glext.h

Die haben die noch nicht die glShader funktionen gelistet, nun wollte ich auch da nicht manuel diese nachtragen sondern den neuen Wrapper glew
verwenden, das kollidiert jedoch dermaßen, das eine Anpassung sehr schwer ist.

Glut nutze ich nicht , sondern erzeuge den Context manuel aus den WGL Pixelformatherleitungen.
So kommt es, das ich mit dem riesen Projekt immer auf GL2.0 verbleibe. Versuche das mit glew zu compilieren sind nervig gescheitert.

Ich habe seiner zeit schon die ARB VBO's manuel in die Funktionslisten nachgetragen, sehr wohl ist einem dabei nicht, bei kleinsten
Änderungen in der OpenGL.Dll kann das schnell nach hinten losgehen.

Stattdessen nutze ich das NVIDIA SDK Cuda und missbrauche die shader etwas anders. Ich wünschte ich könnte das glew SDK einmal zum laufen bringen sehr ärgerlich ist das.

Grüße Karsten

Tobiking

1x Rätselkönig

  • Private Nachricht senden

7

29.10.2015, 08:48


Ich habe seiner zeit schon die ARB VBO's manuel in die Funktionslisten nachgetragen, sehr wohl ist einem dabei nicht, bei kleinsten
Änderungen in der OpenGL.Dll kann das schnell nach hinten losgehen.

Ich hoffe mal du holst dir mit wglGerProcAdress die Adresse der Funktionen und weist die dann Funktionszeigern zu. Dann brauchst du dir keine Sorgen machen. Das ist der Standardmechanismus seit 15 Jahren und ohne dem würde jede Anwendung die OpenGL > 1.1 nutzt nicht mehr laufen.

Ansonsten klingen deine Ausführungen etwas merkwürdig, weil du ohne Extensions unter Windows ebend auch kein OpenGL > 1.1 nutzt, deiner Aussage nach aber OpenGL 2.0 die Basis ist.

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 26

Wohnort: Berlin

Beruf: Entwickler

  • Private Nachricht senden

8

29.10.2015, 10:05

khronos

Hallo,

ja ohne GetProcAdress wirds schwer ^^ ich benutze seit 1997 das khronos SDK von/mit SDL um GL zu wrappen. das neue glew-1.13.0 kollidiert vollkommen mit
der Ansprechweise über Zahlreiche funktionen wenn ich das ersetzen möchte. Bereits 2006 habe ich die Header aus 1.1 zu 2.0 abgeglichen bezüglich ARP & EXT für die VBO's
das war noch im Rahmen weil es extensionen sind. glShaderCompile usw.. sind aber nun Standard.
Es tut sich nicht gut in einem sdk herumzubasteln, man kann neues nicht mehr drüber schieben.

Mein OpenGL Wrapper sieht im Prinzip so aus: KronusSDL-SDK

Wird über die Klasse OpenGL::Create ausgelöst . Idee war nun im Header GLExtensions.h das neue SDK zu includen: //#include "GL/glew.h"
löst eine Kaskade von kollisionen aus. Bin mir nicht sicher ob ich diesen Anschluss je nochmal herstellen kann.

Danke für deine Hinweise,
Grüße
Karsten


Nachtrag ich habe das nun manuel in das gls.cpp dazu gedudelt scheint zu funktionieren, fein ist das nicht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
            //Maual Shader Load by KS 29.10.2015
        typedef void (APIENTRY * PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
        typedef void (APIENTRY * PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLbyte* name);
        typedef void (APIENTRY * PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
        typedef void (APIENTRY * PFNGLCOMPILESHADERPROC) (GLuint shader);
        typedef GLuint(APIENTRY * PFNGLCREATEPROGRAMPROC) (void);
        typedef GLuint(APIENTRY * PFNGLCREATESHADERPROC) (GLenum type);
        typedef void (APIENTRY * PFNGLDELETEPROGRAMPROC) (GLuint program);
        typedef void (APIENTRY * PFNGLDELETESHADERPROC) (GLuint shader);
        typedef void (APIENTRY * PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);

        //Maual Shader Load by KS 29.10.2015
        PFNGLATTACHSHADERPROC glAttachShader = NULL;
        PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation = NULL;
        PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate = NULL;
        PFNGLCOMPILESHADERPROC glCompileShader = NULL;
        PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
        PFNGLCREATESHADERPROC glCreateShader = NULL;
        PFNGLDELETEPROGRAMPROC glDeleteProgram = NULL;
        PFNGLDELETESHADERPROC glDeleteShader = NULL;
        PFNGLDETACHSHADERPROC glDetachShader = NULL;
    
        //Maual Shader Load by KS 29.10.2015
        DYNALINK_GL_FUNCTION("glAttachShader");
        DYNALINK_GL_FUNCTION("glBindAttribLocation");
        DYNALINK_GL_FUNCTION("glBlendEquationSeparate");
        DYNALINK_GL_FUNCTION("glCompileShader");
        DYNALINK_GL_FUNCTION("glCreateProgram");
        DYNALINK_GL_FUNCTION("glCreateShader");
        DYNALINK_GL_FUNCTION("glDeleteProgram");
        DYNALINK_GL_FUNCTION("glDeleteShader");
        DYNALINK_GL_FUNCTION("glDetachShader");

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »KahnSoft« (29.10.2015, 11:24)


Schrompf

Alter Hase

Beiträge: 1 428

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

9

29.10.2015, 11:59

Ich schrieb ja schon, dass Du das Ganze auch mit dem Stencil Buffer lösen kannst. Das hattest Du gelesen?
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 26

Wohnort: Berlin

Beruf: Entwickler

  • Private Nachricht senden

10

29.10.2015, 12:29

Das werde ich ausprobieren, das mit den shadern war natürlich die nervige Ecke , und habe mich da anstiften lassen dort mal zu wirken.
Stencil teste ich im Anschluss. Ist schon mal gut ab und an sich auszutauschen.

Thx.

Gruß
Karsten

Werbeanzeige