Du bist nicht angemeldet.

  • Anmelden
  • Registrieren

ValloV

unregistriert

1

18.06.2004, 00:03

[Tutorial]Wireframemode

fuern wireframe mode bruachen wir nur glbegin zu hooken, als erstes muessen wir schauhen ob hl waende ect. drawen will, das machen wir mit einer if GL_POLYGON abfrage. also naechstes setzten wire den wireframe mode mit (*orig_glPolygonMode)(GL_FRONT_AND_BACK,GL_LINE), damit werden die texturen als lienien dargestellt, mit (*orig_glLineWidth)(1.0f) koennen wir die dicke der linien einstellen und mit (*orig_glColor3f)(0.0f,1.0f,0.0f) koennen wir die farbe bestimmen, was in diesem fall gruen waer(r,g,b). um keine bugs zu erhalten schauhen wir als naechstes ob hl !keine waende zeichnen will, z.b. mit if(mode != GL_POLYGON) oder mit if(mode == GL_TRIANLES || mode == GL_TRIANGLE_FAN || mode == GL_TRIANGLE_STRIP), dann fuellen wir die texturen wieder aus mit (*orig_glPolygonMode)(GL_FRONT_AND_BACK,GL_FILL). im endeffekt duerfte es dann ungefaehr so aussehen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void sys_glBegin(GLenum mode)
{
if(mode == GL_POLYGON)
{
(*orig_glPolygonMode)(GL_FRONT_AND_BACK,GL_LINE);
(*orig_glLineWidth)(1.0f);
(*orig_glColor3f)(0.0f,1.0f,0.0f);
}
else if(mode == GL_TRIANGLES || mode == GL_TRIANGLE_STRIP || mode == GL_TRIANGLE_FAN)
{
(*orig_glPolygonMode)(GL_FRONT_AND_BACK,GL_FILL);
}
(*orig_glBegin)(mode);
}


ihr muesst jedoch dann noch den buffer clearen da sonst die frames ineinander laufen, dazu koennt ihr euch das asuswh tut anschauhen, dort ist der code beschrieben und ihr solltet auch nosky einfuegen(ebenfalls im asuswh tut beschrieben da es sich sonst nicht allzugut spielen laesst).

thunderstorm

unregistriert

2

18.06.2004, 00:07

Aehm würd im tutorial noch das mit gl_clear machen sonst haut dir der wireframe den sky kapput!

Das ist dann nicht schön so gekrizeltets schwarz

ValloV

unregistriert

3

18.06.2004, 10:54

dann schau mal was ich unter den code geschrieben habe.. aber hier ist halt nochmal der code zum buffer leeren und fuern no sky:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool dSky = false;

void sys_glBegin(GLenum mode)
{
if(mode == GL_QUADS)
{
dSky = true;
}
else
{
dSky = false;
}
(*oirg_glBegin)(mode);
}


hier fragen wir ob hl den himmel zeichnen will und falls ja setzen wir eine variable(dSky) auf wahr und falls nicht auf nein.

Quellcode

1
2
3
4
5
6
7
8
9
void sys_glClear(GLbitfield mask)
{
if(mask == GL_DEPTH_BUFFER_BIT)
{
(*orig_glClearColor)(0.0f, 0.0f, 0.0f, 0.0f);
mask = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT;
}
(*orig_glClear)(mask); 
}


hiermit wird der buffer alle frames entleert damit diese nichtmehr in einander laufen koennen und ihr keinen abgefuckten nosky oder transwall bzw. wireframe mode habt

Quellcode

1
2
3
4
5
6
7
8
void sys_glVertex3fv(const GLfloat *v)
{
if(dSky)
{
return;
}
(*orig_glVertex3fv)(v);
}


hiermit wird verhindert das hl die himmeltexture zeichnet und deshalb wird der sky schwarz dargestellt.

Thema bewerten