用c++敲出个玫瑰花

作者: 来和老苟玩耍吧分类: 软件应用 发布时间: 2022-10-04 20:12:18 浏览:177765 次

用c++敲出个玫瑰花

来和老苟玩耍吧:
float depth = start; for (int i = 0; i < max_iterations; i++) { float dist = map(add3(origin, scale3(dir, depth))); if (dist < stop_threshold) return depth; depth += dist * 0.3; if (depth >= end) return end; } return end; } float shading(vec3 v, vec3 n, vec3 eye) { vec3 ev = normalize3(sub3(v, eye)); vec3 vl = normalize3(sub3(light_pos, v)); float diffuse = dot3(vl, n) * 0.5f + 0.5f; vec3 h = normalize3(sub3(vl, ev)); float rim = pow(1.0f - max(-dot3(n, ev), 0.0f), 2.0f) * 0.15f; float ao = clamp(v.y * 0.5f + 0.5f, 0.0f, 1.0f); return (diffuse + rim) * ao; } vec3 ray_dir(float fov, vec2 pos) { vec3 r = { pos.x, pos.y, -tan((90.0f - fov * 0.5f) * DEG_TO_RAD) }; return normalize3(r); } float f(vec2 fragCoord) { vec3 dir = ray_dir(45.0f, fragCoord); vec3 eye = { 0.0f, 0.0f, 4.5f }; mat3 rot = rotat

【回复】代码没发全啊,主函数位置都没有
【回复】回复 @玖霄龙吟風雲啸 :【玫瑰花代码-哔哩哔哩】 https://b23.tv/VwSc0cm
来和老苟玩耍吧:
#include <math.h> #include<windows.h> const int max_iterations = 128; const float stop_threshold = 0.01f; const float grad_step = 0.01f; const float clip_far = 10.0f; const float PI = 3.14159265359f; const float PI2 = 6.28318530718f; const float DEG_TO_RAD = PI / 180.0f; typedef struct { float x, y; } vec2; typedef struct { float x, y, z; } vec3; typedef struct { float m【9】; } mat3; const vec3 light_pos = { 20.0f, 50.0f, 20.0f };

【回复】回复 @晚霞期待与你 :这个括号vc里面没有吧
【回复】@来和老苟玩耍吧 之前我也曾经复制粘贴过这个代码,但是显示有bug,我把PI/180.0f改成3.14159265359f/180.0f就没有bug了,最后也画出来了,但能给我解释一下为什么吗?[保佑][保佑]
来和老苟玩耍吧:
float min(float a, float b) { return a < b ? a : b; } float max(float a, float b) { return a > b ? a : b; } float clamp(float f, float a, float b) { return max(min(f, b), a); } vec2 make2(float x, float y) { vec2 r = { x, y }; return r; } vec2 add2(vec2 a, vec2 b) { vec2 r = { a.x + b.x, a.y + b.y }; return r; } vec2 sub2(vec2 a, vec2 b) { vec2 r = { a.x - b.x, a.y - b.y }; return r; } float dot2(vec2 a, vec2 b) { return a.x * b.x + a.y * b.y; } float length2(vec2 v) { return sqrt(dot2(v, v)); } vec3 make3(float x, float y, float z) { vec3 r = { x, y, z };

【回复】这确定后面没少代码??
高宇航zs:
float depth = start; for (int i = 0; i < max_iterations; i++) { float dist = map(add3(origin, scale3(dir, depth))); if (dist < stop_threshold) return depth; depth += dist * 0.3; if (depth >= end) return end; } return end; } float shading(vec3 v, vec3 n, vec3 eye) { vec3 ev = normalize3(sub3(v, eye)); vec3 vl = normalize3(sub3(light_pos, v)); float diffuse = dot3(vl, n) * 0.5f + 0.5f; vec3 h = normalize3(sub3(vl, ev)); float rim = pow(1.0f - max(-dot3(n, ev), 0.0f), 2.0f) * 0.15f; float ao = clamp(v.y * 0.5f + 0.5f, 0.0f, 1.0f); return (diffuse + rim) * ao; } vec3 ray_dir(float fov, vec2 pos) { vec3 r = { pos.x, pos.y, -tan((90.0f - fov * 0.5f) * DEG_TO_RAD) }; return normalize3(r); } float f(vec2 fragCoord) { vec3 dir = ray_dir(45.0f, fragCoord); vec3 eye = { 0.0f, 0.0f, 4.5f }; mat3 rot = rotat

一眼万年の虎:
有一说一,要真是自己敲出来的真感觉挺牛的

来和老苟玩耍吧:
float ray_marching(vec3 origin, vec3 dir, float start, float end) {

【回复】这,,确定是第三个?花括符包了什么?
【回复】回复 @来和老苟玩耍吧 : 只看到了123的代码,求uP 再发,谢谢哦
ここ_:
up和友友们这个错误怎么改呀,[爱心][爱心][爱心]

【回复】那三行vec3后面应该是 .dx
【回复】好的截屏,使我眼花缭乱()

UP!新学期 编程语言 C++ 计算机 C/C++ 玫瑰花

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!