mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-12 14:10:34 +05:00
fix for coloring on quad elements, transparent clipping plane
This commit is contained in:
parent
affda364a2
commit
4ea8277920
@ -366,7 +366,14 @@ namespace netgen
|
|||||||
clipplane[2] = n.Z();
|
clipplane[2] = n.Z();
|
||||||
clipplane[3] = -(Vec3d(center) * n) + rad * vispar.clipping.dist;
|
clipplane[3] = -(Vec3d(center) * n) + rad * vispar.clipping.dist;
|
||||||
|
|
||||||
glClipPlane(GL_CLIP_PLANE0, clipplane);
|
double clipplane2[4];
|
||||||
|
clipplane2[0] = n.X();
|
||||||
|
clipplane2[1] = n.Y();
|
||||||
|
clipplane2[2] = n.Z();
|
||||||
|
clipplane2[3] = -(Vec3d(center) * n) +
|
||||||
|
rad * (vispar.clipping.dist + vispar.clipping.dist2);
|
||||||
|
|
||||||
|
glClipPlane(GL_CLIP_PLANE0, clipplane2);
|
||||||
glEnable(GL_CLIP_PLANE0);
|
glEnable(GL_CLIP_PLANE0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -462,7 +469,7 @@ namespace netgen
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VisualScene :: CreateTexture (int ncols, int linear, int typ)
|
void VisualScene :: CreateTexture (int ncols, int linear, double alpha, int typ)
|
||||||
{
|
{
|
||||||
if (linear) ncols = 32;
|
if (linear) ncols = 32;
|
||||||
else ncols = 8;
|
else ncols = 8;
|
||||||
@ -502,7 +509,7 @@ namespace netgen
|
|||||||
colortexture[4*i] = GLubyte (255 * col[0]);
|
colortexture[4*i] = GLubyte (255 * col[0]);
|
||||||
colortexture[4*i+1] = GLubyte (255 * col[1]);
|
colortexture[4*i+1] = GLubyte (255 * col[1]);
|
||||||
colortexture[4*i+2] = GLubyte (255 * col[2]);
|
colortexture[4*i+2] = GLubyte (255 * col[2]);
|
||||||
colortexture[4*i+3] = GLubyte(255);
|
colortexture[4*i+3] = GLubyte(255*alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
// glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
// glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
||||||
@ -547,7 +554,7 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
if (!vispar.drawcolorbar) return;
|
if (!vispar.drawcolorbar) return;
|
||||||
|
|
||||||
CreateTexture (8, linear, GL_DECAL);
|
CreateTexture (8, linear, 1, GL_DECAL);
|
||||||
|
|
||||||
if (logscale && maxval <= 0) maxval = 1;
|
if (logscale && maxval <= 0) maxval = 1;
|
||||||
if (logscale && minval <= 0) minval = 1e-4 * maxval;
|
if (logscale && minval <= 0) minval = 1e-4 * maxval;
|
||||||
|
@ -79,7 +79,7 @@ namespace netgen
|
|||||||
static void SetBackGroundColor (double col)
|
static void SetBackGroundColor (double col)
|
||||||
{ backcolor = col; }
|
{ backcolor = col; }
|
||||||
|
|
||||||
DLL_HEADER void CreateTexture (int ncols, int linear, int typ = GL_DECAL);
|
DLL_HEADER void CreateTexture (int ncols, int linear, double alpha, int typ);
|
||||||
DLL_HEADER void DrawColorBar (double minval, double maxval, int logscale = 0, bool linear = 1);
|
DLL_HEADER void DrawColorBar (double minval, double maxval, int logscale = 0, bool linear = 1);
|
||||||
DLL_HEADER void DrawCoordinateCross ();
|
DLL_HEADER void DrawCoordinateCross ();
|
||||||
DLL_HEADER void DrawNetgenLogo ();
|
DLL_HEADER void DrawNetgenLogo ();
|
||||||
|
@ -27,13 +27,16 @@ public:
|
|||||||
public:
|
public:
|
||||||
Vec3d normal;
|
Vec3d normal;
|
||||||
double dist;
|
double dist;
|
||||||
|
double dist2;
|
||||||
int enable;
|
int enable;
|
||||||
int timestamp;
|
int timestamp;
|
||||||
bool operator== (Clipping & clip2)
|
bool operator== (Clipping & clip2)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
(normal == clip2.normal) && (dist == clip2.dist)
|
(normal == clip2.normal) &&
|
||||||
&& (enable == clip2.enable);
|
(dist == clip2.dist) &&
|
||||||
|
// (dist2 == clip2.dist2) &&
|
||||||
|
(enable == clip2.enable);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Clipping clipping;
|
Clipping clipping;
|
||||||
|
@ -353,9 +353,10 @@ namespace netgen
|
|||||||
|
|
||||||
BuildScene();
|
BuildScene();
|
||||||
|
|
||||||
CreateTexture (numtexturecols, lineartexture, GL_MODULATE);
|
CreateTexture (numtexturecols, lineartexture, 0.5, GL_MODULATE);
|
||||||
|
|
||||||
glClearColor(backcolor, backcolor, backcolor, 1);
|
glClearColor(backcolor, backcolor, backcolor, 1);
|
||||||
|
// glClearColor(backcolor, backcolor, backcolor, 0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
SetLight();
|
SetLight();
|
||||||
@ -405,23 +406,106 @@ namespace netgen
|
|||||||
glMatrixMode (GL_MODELVIEW);
|
glMatrixMode (GL_MODELVIEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (vispar.drawfilledtrigs || vispar.drawtetsdomain > 0 || vispar.drawdomainsurf > 0)
|
if (vispar.drawfilledtrigs || vispar.drawtetsdomain > 0 || vispar.drawdomainsurf > 0)
|
||||||
{
|
{
|
||||||
|
// Change for Martin:
|
||||||
|
|
||||||
|
// orig:
|
||||||
SetClippingPlane ();
|
SetClippingPlane ();
|
||||||
|
|
||||||
|
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
// glEnable(GL_BLEND);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
glCallList (surfellist);
|
glCallList (surfellist);
|
||||||
glCallList (surface_vector_list);
|
glDisable(GL_BLEND);
|
||||||
|
/*
|
||||||
|
// transparent test ...
|
||||||
|
glColor4f (1, 0, 0, 0.1);
|
||||||
|
glEnable (GL_COLOR_MATERIAL);
|
||||||
|
|
||||||
|
glDepthFunc(GL_GREATER);
|
||||||
|
glDepthMask(GL_FALSE);
|
||||||
|
// glBlendFunc(GL_ONE_MINUS_DST_ALPHA,GL_DST_ALPHA);
|
||||||
|
glBlendFunc(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA);
|
||||||
|
|
||||||
|
glCallList (surfellist);
|
||||||
|
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
glDepthFunc(GL_LEQUAL);
|
||||||
|
glDepthMask(GL_TRUE);
|
||||||
|
|
||||||
|
glCallList (surfellist);
|
||||||
|
// end test ...
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
glCallList (surface_vector_list);
|
||||||
glDisable(GL_CLIP_PLANE0);
|
glDisable(GL_CLIP_PLANE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (showclipsolution)
|
if (showclipsolution)
|
||||||
{
|
{
|
||||||
if (clipsolution == 1)
|
if (clipsolution == 1)
|
||||||
|
{
|
||||||
|
// Martin
|
||||||
|
// orig:
|
||||||
|
// glCallList (clipplanelist_scal);
|
||||||
|
|
||||||
|
// transparent experiments
|
||||||
|
// see http://wiki.delphigl.com/index.php/Blenden
|
||||||
|
|
||||||
|
/*
|
||||||
|
glColor4f (1, 1, 1, 0.5);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glEnable(GL_COLOR);
|
||||||
|
glDepthFunc(GL_GREATER);
|
||||||
|
glDepthMask(GL_FALSE);
|
||||||
|
|
||||||
glCallList (clipplanelist_scal);
|
glCallList (clipplanelist_scal);
|
||||||
if (clipsolution == 2)
|
glDepthFunc(GL_LEQUAL);
|
||||||
glCallList (clipplanelist_vec);
|
glDepthMask(GL_TRUE);
|
||||||
|
|
||||||
|
glCallList (clipplanelist_scal);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
// CreateTexture (numtexturecols, lineartexture, 0.25, GL_MODULATE);
|
||||||
|
// glCallList (clipplanelist_scal);
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
// glDisable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
// CreateTexture (numtexturecols, lineartexture, 0.25, GL_MODULATE);
|
||||||
|
glCallList (clipplanelist_scal);
|
||||||
|
|
||||||
|
|
||||||
|
// glDepthFunc(GL_LEQUAL);
|
||||||
|
// glDepthMask(GL_TRUE);
|
||||||
|
// glCallList (clipplanelist_scal);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
|
// end test
|
||||||
}
|
}
|
||||||
|
if (clipsolution == 2)
|
||||||
|
{
|
||||||
|
// glDisable(GL_DEPTH_TEST);
|
||||||
|
glCallList (clipplanelist_vec);
|
||||||
|
// glEnable(GL_DEPTH_TEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (draw_fieldlines)
|
if (draw_fieldlines)
|
||||||
@ -474,8 +558,12 @@ namespace netgen
|
|||||||
|
|
||||||
if (vispar.drawoutline && !numisolines)
|
if (vispar.drawoutline && !numisolines)
|
||||||
{
|
{
|
||||||
|
// change for Martin
|
||||||
SetClippingPlane ();
|
SetClippingPlane ();
|
||||||
|
glDepthMask(GL_FALSE);
|
||||||
glCallList (linelist);
|
glCallList (linelist);
|
||||||
|
glDepthMask(GL_TRUE);
|
||||||
|
|
||||||
glDisable(GL_CLIP_PLANE0);
|
glDisable(GL_CLIP_PLANE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1023,7 +1111,7 @@ namespace netgen
|
|||||||
|
|
||||||
glLineWidth (1.0f);
|
glLineWidth (1.0f);
|
||||||
|
|
||||||
GLfloat col_grey[] = { 0.6f, 0.6f, 0.6f };
|
GLfloat col_grey[] = { 0.6f, 0.6f, 0.6f, 1.0f };
|
||||||
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col_grey);
|
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col_grey);
|
||||||
|
|
||||||
|
|
||||||
@ -1078,16 +1166,17 @@ namespace netgen
|
|||||||
|
|
||||||
int npt = (n+1)*(n+1);
|
int npt = (n+1)*(n+1);
|
||||||
if (curved)
|
if (curved)
|
||||||
|
{
|
||||||
for (int ii = 0; ii < npt; ii++)
|
for (int ii = 0; ii < npt; ii++)
|
||||||
{
|
{
|
||||||
Point<2> xref = pref[ii];
|
Point<2> xref = pref[ii];
|
||||||
Mat<3,2> dxdxi;
|
|
||||||
|
|
||||||
mesh->GetCurvedElements().
|
mesh->GetCurvedElements().
|
||||||
CalcSurfaceTransformation (xref, sei, points[ii], dxdxi);
|
CalcSurfaceTransformation (xref, sei, points[ii], dxdxis[ii]);
|
||||||
nvs[ii] = Cross (dxdxi.Col(0), dxdxi.Col(1));
|
nvs[ii] = Cross (dxdxis[ii].Col(0), dxdxis[ii].Col(1));
|
||||||
nvs[ii].Normalize();
|
nvs[ii].Normalize();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Point<3> lpi[4];
|
Point<3> lpi[4];
|
||||||
@ -1105,6 +1194,11 @@ namespace netgen
|
|||||||
double x = pref[ii](0);
|
double x = pref[ii](0);
|
||||||
double y = pref[ii](1);
|
double y = pref[ii](1);
|
||||||
points[ii] = lpi[0] + x * vx + y * vy + x*y * vtwist;
|
points[ii] = lpi[0] + x * vx + y * vy + x*y * vtwist;
|
||||||
|
for (int j = 0; j < 3; j++)
|
||||||
|
{
|
||||||
|
dxdxis[ii](j,0) = vx(j) + y*vtwist(j);
|
||||||
|
dxdxis[ii](j,1) = vy(j) + x*vtwist(j);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec<3> nv = Cross (vx, vy);
|
Vec<3> nv = Cross (vx, vy);
|
||||||
@ -1174,7 +1268,7 @@ namespace netgen
|
|||||||
valuesc[index[j]].imag() );
|
valuesc[index[j]].imag() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
glColor3fv (col_grey);
|
glColor4fv (col_grey);
|
||||||
|
|
||||||
glNormal3dv (nvs[index[j]]);
|
glNormal3dv (nvs[index[j]]);
|
||||||
glVertex3dv (points[index[j]]);
|
glVertex3dv (points[index[j]]);
|
||||||
@ -1198,6 +1292,7 @@ namespace netgen
|
|||||||
for(SurfaceElementIndex sei = 0; sei < nse; sei++)
|
for(SurfaceElementIndex sei = 0; sei < nse; sei++)
|
||||||
{
|
{
|
||||||
const Element2d & el = (*mesh)[sei];
|
const Element2d & el = (*mesh)[sei];
|
||||||
|
// if (el.GetIndex() <= 1) continue;
|
||||||
|
|
||||||
if(vispar.drawdomainsurf > 0)
|
if(vispar.drawdomainsurf > 0)
|
||||||
{
|
{
|
||||||
@ -1297,7 +1392,7 @@ namespace netgen
|
|||||||
glTexCoord2f ( valuesc[hi].real(), valuesc[hi].imag() );
|
glTexCoord2f ( valuesc[hi].real(), valuesc[hi].imag() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
glColor3fv (col_grey);
|
glColor4fv (col_grey);
|
||||||
|
|
||||||
glNormal3dv (nvs[hi]);
|
glNormal3dv (nvs[hi]);
|
||||||
glVertex3dv (points[hi]);
|
glVertex3dv (points[hi]);
|
||||||
|
Loading…
Reference in New Issue
Block a user