|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I want to apply a texture to a disc (or a square or any plane object), applying
some deformation to the image I'm using. The deformation is incremental and
depends on the clock.
So I define a mesh of triangles to draw the disc and use the uv_vectors in each
point of the mesh to give the texture (uv_mapping).
Then, I apply the deformation to the uv_vectors and I leave fixed the
correspondence between the vertices of the triangles in the mesh and the
uv_vectors.
The grid made by uv_vectors always works properly, but when I apply some heavy
deformations, the mapped image does not follow the movement of the grid. More
precisely, the uv_vectors are being deformed as I want to (only in some area),
but the textured image undergoes other deformations, even outside the area in
which the uv-grid is changing.
Did anyone had a similar problem? I can post a piece of code if needed.
Post a reply to this message
|
|
| |
| |
|
|
From: Christian Froeschlin
Subject: Re: deforming a texture on a mesh
Date: 31 Aug 2010 13:35:32
Message: <4c7d3d64@news.povray.org>
|
|
|
| |
| |
|
|
esterichia wrote:
> I want to apply a texture to a disc (or a square or any plane object), applying
> some deformation to the image I'm using. The deformation is incremental and
> depends on the clock.
I can't help you with the mesh uv mapping, but it sounds
like you might be better off deforming the texture itself.
There are two ways of doing this: Using a warp {} block
in the texture, which is limited to certain types of
supported deformations, or pigment functions.
For the latter option, the idea is to convert you image
pigment into a pigment function, and define a new function
which represents a deformed pigment. As user-defined vector
functions are currently not supported this requires defining
separate R,G,B functions and average them together later.
Assuming P is your existing image map pigment, and
(fx(x,y),fy(x,y)) is some 2D deformation function
to be applied to the image with coordinates ranging
from 0 to 1, it should be similar to (untested):
#macro FROM_BLACK(COLOR)
color_map
{
[0 color rgb 0]
[1 color COLOR]
}
#end
#declare F = function { pigment {P} }
#declare R = pigment
{
function {F(fx(x,y),fy(x,y),z).red} FROM_BLACK(Red)
}
#declare G = pigment
{
function {F(fx(x,y),fy(x,y),z).green} FROM_BLACK(Green)
}
#declare B = pigment
{
function {F(fx(x,y),fy(x,y),z).blue} FROM_BLACK(Blue)
}
#declare Q = pigment {average pigment_map {[R] [G] [B]} }
Hope this helps,
Christian
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Thank you for the reply, I tried to use the second method you suggested and it
works but I still have two problems:
> Assuming P is your existing image map pigment, and
> (fx(x,y),fy(x,y)) is some 2D deformation function
> to be applied to the image with coordinates ranging
> from 0 to 1,
Is it possible to use define fx, fy as macros? The transformation I want to
apply depends on some parameters I have defined and parameters can not be passed
to functions.
> #macro FROM_BLACK(COLOR)
> color_map
> {
> [0 color rgb 0]
> [1 color COLOR]
> }
> #end
This works but the colors are very dark. I thought I should use some other
color_map, like
[0 color rgb 0]
[0.5 color COLOR]
[1 color rgb 1]
but this is not the case. Do I have to change the color_map?
Thank you for your help!
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 03.09.2010 11:54, schrieb esterichia:
>> #macro FROM_BLACK(COLOR)
>> color_map
>> {
>> [0 color rgb 0]
>> [1 color COLOR]
>> }
>> #end
>
> This works but the colors are very dark. I thought I should use some other
> color_map, like
> [0 color rgb 0]
> [0.5 color COLOR]
> [1 color rgb 1]
> but this is not the case. Do I have to change the color_map?
The problem is that they are averaged instead of added; you'll need to
multiply the colour by a factor of 3:
[0 color rgb 0]
[1 color COLOR * 3]
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Thank you clipka, you are right.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
esterichia wrote:
> Is it possible to use define fx, fy as macros? The transformation I want to
> apply depends on some parameters I have defined and parameters can not be passed
> to functions.
Not quite sure what you mean. This works for me:
#local PARAM = 5;
#local f_param = function {2*x*PARAM}
#debug str(f_param(1,0,0),3,0)
#debug "\n"
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 07.09.2010 00:12, schrieb Christian Froeschlin:
> esterichia wrote:
>
>> Is it possible to use define fx, fy as macros? The transformation I
>> want to
>> apply depends on some parameters I have defined and parameters can not
>> be passed
>> to functions.
>
> Not quite sure what you mean. This works for me:
>
> #local PARAM = 5;
> #local f_param = function {2*x*PARAM}
> #debug str(f_param(1,0,0),3,0)
> #debug "\n"
Note that strictly speaking, from the function's perspective this is a
constant, not a parameter, i.e.:
#local PARAM = 5;
#local f_param = function {2*x*PARAM}
#local PARAM = 6; // this will have no effect on the function result
#debug str(f_param(1,0,0),3,0)
#debug "\n"
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|