Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#16 2012-12-27 21:14:37 Re : [gem] modele .obj -> faces

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: [gem] modele .obj -> faces



Chouette ! Je teste ton patch (je suis tombé ya pas longtemps sur des codes de morphing glsl mais utilisant des .geom me semble t'il...)

Hors ligne

 

#17 2012-12-28 12:15:41 Re : [gem] modele .obj -> faces

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 614

Re: [gem] modele .obj -> faces



Tu risque d'être déçu pour le morph, c'étais juste un exemple pour tester la CPU...
Par contre voici le script python pour lire les .obj avec texture et normales.....
Testyé avec import meshLab, mais je crois que c'est différent sous blender (f 1//2//3 pour l'attrib des faces donc à changer dans le script si différent)
+
ArNO

Hors ligne

 

#18 2012-12-28 12:32:23 Re : [gem] modele .obj -> faces

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: [gem] modele .obj -> faces



ok je regarde la compat 'normales'

pour le morphing, ci dessous un quote de l'orange book (et j'avais vu une version avec des .geom aussi mais je retrouve pas...) :

orange book a écrit:

You can blend between the geometry of two objects to create a tweened (inbetween) version or
do a linear blend between two colors, two textures, two procedural patterns, and so on. All it
takes is a shader that uses a control value that is the ratio of the two items being blended and
that is updated each frame by the application. In some cases, a linear blend is sufficient. For an
oscillating effect, you'll probably want to have the application compute the interpolation factor
by using a spline function to avoid jarring discontinuities in the animation. (You could have the
shader compute the interpolation value, but it's better to have the application compute it once
per frame rather than have the vertex shader compute it once per vertex or have the fragment
shader compute it needlessly at every fragment.)
For instance, using generic vertex attributes, you can actually pass the geometry for two
objects at a time. The geometry for the first object would be passed through the usual OpenGL
calls (glVertex, glColor, glNormal, etc.). A second set of vertex information can be passed by
means of generic vertex attributes 0, 1, 2, etc. The application can provide a blending factor
through a uniform variable, and the vertex shader can use this blending factor to do a weighted
average of the two sets of vertex data. The tweened vertex position is the one that actually
gets transformed, the tweened normal is the one actually used for lighting calculations, and so
on.

16.4.1. Sphere Morph Vertex Shader
The shader in Listing 16.2, developed by Philip Rideout, morphs between two objectsa square
that is generated by the application and a sphere that is procedurally generated in the vertex
shader. The sphere is defined entirely by a single valueits radiusprovided by the application
through a uniform variable. The application passes the geometry defining the square to the
vertex shader with the standard built-in attributes gl_Normal and gl_Vertex. The vertex shader
computes the corresponding vertex and normal on the sphere with a subroutine called sphere.
The application provides a time-varying variable (Blend) for morphing between these two
objects. Because we are using the two input vertex values to compute a third, inbetween,
value, we cannot use the ftransform function. We'll transform the computed vertex directly within
the vertex shader.

Listing 16.2. Vertex shader for morphing between a plane and a sphere

Code (glsl) :

