你們許多人可能知道the classic windows screen saver。有沒有人知道這是如何編程在3D或2D?沒有必要的真正的代碼 - 只是對算法的全面解釋會很好。隨機移動 - Windows管屏幕保護程序
回答
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();
空間中的旋轉是由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%的概率)。此外,neiborhods每一步檢查,以防止碰撞。是否沒有可用空間來繼續管道或管道足夠長(可能是隨機的),它將停止並且新管道從隨機點開始。
這是使用OpenGL完成的(當MS對Windows上的OpenGL感到興奮時)。雖然我不能說權威的其餘(不知道我見過源代碼),它看起來看起來像一個非常簡單的問題,選擇方向(上,下,左,右,前進,後退)和一個距離,有一些界限可以將它全部保存在一個立方體中。
管道有一些特定的直徑,如果需要,您可以選擇要在管道上紋理化的位圖。如果你不使用紋理,它可以/將選擇顏色。它已經夠老了,我相信它的寫作僅僅使用Windows定義的20(16?)顏色作爲幾乎所有圖形適配器通常支持的基本調色板 - 但由於主流硬件幾乎受到限制,這已經過去了很長一段時間。
- 1. Windows UWP作爲屏幕保護程序?
- 2. Windows XP屏幕保護程序 - 使用屏幕保護程序啓動過程死亡
- 3. Windows C++屏幕保護程序不會回到屏幕上
- 4. Windows手機屏幕保護程序?可能?
- 5. 動畫屏幕保護程序
- 6. 將Java應用程序轉換爲Windows屏幕保護程序
- 7. 從C#Windows窗體啓動系統屏幕保護程序
- 8. 在Windows 7上監視屏幕保護程序活動失敗
- 9. 屏幕保護程序啓動時運行蘋果手機
- 10. 啓動自定義屏幕保護程序+鎖機
- 11. 3D屏幕保護程序干擾WPF應用程序(Windows XP)
- 12. 隨機移動星星在屏幕上
- 13. iPhone應用內屏幕保護程序
- 14. Android禁用屏幕保護程序
- 15. 接收屏幕保護程序通知
- 16. 屏幕保護程序隱藏桌面
- 17. 屏幕保護程序會隨意更改
- 18. 尋找一個Windows屏幕保護程序測試啓動程序
- 19. 屏幕保護程序無法在Windows XP
- 20. C++爲Windows創建屏幕保護程序
- 21. 捕捉屏幕保護程序事件
- 22. 檢查屏幕保護程序激活
- 23. 屏幕保護程序的Android代碼
- 24. applicationWillResignActive x屏幕保護程序
- 25. iphone屏幕保護程序(帶時鐘)
- 26. Xcode與openGL的屏幕保護程序
- 27. 爲Windows和Mac創建屏幕保護程序 - Silverlight?
- 28. Android屏幕隨AdView移動
- 29. OSX獅子錯誤:啓動屏幕保護程序,當程序
- 30. Android:啓動Flash應用程序作爲屏幕保護程序
您可以檢查[xscreensaver](http://www.jwz.org/xscreensaver/)中的克隆。 –