Houdini SDF/Raymarching/等高曲面绘制
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/等高曲面绘制的更多相关文章
- 7.5.5编程实例-Bezier曲线曲面绘制
(a)Bezier曲线 (b) Bezier曲面 1. 绘制Bezier曲线 #include <GL/glut.h> GLfloat ct ...
- 图片不清晰?Graphics 高质量绘制
Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; Graphics ...
- [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, ...
- 用OpenGL进行曲线、曲面的绘制
实验目的 理解Bezier曲线.曲面绘制的基本原理:理解OpenGL中一维.二维插值求值器的用法. 掌握OpenGL中曲线.曲面绘图的方法,对比不同参数下的绘图效果差异: 代码1:用四个控制点绘制一条 ...
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 下篇
背景 在上篇中,实现了使用Houdini在UE4里根据地形过程生成植被的最基本的原型.并且支持把植被在UE4里Bake成使用的HierarchicalInstancedStaticMeshCompon ...
- matlab绘制三维图形
原文地址:种三维曲面图. 程序如下: [x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2, ...
- MATLAB曲线绘制
一. 二维数据曲线图1.1 绘制 单根二维曲线plot 函数的基本调用 格式为:plot(x,y) 其中x和y为长度相同的向量,分别用于存储x坐标 和y坐标数据. 例1-1 在0≤x≤2p区间内,绘制 ...
- [转帖]MATLAB曲线绘制及颜色类型
信号源产生的方法 来源:http://www.2cto.com/kf/201401/270494.html matlab的checkerboard说明,GOOD! 来源:http://www.chi ...
- Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!
Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...
随机推荐
- Kafka简介、基本原理、执行流程与使用场景
一.简介 Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统. 它最初由LinkedIn公司开发,Linkedin于201 ...
- 把json数据转换成集合
Sting MessageList="";JSONArray json = JSONArray.fromObject(MessageList);JSONObject object ...
- 关于hibernate查询结果类的封装
实际应用中,我们查询的结果有时候会需要其他的类或者是一个新的包装类,即希望映射到一个DTO(即使hibernate早在很久就不推荐使用..)但我还是说一下吧 如 我有这样子的两个类 //get和set ...
- [转帖]Ansible批量远程管理Windows主机(部署与配置)
2018-09-12 12:04:42 https://blog.51cto.com/7424593/2174156 一.测试环境介绍 Ansible管理主机: 系统: CentOS6.8 IP ...
- [转帖]ORA-03113解决方法
ORA-03113解决方法 https://www.cnblogs.com/xwdreamer/p/3910264.html 同事遇到过很多次 之前懒的处理 这次看到这个blog 下次遇到了 处理一下 ...
- JAXB注解的使用详解
前言: 最近一直在做各种接口的对接,接触最多的数据类型就是JSON和XML数据,还有XML中包含JSON的数据,而在Java中对象和XML之间的转换经常用到JAXB注解,抽空在这里总结一下,首先做一下 ...
- ABP项目概述
在系统性介绍整个ABP框架之前,我们首先需要对ABP框架有一个大概的了解,ABP框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目)顾名思义就是能够通过 ...
- Python——Flask框架——程序的结构
一.项目结构 |-flasky |-app Flask程序一般都保存在这里 |-templates/ |-static/ |main/ |-__init__.py |-errors.py |-form ...
- koa-router 后台路由管理框架
koa-router是koa框架配套的路由管理模块,对后台的接口分离出来. 首先引入koa和koa-router, 然后分批设置路由: 代码中的institution.modifyInsStatus是 ...
- 设置 sql_mode
MySQL 的 sql_mode 合理设置 sql_mode 是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模 ...