[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26947] branches/soc-2008-mxcurioni/source /blender: Added support for transparent stroke colors (again).
Tamito Kajiyama
rd6t-kjym at asahi-net.or.jp
Tue Feb 16 03:10:27 CET 2010
Revision: 26947
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26947
Author: kjym3
Date: 2010-02-16 03:10:27 +0100 (Tue, 16 Feb 2010)
Log Message:
-----------
Added support for transparent stroke colors (again).
Transparent strokes are rendered by means of transparent vertex colors.
To make this possible, Blender's internal renderer has been slightly
extended to allow transparent vertex colors. When Material::vcol_alpha
is non-zero, the renderer takes MCol::a into account.
Modified Paths:
--------------
branches/soc-2008-mxcurioni/source/blender/blenkernel/intern/material.c
branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
branches/soc-2008-mxcurioni/source/blender/makesdna/DNA_material_types.h
branches/soc-2008-mxcurioni/source/blender/render/intern/source/shadeinput.c
branches/soc-2008-mxcurioni/source/blender/render/intern/source/shadeoutput.c
Modified: branches/soc-2008-mxcurioni/source/blender/blenkernel/intern/material.c
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/blenkernel/intern/material.c 2010-02-16 01:42:34 UTC (rev 26946)
+++ branches/soc-2008-mxcurioni/source/blender/blenkernel/intern/material.c 2010-02-16 02:10:27 UTC (rev 26947)
@@ -144,6 +144,7 @@
ma->tx_limit= 0.0;
ma->tx_falloff= 1.0;
ma->shad_alpha= 1.0f;
+ ma->vcol_alpha= 0;
ma->gloss_mir = ma->gloss_tra= 1.0;
ma->samp_gloss_mir = ma->samp_gloss_tra= 18;
Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp 2010-02-16 01:42:34 UTC (rev 26946)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp 2010-02-16 02:10:27 UTC (rev 26947)
@@ -62,6 +62,14 @@
Camera* camera = (Camera *) object_camera->data;
camera->type = CAM_ORTHO;
camera->ortho_scale = max(width,height);
+ camera->clipsta = 0.1f;
+ camera->clipend = 100.0f;
+
+ _z_delta = 0.00001f;
+ _z = camera->clipsta + _z_delta;
+
+ // test
+ //_z = 999.90f; _z_delta = 0.01f;
object_camera->loc[0] = 0.5 * width;
object_camera->loc[1] = 0.5 * height;
@@ -74,7 +82,9 @@
// Material
material = add_material("stroke_material");
material->mode |= MA_VERTEXCOLP;
+ material->mode |= MA_TRANSP;
material->mode |= MA_SHLESS;
+ material->vcol_alpha = 1;
}
BlenderStrokeRenderer::~BlenderStrokeRenderer(){
@@ -125,6 +135,15 @@
BLI_addhead(const_cast<ListBase *>(&objects), link);
}
+float BlenderStrokeRenderer::get_stroke_vertex_z(void) const {
+ float z = _z;
+ BlenderStrokeRenderer *self = const_cast<BlenderStrokeRenderer *>(this);
+ if (!(_z < _z_delta * 100000.0f))
+ self->_z_delta *= 10.0f;
+ self->_z += _z_delta;
+ return -z;
+}
+
void BlenderStrokeRenderer::RenderStrokeRep(StrokeRep *iStrokeRep) const{
RenderStrokeRepBasic(iStrokeRep);
}
@@ -252,13 +271,13 @@
// first vertex
vertices->co[0] = svRep[0]->point2d()[0];
vertices->co[1] = svRep[0]->point2d()[1];
- vertices->co[2] = 0.0;
+ vertices->co[2] = get_stroke_vertex_z();
++vertices;
// second vertex
vertices->co[0] = svRep[1]->point2d()[0];
vertices->co[1] = svRep[1]->point2d()[1];
- vertices->co[2] = 0.0;
+ vertices->co[2] = get_stroke_vertex_z();
++vertices;
}
visible = true;
@@ -266,7 +285,7 @@
// vertex
vertices->co[0] = svRep[2]->point2d()[0];
vertices->co[1] = svRep[2]->point2d()[1];
- vertices->co[2] = 0.0;
+ vertices->co[2] = get_stroke_vertex_z();
// faces
faces->v1 = vertex_index - 2;
@@ -310,6 +329,11 @@
}
Render* BlenderStrokeRenderer::RenderScene( Render *re ) {
+ Camera *camera = (Camera *)freestyle_scene->camera->data;
+ if (camera->clipend < _z)
+ camera->clipend = _z + _z_delta * 100.0f;
+ //cout << "clipsta " << camera->clipsta << ", clipend " << camera->clipend << endl;
+
freestyle_scene->r.mode &= ~( R_EDGE_FRS | R_SHADOW | R_SSS | R_PANORAMA | R_ENVMAP | R_MBLUR );
freestyle_scene->r.scemode &= ~( R_SINGLE_LAYER );
freestyle_scene->r.planes = R_PLANES32;
Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h 2010-02-16 01:42:34 UTC (rev 26946)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h 2010-02-16 02:10:27 UTC (rev 26947)
@@ -37,8 +37,11 @@
Scene* freestyle_scene;
Material* material;
ListBase objects;
+ float _z, _z_delta;
void store_object(Object *ob) const;
+
+ float get_stroke_vertex_z(void) const;
};
#endif // BLENDERSTROKERENDERER_H
Modified: branches/soc-2008-mxcurioni/source/blender/makesdna/DNA_material_types.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/makesdna/DNA_material_types.h 2010-02-16 01:42:34 UTC (rev 26946)
+++ branches/soc-2008-mxcurioni/source/blender/makesdna/DNA_material_types.h 2010-02-16 02:10:27 UTC (rev 26947)
@@ -158,7 +158,7 @@
short sss_flag, sss_preset;
int mapto_textured; /* render-time cache to optimise texture lookups */
- int pad4;
+ short vcol_alpha, pad4;
ListBase gpumaterial; /* runtime */
} Material;
Modified: branches/soc-2008-mxcurioni/source/blender/render/intern/source/shadeinput.c
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/render/intern/source/shadeinput.c 2010-02-16 01:42:34 UTC (rev 26946)
+++ branches/soc-2008-mxcurioni/source/blender/render/intern/source/shadeinput.c 2010-02-16 02:10:27 UTC (rev 26947)
@@ -1049,6 +1049,7 @@
shi->actcol= obr->actmcol;
if(mode & (MA_VERTEXCOL|MA_VERTEXCOLP)) {
+ float alpha[8];
for (i=0; (mcol=RE_vlakren_get_mcol(obr, vlr, i, &name, 0)); i++) {
ShadeInputCol *scol= &shi->col[i];
char *cp1, *cp2, *cp3;
@@ -1063,13 +1064,15 @@
scol->col[0]= (l*((float)cp3[3]) - u*((float)cp1[3]) - v*((float)cp2[3]))/255.0f;
scol->col[1]= (l*((float)cp3[2]) - u*((float)cp1[2]) - v*((float)cp2[2]))/255.0f;
scol->col[2]= (l*((float)cp3[1]) - u*((float)cp1[1]) - v*((float)cp2[1]))/255.0f;
+
+ alpha[i]= (l*((float)cp3[0]) - u*((float)cp1[0]) - v*((float)cp2[0]))/255.0f;
}
if(shi->totcol) {
shi->vcol[0]= shi->col[shi->actcol].col[0];
shi->vcol[1]= shi->col[shi->actcol].col[1];
shi->vcol[2]= shi->col[shi->actcol].col[2];
- shi->vcol[3]= 1.0f;
+ shi->vcol[3]= shi->mat->vcol_alpha ? alpha[shi->actcol] : 1.0f;
}
else {
shi->vcol[0]= 0.0f;
Modified: branches/soc-2008-mxcurioni/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/render/intern/source/shadeoutput.c 2010-02-16 01:42:34 UTC (rev 26946)
+++ branches/soc-2008-mxcurioni/source/blender/render/intern/source/shadeoutput.c 2010-02-16 02:10:27 UTC (rev 26947)
@@ -1588,7 +1588,7 @@
shi->r= shi->vcol[0];
shi->g= shi->vcol[1];
shi->b= shi->vcol[2];
- if(ma->mode & (MA_FACETEXTURE_ALPHA))
+ if((ma->mode & (MA_FACETEXTURE_ALPHA)) || ma->vcol_alpha)
shi->alpha= shi->vcol[3];
}
if(ma->texco)
More information about the Bf-blender-cvs
mailing list