1 , SDF

<1> union  min(a,b)

<2> intersect: max(a,b)

<3> Substract  a-b  :

if(b> -a){

return b;

}

return -a;

2, 2d Plane SDF:

float planeSDF(float x;float y;float px;float py; float nx; float ny)
{
return (x - px ) * nx + (y-py) *ny;
} // box ramp to 0-1
vector min;
vector max;
getbbox(,min,max);
vector rpos = fit(@P, min ,max , set(,,) , set(,,) );
rpos.y = - rpos.y; @Cd = planeSDF(
rpos.x , rpos.y ,
0.0f, 0.5f,
0.0f ,1.0f);

X和Y SDF平面切换比较简单:

/* X SDF Plane   */
@Cd = planeSDF(
rpos.x , rpos.y ,
0.5f, 0.0f,
1.0f ,0.0f); /* Y SDF Plane */
@Cd = planeSDF(
rpos.x , rpos.y ,
0.0f, 0.5f,
0.0f ,1.0f);

Houdini渲染一个: Raymarching 2d

Qt Framework:

 2,极坐标2d

1,心:

2:阿基米德螺线

3,复数下的极坐标以及对图像产生的影响

这里的复数定义: Z = x + yi ;

Houdini里扔一个图:

>> , z^2

float ex(float r; float theta)
{
return cos(theta) * r;
}
float ey(float r; float theta)
{
return sin(theta) * r;
} // Z = x + yi;
// Z*Z = (x^2 - y^2) + (2xy)*i; float real = @P.x* @P.x - @P.y*@P.y;
float img = * @P.x * @P.y;
float r = sqrt(real * real + img*img);
float theta = atan2(img,real); @P.x = ex(r , theta);
@P.y = ey(r , theta);

>> Z -> -1/Z

float ex(float r; float theta)
{
return cos(theta) * r;
}
float ey(float r; float theta)
{
return sin(theta) * r;
} // Z = x + yi;
// -1/z = -(x/(x^2+y^2)) + y/(x^2+y^2)i float real = -(@P.x/(@P.x*@P.x + @P.y*@P.y)) ;
float img = @P.y/(@P.x*@P.x + @P.y*@P.y) ;
float r = sqrt(real * real + img*img);
float theta = atan2(img,real); @P.x = ex(r , theta);
@P.y = ey(r , theta);

e^z

Houdini如何画参数方程:

比如:r(t) = (1/t) i + sin(t) j

由于t 不能等于0:

float rmp = float(@ptnum) / float(@numpt-) + 0.000001;
rmp = rmp*;
@P.x = 1.0/rmp;
@P.y = sin(rmp);

 Houdini ISO Surface:画等高面的利器:

使用输入的值,volumevop里随便创建了半径为r = 0.4的SDF球:

则形成的iossurface是:

implicit function for isosurface: Houdini默认给的这个。这个是个半径为1的球。 这其实是一个 三元函数的一个等高面.

$X*$X + $Y*$Y + $Z*$Z - 

半径为5的圆柱则是: x^2 + y^2 = 5 (注意些Houdini由于y是向上,y和z要调换顺序)

$X*$X + $Z*$Z -

x^2+y^2 = z (注意些Houdini由于y是向上,y和z要调换顺序)

$X*$X + $Z*$Z -$Y

如果f(x,y) = 100 - x^2 - y^2

虽说是f(x,y)二元函数,但由于x,y ->对应一个z,画出来是个R^3空间的 三维曲面 ,所以f(x,y) = Z,

在houdini里要写 :

 - $X*$X - $Z*$Z - $Y

画双曲面:

z^2 - x^2 - y^2 = 1(注意些Houdini由于y是向上,y和z要调换顺序)

$Y*$Y - $X*$X - $Z*$Z - 

|x| + |y| 的等高线:

float grad = (abs(@P.x) + abs(@P.z));
@Cd = grad % ;

pow()之后:

float grad = (abs(@P.x) + abs(@P.z));
@Cd = pow(grad,) % ;

参考:

