[Bf-committers] Re: A little Editface Question

Ton Roosendaal ton at blender.org
Thu Jun 9 12:46:40 CEST 2005


Hi,

I would sugest a new method. The set_wuv() is a horrible construction  
at the moment. Afaik, Johnny already solved copying pinning flags, seam  
flags, smooth flags, and so on.

What is needed now is a parametric solution for finding new UVs and  
vertexcolors based on an existing face and a 3d coordinate that lies  
within the plane of that face. That's basically just an interpolation  
function.

Code below was copied from render module, I didn't compile it! But it  
has the ingredients :)


/* input efa and co (vector */
/* output in TFace: uv (2 values) and vcol (4 char values) */
void set_uv_vcol(EditFace *efa, float *co, float *uv, char *col)
{
	
	/* define best projection of face XY, XZ or YZ */
		xn= fabs(efa->n[0]);
		yn= fabs(efa->n[1]);
		zn= fabs(efa->n[2]);
		if(zn>=xn && zn>=yn) {i= 0; j= 1;}
		else if(yn>=xn && yn>=zn) {i= 0; j= 2;}
		else {i= 1; j= 2;}

	/* calculate u and v */
		v1= efa->v1;
		v2= efa->v2;
  		v3= efa->v3;

		t00= v3->co[i]-v1->co[i]; t01= v3->co[j]-v1->co[j];
		t10= v3->co[i]-v2->co[i]; t11= v3->co[j]-v2->co[j];
			
		detsh= 1.0/(t00*t11-t10*t01);	/* potential danger */
		t00*= detsh; t01*=detsh;
		t10*=detsh; t11*=detsh;
		
		u= (co[i]-v3->co[i])*t11-(co[j]-v3->co[j])*t10;
		v= (co[j]-v3->co[j])*t00-(co[i]-v3->co[i])*t01;
	
	/* btw; u and v range from -1 to 0 */

	/* interpolate */
		l= 1.0+u+v;
		
		/* pseudocode!!! */
		/* just fill in colors or UV texture values here */

		new = l*vertex3_val - u*vertex1_val - v*vertex2_val;

}

OK... this now doesn't work yet, since we need to get it working for  
Quads.

That's a simple case as well;

	/* in other triangle */
	if(efa->v4 && l < 0.0) {
		/* do it all over, but now with vertex 2 replaced with 4 */

	}


So, would this work?

-Ton-


On 9 Jun, 2005, at 3:22, Martin Poirier wrote:

> Then, all of the new face will have a different
> percent value on the cut edge. It's on the original
> edge anyway, so pretty easy to figure. 1.0/number of
> cutes * conversion factor to store in short.
>
> Martin
>
> --- Johnny Matthews <johnny.matthews at gmail.com> wrote:
>
>> the problem is that there will be 1 or more cuts per
>> face (the code
>> allows for unlimited cuts per edge)
>>
>> I'll look at the code you mentioned and see if it
>> can point me in the
>> right direction though.
>>
>> On 6/8/05, Martin Poirier <theeth at yahoo.com> wrote:
>>>
>>>
>>> --- Johnny Matthews <johnny.matthews at gmail.com>
>> wrote:
>>>
>>>> Ok, This is for any self-professed Mesh Gurus
>> out
>>>> there,
>>>>
>>>> I am getting very close to having a working
>> version
>>>> of the edge-based
>>>> subdivide with the option of 1 or more even
>> cuts.
>>>> The
>>>> hitch I have is this. I have a function that
>> takes
>>>> each new internal
>>>> face as it is created and copies information
>> from
>>>> the parent
>>>> face kinda like facecopy(EditFace
>> source,EditFace
>>>> target), where target
>>>> is always a subface of source. Can you think of
>> a
>>>> way, without passing any more information to the
>>>> function to extrapolate
>>>> the UV and Vertcol information from the source
>> face
>>>> to the target face.
>>>
>>> This one's for me.
>>>
>>> You'll want to call the function: set_wuv in
>>> editmesh_tools.c
>>> First argument is the number of verts (could
>> easily be
>>> removed).
>>> Second argument is the new face, then the vertex
>> flags
>>> (explained in the nice ascii drawing in the
>> fonction's
>>> body) and then the pinned face (original face
>>> containing pinned uvs flags and the like).
>>>
>>> To use the function correctly, you have to call it
>>> with the proper vertex flags AND also set the f1
>> flag
>>> for each edge that is being cut. This sets the
>> factor
>>> of where the cut is along the edge starting from
>> the
>>> first vertex in the edge (0.0) to the last (1.0)
>>> stored in a short (multiplied by 32768).
>>>
>>> If you have more questions, you can contact me
>>> directly.
>>>
>>> Martin
>>>
>>>
>>> 		
>>> __________________________________
>>> Discover Yahoo!
>>> Stay in touch with email, IM, photo sharing and
>> more. Check it out!
>>> http://discover.yahoo.com/stayintouch.html
>>> _______________________________________________
>>> Bf-committers mailing list
>>> Bf-committers at projects.blender.org
>>>
>>
> http://projects.blender.org/mailman/listinfo/bf-committers
>>>
>>
>>
>> --  
>> Johnny Matthews
>> johnny.matthews at gmail.com
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at projects.blender.org
>>
> http://projects.blender.org/mailman/listinfo/bf-committers
>>
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at projects.blender.org
> http://projects.blender.org/mailman/listinfo/bf-committers
>
>
------------------------------------------------------------------------ 
--
Ton Roosendaal  Blender Foundation ton at blender.org  
http://www.blender.org



More information about the Bf-committers mailing list