很多人可能知道the classic windows screen saver .有谁知道这是如何用 3D 或 2D 编程的?不需要真正的代码 - 只需对算法进行全面解释就可以了。
最佳答案
This是 Chrome 的屏幕截图。在 chrome 中,它的编程非常容易:
file_util::AppendToPath(&path, L"sspipes.scr");
CreateProcess(NULL, ...
或者:打开一个 windows 管道屏幕保护程序文件,然后运行它。
xscreensaver 版本的来源是:xscreensaver-4.16.tar.bz2 中的 xscreensaver-4.16/hacks/glx/pipes.c(或同一包的其他版本)。 Online version of the file .
更新:它是如何工作的:它使用 OpenGL 使事物变得美丽
添加的每个 pipe 都绘制为圆柱体和球体:
glBegin(GL_QUAD_STRIP);
for (an = 0.0; an <= 2.0 * M_PI; an += M_PI / 12.0) {
glNormal3f((COSan_3 = cos(an) / 3.0), (SINan_3 = sin(an) / 3.0), 0.0);
glVertex3f(COSan_3, SINan_3, one_third);
glVertex3f(COSan_3, SINan_3, -one_third);
}
glEnd();
空间旋转由 glRotatef
在 glBegin
之前完成。所有旋转仅为 90 度。
结束球体是 glu 对象:
quadObj = gluNewQuadric();
gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL);
gluSphere(quadObj, radius, 16, 16);
gluDeleteQuadric(quadObj);
对于折弯,用了很多代码来绘制(函数myElbow)。
为了不相交,3d 数组与标志“这个空间点包含一个管道”一起使用。所有管道都具有整数坐标并且平行于轴。透视校正来自 3d 库 (opengl/direct3d)。
主要的逻辑函数是draw_pipes
。
它绘制一个球体,随机选择一个方向并开始管道运行。在每一步都有一个随机的弯曲(有 20% 的概率)。此外,每一步都会检查邻居以防止碰撞。如果没有可用空间继续管道或管道足够长(也可能是随机的),它将停止并从随机点开始新管道。
关于objective-c - 随机移动 - Windows Pipe Screensaver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6964466/