Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/renderconverter/intern/convertBlenderScene.c')
-rw-r--r--source/blender/renderconverter/intern/convertBlenderScene.c145
1 files changed, 102 insertions, 43 deletions
diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c
index f7aa95b99dc..0108603e103 100644
--- a/source/blender/renderconverter/intern/convertBlenderScene.c
+++ b/source/blender/renderconverter/intern/convertBlenderScene.c
@@ -798,7 +798,7 @@ static void make_render_halos(Object *ob, Mesh *me, int totvert, MVert *mvert, M
HaloRen *har;
float xn, yn, zn, nor[3], view[3];
float *orco, vec[3], hasize, mat[4][4], imat[3][3];
- int start, end, a, ok;
+ int start, end, a, ok, seed= ma->seed1;
MTC_Mat4MulMat4(mat, ob->obmat, R.viewmat);
MTC_Mat3CpyMat4(imat, ob->imat);
@@ -813,8 +813,6 @@ static void make_render_halos(Object *ob, Mesh *me, int totvert, MVert *mvert, M
mvert+= start;
if(extverts) extverts+= 3*start;
- ma->ren->seed1= ma->seed1;
-
for(a=start; a<end; a++, mvert++) {
ok= 1;
@@ -849,12 +847,12 @@ static void make_render_halos(Object *ob, Mesh *me, int totvert, MVert *mvert, M
else hasize*= zn*zn*zn*zn;
}
- if(orco) har= RE_inithalo(ma, vec, 0, orco, hasize, 0);
- else har= RE_inithalo(ma, vec, 0, mvert->co, hasize, 0);
+ if(orco) har= RE_inithalo(ma, vec, 0, orco, hasize, 0, seed);
+ else har= RE_inithalo(ma, vec, 0, mvert->co, hasize, 0, seed);
if(har) har->lay= ob->lay;
}
if(orco) orco+= 3;
- ma->ren->seed1++;
+ seed++;
}
}
@@ -867,7 +865,7 @@ static void render_particle_system(Object *ob, PartEff *paf)
HaloRen *har=0;
Material *ma=0;
float xn, yn, zn, imat[3][3], mat[4][4], hasize, ptime, ctime, vec[3], vec1[3], view[3], nor[3];
- int a, mat_nr=1;
+ int a, mat_nr=1, seed;
pa= paf->keys;
if(pa==NULL) {
@@ -877,7 +875,6 @@ static void render_particle_system(Object *ob, PartEff *paf)
}
ma= give_render_material(ob, 1);
- if(ma==NULL) ma= &defmaterial;
MTC_Mat4MulMat4(mat, ob->obmat, R.viewmat);
MTC_Mat4Invert(ob->imat, mat); /* this is correct, for imat texture */
@@ -890,7 +887,7 @@ static void render_particle_system(Object *ob, PartEff *paf)
if(ob->ipoflag & OB_OFFS_PARTICLE) ptime= ob->sf;
else ptime= 0.0;
ctime= bsystem_time(ob, 0, (float)G.scene->r.cfra, ptime);
- ma->ren->seed1= ma->seed1;
+ seed= ma->seed1;
for(a=0; a<paf->totpart; a++, pa+=paf->totkey) {
@@ -912,7 +909,6 @@ static void render_particle_system(Object *ob, PartEff *paf)
if(pa->mat_nr != mat_nr) {
mat_nr= pa->mat_nr;
ma= give_render_material(ob, mat_nr);
- if(ma==0) ma= &defmaterial;
}
if(ma->ipo) {
@@ -943,9 +939,9 @@ static void render_particle_system(Object *ob, PartEff *paf)
else hasize*= zn*zn*zn*zn;
}
- if(paf->stype==PAF_VECT) har= RE_inithalo(ma, vec, vec1, pa->co, hasize, paf->vectsize);
+ if(paf->stype==PAF_VECT) har= RE_inithalo(ma, vec, vec1, pa->co, hasize, paf->vectsize, seed);
else {
- har= RE_inithalo(ma, vec, 0, pa->co, hasize, 0);
+ har= RE_inithalo(ma, vec, 0, pa->co, hasize, 0, seed);
if(har && ma->mode & MA_HALO_SHADE) {
VecSubf(har->no, vec, vec1);
Normalise(har->no);
@@ -954,7 +950,7 @@ static void render_particle_system(Object *ob, PartEff *paf)
if(har) har->lay= ob->lay;
}
}
- ma->ren->seed1++;
+ seed++;
}
/* restore material */
@@ -977,7 +973,7 @@ static void render_static_particle_system(Object *ob, PartEff *paf)
VlakRen *vlr;
float xn, yn, zn, imat[3][3], mat[4][4], hasize;
float mtime, ptime, ctime, vec[3], vec1[3], view[3], nor[3];
- int a, mat_nr=1;
+ int a, mat_nr=1, seed;
pa= paf->keys;
if(pa==NULL || (paf->flag & PAF_ANIMATED)) {
@@ -987,7 +983,6 @@ static void render_static_particle_system(Object *ob, PartEff *paf)
}
ma= give_render_material(ob, 1);
- if(ma==NULL) ma= &defmaterial;
MTC_Mat4MulMat4(mat, ob->obmat, R.viewmat);
MTC_Mat4Invert(ob->imat, mat); /* need to be that way, for imat texture */
@@ -999,7 +994,7 @@ static void render_static_particle_system(Object *ob, PartEff *paf)
if(ob->ipoflag & OB_OFFS_PARTICLE) ptime= ob->sf;
else ptime= 0.0;
ctime= bsystem_time(ob, 0, (float)G.scene->r.cfra, ptime);
- ma->ren->seed1= ma->seed1;
+ seed= ma->seed1;
for(a=0; a<paf->totpart; a++, pa+=paf->totkey) {
@@ -1026,7 +1021,6 @@ static void render_static_particle_system(Object *ob, PartEff *paf)
if(pa->mat_nr != mat_nr) {
mat_nr= pa->mat_nr;
ma= give_render_material(ob, mat_nr);
- if(ma==0) ma= &defmaterial;
}
if(ma->mode & MA_WIRE) {
@@ -1085,9 +1079,9 @@ static void render_static_particle_system(Object *ob, PartEff *paf)
else hasize*= zn*zn*zn*zn;
}
- if(paf->stype==PAF_VECT) har= RE_inithalo(ma, vec, vec1, pa->co, hasize, paf->vectsize);
+ if(paf->stype==PAF_VECT) har= RE_inithalo(ma, vec, vec1, pa->co, hasize, paf->vectsize, seed);
else {
- har= RE_inithalo(ma, vec, 0, pa->co, hasize, 0);
+ har= RE_inithalo(ma, vec, 0, pa->co, hasize, 0, seed);
if(har && (ma->mode & MA_HALO_SHADE)) {
VecSubf(har->no, vec, vec1);
Normalise(har->no);
@@ -1099,7 +1093,7 @@ static void render_static_particle_system(Object *ob, PartEff *paf)
VECCOPY(vec1, vec);
}
- ma->ren->seed1++;
+ seed++;
}
}
@@ -1167,7 +1161,9 @@ static void sort_halos(void)
static Material *give_render_material(Object *ob, int nr)
{
+ extern Material defmaterial; // initrender.c
Object *temp;
+ Material *ma;
if(ob->flag & OB_FROMDUPLI) {
temp= (Object *)ob->id.newid;
@@ -1176,7 +1172,10 @@ static Material *give_render_material(Object *ob, int nr)
}
}
- return give_current_material(ob, nr);
+ ma= give_current_material(ob, nr);
+ if(ma==NULL) ma= &defmaterial;
+
+ return ma;
}
/* ------------------------------------------------------------------------- */
@@ -1197,10 +1196,9 @@ static void init_render_mball(Object *ob)
MTC_Mat3CpyMat4(imat, ob->imat);
ma= give_render_material(ob, 1);
- if(ma==0) ma= &defmaterial;
need_orco= 0;
- if(ma->ren->texco & TEXCO_ORCO) {
+ if(ma->texco & TEXCO_ORCO) {
need_orco= 1;
}
@@ -1328,7 +1326,7 @@ static void init_render_mesh(Object *ob)
for(a=1; a<=ob->totcol; a++) {
ma= give_render_material(ob, a);
if(ma) {
- if(ma->ren->texco & TEXCO_ORCO) {
+ if(ma->texco & TEXCO_ORCO) {
need_orco= 1;
break;
}
@@ -1398,8 +1396,6 @@ static void init_render_mesh(Object *ob)
orco= me->orco;
ma= give_render_material(ob, 1);
- if(ma==0) ma= &defmaterial;
-
if(ma->mode & MA_HALO) {
make_render_halos(ob, me, totvert, mvert, ma, extverts);
@@ -1444,7 +1440,6 @@ static void init_render_mesh(Object *ob)
for(a1=0; (a1<ob->totcol || (a1==0 && ob->totcol==0)); a1++) {
ma= give_render_material(ob, a1+1);
- if(ma==0) ma= &defmaterial;
/* test for 100% transparant */
ok= 1;
@@ -1804,14 +1799,12 @@ void RE_add_render_lamp(Object *ob, int doshadbuf)
lar->mode &= ~LA_SHAD_RAY;
}
}
-
- lar->org= MEM_dupallocN(lar);
-
}
/* ------------------------------------------------------------------------- */
static void init_render_surf(Object *ob)
{
+ extern Material defmaterial; // initrender.c
Nurb *nu=0;
Curve *cu;
ListBase displist;
@@ -1840,8 +1833,7 @@ static void init_render_surf(Object *ob)
matar[0]= &defmaterial;
for(a=0; a<ob->totcol; a++) {
matar[a]= give_render_material(ob, a+1);
- if(matar[a]==0) matar[a]= &defmaterial;
- if(matar[a] && matar[a]->ren->texco & TEXCO_ORCO) {
+ if(matar[a] && matar[a]->texco & TEXCO_ORCO) {
need_orco= 1;
}
}
@@ -2185,8 +2177,8 @@ static void init_render_surf(Object *ob)
static void init_render_curve(Object *ob)
{
+ extern Material defmaterial; // initrender.c
Ika *ika=0;
-
Lattice *lt=0;
Curve *cu;
VertRen *ver;
@@ -2228,8 +2220,7 @@ static void init_render_curve(Object *ob)
matar[0]= &defmaterial;
for(a=0; a<ob->totcol; a++) {
matar[a]= give_render_material(ob, a+1);
- if(matar[a]==0) matar[a]= &defmaterial;
- if(matar[a]->ren->texco & TEXCO_ORCO) {
+ if(matar[a]->texco & TEXCO_ORCO) {
need_orco= 1;
}
}
@@ -2681,7 +2672,6 @@ void RE_freeRotateBlenderScene(void)
MEM_freeN(shb->cbuf);
MEM_freeN(R.la[a]->shb);
}
- if(R.la[a]->org) MEM_freeN(R.la[a]->org);
if(R.la[a]->jitter) MEM_freeN(R.la[a]->jitter);
MEM_freeN(R.la[a]);
}
@@ -2898,9 +2888,6 @@ void RE_rotateBlenderScene(void)
if(G.scene->camera==0) return;
- O.dxwin[0]= 0.5/(float)R.r.xsch;
- O.dywin[1]= 0.5/(float)R.r.ysch;
-
slurph_opt= 0;
R.totvlak=R.totvert=R.totlamp=R.tothalo= 0;
@@ -3123,6 +3110,78 @@ void RE_rotateBlenderScene(void)
set_normalflags();
}
+/* **************************************************************** */
+/* sticky texture coords */
+/* **************************************************************** */
+
+void RE_make_sticky(void)
+{
+ Object *ob;
+ Base *base;
+ MVert *mvert;
+ Mesh *me;
+ MSticky *ms;
+ float ho[4], mat[4][4];
+ int a;
+
+ if(G.scene->camera==0) return;
+
+ if(G.obedit) {
+ error("Unable to make sticky in Edit Mode");
+ return;
+ }
+ base= FIRSTBASE;
+ while(base) {
+ if TESTBASELIB(base) {
+ if(base->object->type==OB_MESH) {
+ ob= base->object;
+
+ me= ob->data;
+ mvert= me->mvert;
+ if(me->msticky) MEM_freeN(me->msticky);
+ me->msticky= MEM_mallocN(me->totvert*sizeof(MSticky), "sticky");
+
+ /* like convert to render data */
+ R.r= G.scene->r;
+ R.r.xsch= (R.r.size*R.r.xsch)/100;
+ R.r.ysch= (R.r.size*R.r.ysch)/100;
+
+ R.afmx= R.r.xsch/2;
+ R.afmy= R.r.ysch/2;
+
+ R.ycor= ( (float)R.r.yasp)/( (float)R.r.xasp);
+
+ R.rectx= R.r.xsch;
+ R.recty= R.r.ysch;
+ R.xstart= -R.afmx;
+ R.ystart= -R.afmy;
+ R.xend= R.xstart+R.rectx-1;
+ R.yend= R.ystart+R.recty-1;
+
+ where_is_object(G.scene->camera);
+ Mat4CpyMat4(R.viewinv, G.scene->camera->obmat);
+ Mat4Ortho(R.viewinv);
+ Mat4Invert(R.viewmat, R.viewinv);
+
+ RE_setwindowclip(1, -1);
+
+ where_is_object(ob);
+ Mat4MulMat4(mat, ob->obmat, R.viewmat);
+
+ ms= me->msticky;
+ for(a=0; a<me->totvert; a++, ms++, mvert++) {
+ VECCOPY(ho, mvert->co);
+ Mat4MulVecfl(mat, ho);
+ RE_projectverto(ho, ho);
+ ms->co[0]= ho[0]/ho[3];
+ ms->co[1]= ho[1]/ho[3];
+ }
+ }
+ }
+ base= base->next;
+ }
+}
+
/* **************************************************************** */
/* Displacement mapping */
@@ -3136,7 +3195,7 @@ static short test_for_displace(Object *ob)
for (i=1; i<=ob->totcol; i++) {
ma=give_render_material(ob, i);
/* ma->mapto is ORed total of all mapto channels */
- if(ma && (ma->ren->mapto & MAP_DISPLACE)) return 1;
+ if(ma && (ma->mapto & MAP_DISPLACE)) return 1;
}
return 0;
}
@@ -3185,10 +3244,10 @@ static void displace_render_face(VlakRen *vlr, float *scale)
shi.osatex= 0; /* signal not to use dx[] and dy[] texture AA vectors */
shi.vlr= vlr; /* current render face */
shi.mat= vlr->mat; /* current input material */
- shi.matren= shi.mat->ren; /* material temp block where output is written into */
+
/* UV coords must come from face */
- hasuv = vlr->tface && (shi.matren->texco & TEXCO_UV);
+ hasuv = vlr->tface && (shi.mat->texco & TEXCO_UV);
if (hasuv) shi.uv[2]=0.0f;
/* I don't think this is used, but seting it just in case */
@@ -3244,7 +3303,7 @@ static void displace_render_face(VlakRen *vlr, float *scale)
static void displace_render_vert(ShadeInput *shi, VertRen *vr, float *scale)
{
- short texco= shi->matren->texco;
+ short texco= shi->mat->texco;
float sample=0;
/* shi->co is current render coord, just make sure at least some vector is here */
VECCOPY(shi->co, vr->co);