2011-08-06 52 views

回答

4

This是Chrome的屏幕截圖。在鉻它很容易編程:

file_util::AppendToPath(&path, L"sspipes.scr"); 
    CreateProcess(NULL, ... 

或:打開一個Windows管屏幕保護程序文件,並運行它。

xscreensaver的版本的來源是:xscreensaver-4.16/hacks/glx/pipes.c在xscreensaver-4.16.tar.bz2(或同一軟件包的其他版本)中。 Online version of the file

UPDATE:它是如何工作的:它使用OpenGL,使每個管addittion被畫成圓柱體和球體的事情美麗

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(); 

空間中的旋轉是由glRotatefglBegin之前完成。所有旋轉只有90度。

結束球體是Glu對象:

quadObj = gluNewQuadric(); 
    gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); 
    gluSphere(quadObj, radius, 16, 16); 
    gluDeleteQuadric(quadObj); 

對於彎曲,大量的代碼被用於繪製(功能myElbow)。

爲了不相交,3d數組與標誌「此空間點包含管道」一起使用。所有管道都具有整數座標並與軸平行。透視校正來自3D庫(opengl/direct3d)。

帶邏輯的主要功能是draw_pipes

它繪製一個球體,隨機選擇一個方向並開始管道運行。在每一步都有一個隨機的彎曲(有20%的概率)。此外,neiborhods每一步檢查,以防止碰撞。是否沒有可用空間來繼續管道或管道足夠長(可能是隨機的),它將停止並且新管道從隨機點開始。

0

這是使用OpenGL完成的(當MS對Windows上的OpenGL感到興奮時)。雖然我不能說權威的其餘(不知道我見過源代碼),它看起來看起來像一個非常簡單的問題,選擇方向(上,下,左,右,前進,後退)和一個距離,有一些界限可以將它全部保存在一個立方體中。

管道有一些特定的直徑,如果需要,您可以選擇要在管道上紋理化的位圖。如果你不使用紋理,它可以/將選擇顏色。它已經夠老了,我相信它的寫作僅僅使用Windows定義的20(16?)顏色作爲幾乎所有圖形適配器通常支持的基本調色板 - 但由於主流硬件幾乎受到限制,這已經過去了很長一段時間。