【发布时间】:2014-05-15 05:41:50
【问题描述】:
我想在着色器中创建翻页效果。所以我有一个 y=0 的 XZ 平面点。现在我假设一个具有 R 半径和 Inf 的圆柱体。高度位于平面上,沿 Y 轴旋转一定角度。看图:
我想要一个方程,以便纸张可以在给定的 XZ 方向上滚过球体。
我正在做的是:
float2 currPoint = gl_Vertex.xz;
float2 normDir = normalize(-1, 0); //direction at which paper will start rolling out.
float cylRadius = 1.f;
float dist = sqrt(normDir.x *vi.x * vi.x + normDir.y *vi.y * vi.y);
float beta = dist / cylRadius;
float3 outPos = 0;
outPos.x = currPoint.x + N.x * cylRadius * sin(beta);
outPos.z = cylRadius * (1 -cos(beta));
outPos.y = currPoint.y + N.y * cylRadius * sin(beta);
但它只在normDir = normalize(-1, 0)的情况下有效,在其他情况下结果不符合预期。
【问题讨论】:
-
首先,什么球体?您在问题中讨论了圆锥和圆柱。此外,您需要曲面细分才能完成这项工作,否则您只会扭曲一个四边形。我提到这一点是因为您的图表似乎使用 4 个点来表示论文。
标签: c++ opengl math shader projection