[OpenGL] perlin noise渲染的一些东西
2017-05-07 15:55
253 查看
* 本项目属于游戏程序设计5000行计划
用原始的柏林噪声渲染一只兔子,我知道这很难看。
void initColor()
{
float d1 = -200, d2 = -200, d3 = -200;
for (int i = 0; i<(sizeof(vertices) / sizeof(vertices[0])); i++)
{
float vec[3] = { d1 + vertices[i][0] * 10, d2 + vertices[i][1] * 10, d3 + vertices[i][2] * 10 };
float c = (noise3(vec) + 1) / 2;
color[i][0] = c;
color[i][1] = c;
color[i][2] = c;
}
}
加上色彩映射后的兔子:
void initColor()
{
float d1 = -200, d2 = -200, d3 = -200;
for (int i = 0; i<(sizeof(vertices) / sizeof(vertices[0])); i++)
{
float vec[3] = { d1 + vertices[i][0] * 10, d2 + vertices[i][1] * 10, d3 + vertices[i][2] * 10 };
float c = (noise3(vec) + 1) / 2;
if (c < 0.3) {
color[i][0] = 0.2;
color[i][1] = 0.2;
color[i][2] = 0.3;
}
else if (c < 0.4) {
color[i][0] = 0.2;
color[i][1] = 0.2;
color[i][2] = 0.5;
}
else if (c < 0.5) {
color[i][0] = 0.2;
color[i][1] = 0.2;
color[i][2] = 0.7;
}
else if (c < 0.6) {
color[i][0] = 0.2;
color[i][1] = 0.2;
color[i][2] = 0.9;
}
else {
color[i][0] = 0.2;
color[i][1] = 0.7;
color[i][2] = 0.7;
}
}
}
加入法线扰动后,在这里打开了灯光,因为这只兔子表面本来就比较粗糙所以效果并不明显:
float* dnoise3(float vec[3])
{
float* d = new float[3];
float vec_x[] = { vec[0] + 1, vec[1], vec[2] };
float vec_y[] = { vec[0], vec[1] + 1, vec[2] };
float vec_z[] = { vec[0], vec[1], vec[2] + 1 };
d[0] = noise3(vec_x) - noise3(vec);
d[1] = noise3(vec_y) - noise3(vec);
d[2] = noise3(vec_z) - noise3(vec);
return d;
}
一维perlin + 水平方向扰动
波浪
用原始的柏林噪声渲染一只兔子,我知道这很难看。
void initColor()
{
float d1 = -200, d2 = -200, d3 = -200;
for (int i = 0; i<(sizeof(vertices) / sizeof(vertices[0])); i++)
{
float vec[3] = { d1 + vertices[i][0] * 10, d2 + vertices[i][1] * 10, d3 + vertices[i][2] * 10 };
float c = (noise3(vec) + 1) / 2;
color[i][0] = c;
color[i][1] = c;
color[i][2] = c;
}
}
加上色彩映射后的兔子:
void initColor()
{
float d1 = -200, d2 = -200, d3 = -200;
for (int i = 0; i<(sizeof(vertices) / sizeof(vertices[0])); i++)
{
float vec[3] = { d1 + vertices[i][0] * 10, d2 + vertices[i][1] * 10, d3 + vertices[i][2] * 10 };
float c = (noise3(vec) + 1) / 2;
if (c < 0.3) {
color[i][0] = 0.2;
color[i][1] = 0.2;
color[i][2] = 0.3;
}
else if (c < 0.4) {
color[i][0] = 0.2;
color[i][1] = 0.2;
color[i][2] = 0.5;
}
else if (c < 0.5) {
color[i][0] = 0.2;
color[i][1] = 0.2;
color[i][2] = 0.7;
}
else if (c < 0.6) {
color[i][0] = 0.2;
color[i][1] = 0.2;
color[i][2] = 0.9;
}
else {
color[i][0] = 0.2;
color[i][1] = 0.7;
color[i][2] = 0.7;
}
}
}
加入法线扰动后,在这里打开了灯光,因为这只兔子表面本来就比较粗糙所以效果并不明显:
float* dnoise3(float vec[3])
{
float* d = new float[3];
float vec_x[] = { vec[0] + 1, vec[1], vec[2] };
float vec_y[] = { vec[0], vec[1] + 1, vec[2] };
float vec_z[] = { vec[0], vec[1], vec[2] + 1 };
d[0] = noise3(vec_x) - noise3(vec);
d[1] = noise3(vec_y) - noise3(vec);
d[2] = noise3(vec_z) - noise3(vec);
return d;
}
void initNormal() { float d1 = -200, d2 = -200, d3 = -200; for (int i = 0; i<(sizeof(normals) / sizeof(normals[0])); i++) { float vec[3] = { d1 + vertices[i][0] * 10, d2 + vertices[i][1] * 10, d3 + vertices[i][2] * 10 }; float* n = dnoise3(vec); normals[i][0] += n[0]; normals[i][1] += n[1]; normals[i][2] += n[2]; normalize3(normals[i]); } }
一维perlin + 水平方向扰动
波浪
相关文章推荐
- OpenGL一些砸碎的东西
- 渲染世界的OPENGL<12> 一些有趣的纹理着色器
- 一些有用的东西
- 开发中常用的工具类、通用 UI 的集合,目前在不断的更新中,尽可能的覆盖 Android 开发中通用的一些东西
- 汗!周老板的“我要-我想”和“7年”,让我感到塌实的内涵-Rachael 飘羽的忠告把一些东西也说的很明白了。剩下就是做,我想,我要了。
- Asp.net必须掌握的一些东西(1)
- 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西
- js 一些常用东西
- 记下一些东西。。。
- 关于C++文件读写的一些东西
- bfc和ifc以及前端基础的一些东西(未整理)
- iOS-----openGL--openGL ES iOS 入门篇4---> 离屏渲染
- XMLHttpRequest的一些东西
- AOP的一些东西(事务的传播特性,前置,后置,环绕,异常 等各种通知)
- opengl从固定渲染管线到可编程渲染管线
- Android初学之关于java的一些东西
- (ubuntu系列)一些必备好玩的东西
- 我在工商讲课的时候准备的一些东西
- vi 编辑器 教你在linux中自由输入删除一些东西的命令
- [转帖] 浅谈HOOK API 都是一些很老很基础的东西 (当然,大牛们可以无视直接PASS!)