1,高等数学(同济大学),托马斯微积分

2,https://zhuanlan.zhihu.com/milocode

3,https://www.youtube.com/watch?v=MRuhHGYUJSI

Houdini SDF/Raymarching/等高曲面绘制的更多相关文章

  1. 7.5.5编程实例-Bezier曲线曲面绘制

    (a)Bezier曲线                         (b) Bezier曲面 1. 绘制Bezier曲线 #include <GL/glut.h> GLfloat ct ...

  2. 图片不清晰?Graphics 高质量绘制

    Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; Graphics ...

  3. [Matlab]三维曲面绘制实例

    [x,y] = meshgrid(-8:0.5:8); z = sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2,2,1); mesh(x,y, ...

  4. 用OpenGL进行曲线、曲面的绘制

    实验目的 理解Bezier曲线.曲面绘制的基本原理:理解OpenGL中一维.二维插值求值器的用法. 掌握OpenGL中曲线.曲面绘图的方法,对比不同参数下的绘图效果差异: 代码1:用四个控制点绘制一条 ...

  5. Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 下篇

    背景 在上篇中,实现了使用Houdini在UE4里根据地形过程生成植被的最基本的原型.并且支持把植被在UE4里Bake成使用的HierarchicalInstancedStaticMeshCompon ...

  6. matlab绘制三维图形

    原文地址:种三维曲面图. 程序如下: [x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2, ...

  7. MATLAB曲线绘制

    一. 二维数据曲线图1.1 绘制 单根二维曲线plot 函数的基本调用 格式为:plot(x,y) 其中x和y为长度相同的向量,分别用于存储x坐标 和y坐标数据. 例1-1 在0≤x≤2p区间内,绘制 ...

  8. [转帖]MATLAB曲线绘制及颜色类型

    信号源产生的方法 来源:http://www.2cto.com/kf/201401/270494.html  matlab的checkerboard说明,GOOD! 来源:http://www.chi ...

  9. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

随机推荐

  1. Spring-boot使用eclipse搭建项目(一)

    https://blog.csdn.net/qq_37421862/article/details/80484625

  2. UITouch - BNR

    本节任务:创建一个视图,让用户在视图上拖动手指来画线. UIView类能够重载4个方法来处理不同的触摸事件. - (void)touchesBegan:(NSSet *)touches withEve ...

  3. ORM框架的前世今生

    目录 一.ORM简介二.ORM的工作原理三.ORM的优缺点四.常见的ORM框架 一.ORM简介 ORM(Object Relational Mapping)对象关系映射,一般指持久化数据和实体对象的映 ...

  4. Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心

    在阅读Nginx模块开发与架构模式一书时: "Nginx  上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" &am ...

  5. JS操作数组-2

    1. 找出数组 arr 中重复出现过的元素 function duplicates(arr) { var result = []; var count = []; for (var i=0;i< ...

  6. 30分钟了解Springboot整合Shiro

    项目结构截图: 项目在结构上没有任何特殊之处,基本就是MVC的传统结构重点需要关注的是3个Entity类.2个Controller类和1个Config类. 首先,提供pom的完整文档结构: <p ...

  7. springboot打成jar后文件读取问题

    springboot打成的jar包里面不能用File去获取文件对象,只能用流的方式去读取. 获取方式: InputStream resourceAsStream  = 类名.class.getClas ...

  8. YCD 软件更新方法

    备份Messenger的数据库和Player的Chainmail数据 Upgrade process in Cnario is quite simple, uninstall old version ...

  9. Python——Django-manage.py的内容

    在项目的根目录下(也就是有manage.py的那个目录),运行: python3 manage.py runserver IP:端口--> 在指定的IP和端口启动 python3 manage. ...

  10. git 忽略部分文件类型的同步

    场景 利用 pycharm 进行代码操作的时候会自动创建 .idea/ 文件夹 特么我每次随便做点操作.这里面的东西也会随着自动改一些 一开始开始无视 如果是多人协同开发会导致代码合并相关的问题 因此 ...