varying vec4 Color;
uniform vec3 LightPosition;
uniform vec3 SurfaceColor;
const float PI = 3.14159;
const float TWO_PI = PI * 2.0;
uniform float Radius;
uniform float Blend;
vec3 sphere(vec2 domain)
{
vec3 range;
range.x = Radius * cos(domain.y) * sin(domain.x);
range.y = Radius * sin(domain.y) * sin(domain.x);
range.z = Radius * cos(domain.x);
return range;
}
void main()
{
vec2 p0 = gl_Vertex.xy * TWO_PI;
vec3 normal = sphere(p0);;
vec3 r0 = Radius * normal;
vec3 vertex = r0;
normal = mix(gl_Normal, normal, Blend);
vertex = mix(gl_Vertex.xyz, vertex, Blend);
normal = normalize(gl_NormalMatrix * normal);
vec3 position = vec3(gl_ModelViewMatrix * vec4(vertex, 1.0));
vec3 lightVec = normalize(LightPosition - position);
float diffuse = max(dot(lightVec, normal), 0.0);
if (diffuse < 0.125)
diffuse = 0.125;
Color = vec4(SurfaceColor * diffuse, 1.0);
gl_Position = gl_ModelViewProjectionMatrix * vec4(vertex,1.0);

Hors ligne

 

#19 2012-12-28 12:35:44 Re : [gem] modele .obj -> faces

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: [gem] modele .obj -> faces



Autre chose pour le morphing :
- le but est d'interpoler entre 2 valeurs, ça on peut le faire en glsl avec mix(), donc pas de soucis de ce côté la.
- reste à savoir comment passer 2 positions différentes pour un même vertex. Un début de piste est qu'apparemment on peut se servir des coordonnées de textures pour fournir les coordonnées d'un deuxième point... (stu vois cque jveux dire...)

Hors ligne

 

#20 2012-12-28 14:30:03 Re : [gem] modele .obj -> faces

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 614

Re: [gem] modele .obj -> faces



bien sur, on utilise une texture externe et on récupère les coordonées couleur; le principe qu heightMap, ou bien dans les exemples de pureData fetching...

Hors ligne

 

#21 2012-12-28 18:31:48 Re : [gem] modele .obj -> faces

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: [gem] modele .obj -> faces



Mmm l'exemple fetching, c'est lequel ?
Sinon effectivement y'a bien des distorsions liées à des textures dans les exemples mais ici le truc c'est qu'il faudrait exporter ces coodonnées en coordonnées de texture et c'est la que je bloque un peu à vrai dire... (faut que je re-regarde ton script d'export des normales/coordonnéesTexture)

Le but ultime étant bien entendu de transformer le singe en dindon.

Hors ligne

 

#22 2012-12-29 07:35:40 Re : [gem] modele .obj -> faces

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 614

Re: [gem] modele .obj -> faces



c'est l'exemple 6 de GLSL.
Sinon, pour faire apparaitre le dindon, si tu as le .obj, j'ai deux petites idées :
la première est de créer un .frag qui auraient pour valeur de gl_FragColor les valeurs des gl_Vertex du dindon, enregistrer l'image, et faire une interpolation entre les coordonées texture du 'heightMap" (bien que ce n'est plus vraiment une heightMap) du dindon et celle du singe.
sinon il suffit de faire l'interpolation en CPU par la formule [x * ( 1 − a ) + y * a] entre les tableaux de coordonées vertex (même chose que mix en glsl)
Bref pas simple mais faisable!

Hors ligne

 

#23 2012-12-29 10:59:32 Re : [gem] modele .obj -> faces

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 614

Re: [gem] modele .obj -> faces



SingeDindon!
Bon, le dindon est en fait un poulet, et un peu petit par rapport au singe...
Mais le principe y est!
+

Dernière modification par nononononono (2012-12-29 11:00:24)

Hors ligne

 

#24 2012-12-29 11:34:29 Re : [gem] modele .obj -> faces

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: [gem] modele .obj -> faces



Super chouette !
C'est à ma connaissance le premier patch de morphing gem !
smile
Une grande victoire big_smile

Hors ligne

 

#25 2012-12-29 19:06:54 Re : [gem] modele .obj -> faces

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 614

Re: [gem] modele .obj -> faces



Ouaips!
Ici c'est une ébauche :
C'est possible de l'améliorer en faisant la même avec les coordonnées de normales et de textures,
puis en rajoutant un mix dans un fichier .frag avec les textures préchargées...
//Je m'y colle un autre jour

Hors ligne

 

#26 2012-12-29 20:01:59 Re : [gem] modele .obj -> faces

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: [gem] modele .obj -> faces



Ouais nononononono c'est vrai, mais ce premier résultat est encourageant !
Genre ça donne la motivation pour s'attaquer à la version pure glsl smile

Hors ligne

 

#27 2012-12-30 17:04:39 Re : [gem] modele .obj -> faces

dwan
membre
Date d'inscription: 2011-01-24
Messages: 307

Re: [gem] modele .obj -> faces



Bon ben c'est malin, du coup j'ai compilé Gem 0.93.3 pour ubuntu 12.10 x64 exprès pour tester ce patch big_smile (backend vlc en bonus :p )
Joli !

Hors ligne

 

#28 2012-12-30 18:24:15 Re : [gem] modele .obj -> faces

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: [gem] modele .obj -> faces



Héhé dwan smile
Dans le même genre les contrib de nononono m'ont poussé à réessayer (avec succès cette fois ci) l'external pyext smile

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024