實現EGE這樣的圖形庫需要什麼技術支持?

題主計算機專業在讀,剛接觸編程,對編程充滿好奇。

近期在追一個C++的MOOC,其中老師提到了EGE,並對其給予了很高的評價。

我很好奇,實現EGE這樣的一個圖形庫需要怎樣的水平呢?

//////相關信息//////

EGE: Easy Graphics Engine.

地址:misakamm/xege · GitHub


這玩意就是對還在用TC的人做一個過渡用的庫,方便做點玩具程序用的,設計目標就是方便地寫玩具。技術含量不多,技術點屈指可數,完整copy一個只是時間的問題。因為當時看到用TC的太多了,當然現在少了很多,於是也沒有維護的動力了,原本到2013已經停止維護了。最近的更新只是修個bug,因為有大學老師找窩。。。

嘛,立場是很明確的,這個是過渡用的,過渡了就應該使用更高大上的東西。因為模仿BGI本身就是一個失敗。不過在它還有存在價值的時候,就讓它發揮一下餘熱吧。

現在窩主要是做研究,搞自己有興趣的東西,維護一個項目對於窩來說不適合,窩不打算當程序媛。

另外關於窩能不能少討論一些。。。關注窩的人為啥每小時就增加好幾個,好可怕。。。


我覺得可以推廣下我的 island,給高校的 C 語言老師們用……

也可以用來教計算機圖形學,甚至遊戲開發……

island-org/island · GitHub

這麼優雅的代碼,居然是 C 語言,你敢信?

圖片、字體、滑鼠、鍵盤、音頻等功能都一一支持,底層是 OpenGL,並且跨平台。

主要賣點是 API 特別友好。

#define SKETCH_2D_IMPLEMENTATION
#include "sketch2d.h"

PImage img1, img2;
PFont font;

void setup()
{
size(displayWidth, displayHeight);
noCursor();
img1 = loadImage("../3rdparty/nanovg/example/images/image9.jpg");
img2 = loadImage("../3rdparty/nanovg/example/images/image10.jpg");
font = loadFont("../3rdparty/nanovg/example/Roboto-Regular.ttf");
}

void draw()
{
background(gray(122));

if (mousePressed)
{
image(img1, mouseX, mouseY, img1.width, img1.height);
}
else
{
image(img2, mouseX, mouseY, img2.width, img2.height);
}

textFont(font);
textAlign(NVG_ALIGN_CENTER);
textSize(30);
textLeading(5);
text("test everything here", width/2, height/2);
}

void shutdown()
{
}


你只要看懂《Visual Basic 4.0 高級圖形程序設計教程》的其中一小部分就可以把整個庫做出來了,其實大部分時候還是堆代碼堆苦力,技術含量要說多高也不見得。

當然了,人家御坂mm據說當年還是個初中生……就不一樣了


第一次聽說 EGE,看了一下,它是在Windows下利用GDI模擬DOS年代的BGI(Borland Graphics Interface)介面。只要熟悉GDI和一般Win32的使用,寫一個這樣的wrapper應該不太困難。

問題是,有什麼原因或需求要模擬一個近30年前的API?我在DOS年代做圖形最初是有用過BGI的,但因其性能問題及功能較缺乏,後來都是自己做光柵化及遊戲相關的功能。

現在或許較相似的庫是 Simple DirectMedia Layer(SDL),它也是C API。但它是跨平台,而且成熟到能做商業遊戲。


單論2D繪製,我覺得GDI+是一個非常好的庫,API設計的很優秀。


為什麼不問問神奇的海螺呢? @Misakamm 嗯。沒錯!這是炮姐的作品。

帝球的FrankHB/YEGE · GitHub

類似的庫還有http://www.easyx.cn/,不過不是開源的。

這樣的庫提供的API使用起來挺簡單的,容易勾起初學者的學習興趣,相信這就是需求之一吧。依然記得第一次調用MessageBox後彈出一個對話框的那個下午……,那是我逝去的青村。

----


是的,基本上win32編程隨便看看就能寫出來。

我司的設備需要兼任wince1.0的設備,美國人的。所以我大學三年級的時候搞了個類似的。10多年前的事兒了。當時剛接觸win32。

最近一款Cortex-A8搞的設備依然要兼容舊應用。所以同事又搞了一套。


我覺得我可以推薦一下我寫的圖形庫,封裝了sdl的。

看我簡介,有鏈接。

基於sdl,跨平台,支持opengl與glsl。

採用了很多c++11特性,vs2015暫不支持。

只支持g++。win下是mingw。

ps:炮姐最萌了。


ege所用的技術不高深, 但他解決的需求確實存在的, 為了學校教學存在的庫:

總感覺在學校教材/教案無法與時俱進的今天,這種庫確實解決了很多學生學習的入門門檻問題.

許多學編程的都是從 C 語言開始入門的,而目前的現狀是:

  1. 有些學校以 Turbo C 為環境講 C 語言,只是 Turbo C 的環境實在太老了,複製粘貼都很不方便。並且dos環境在現在的操作系統支持很有限,並且dos下可用顏色數太少。

  2. 有些學校直接拿 VC 來講 C 語言,因為 VC 的編輯和調試環境都很優秀,並且 VC 有適合教學的免費版本。可惜初學者在 VC 下一般只會做一些文字性的練習題,想畫條直線畫個圓都很難,還要註冊窗口類、建消息循環等等,初學者會受嚴重打擊的,甚至有初學者以為C只能在「黑框」下使用。

  3. 還有計算機圖形學,這門課程的重點是繪圖演算法,而不是 Windows 編程。所以,許多老師不得不用 TC 教學,因為 Windows 繪圖太複雜了,會偏離教學的重點。新的圖形學的書有不少是用的 OpenGL,可是門檻依然很高。

  如果您剛開始學 C 語言,或者您是一位教C語言的老師,再或者您在教計算機圖形學,那麼這個庫一定會讓您興奮的。採用ege圖形庫,您將可以在VC的環境中方便的處理和生成圖像,甚至製作動畫和遊戲。

目前模擬了絕大多數 BGI 的繪圖函數。使用上,基本的繪圖函數和 TC / BC 沒太大區別。看一個畫圓的例子吧:

#include "graphics.h" // 就是需要引用這個圖形庫
int main()
{
initgraph(640, 480); // 初始化,顯示一個窗口,這裡和 TC 略有區別
circle(200, 200, 100); // 畫圓,圓心(200, 200),半徑 100
getch(); // 暫停一下等待用戶按鍵
closegraph(); // 關閉圖形界面
return 0;
}


推薦閱讀:

計算幾何有何經典書籍?
計算機視覺中video understanding領域有什麼研究方向和比較重要的成果?
氣體和液體的流體模擬有哪些異同?
一般在graphics research中是怎麼做unit test的?

TAG:MicrosoftWindows | 圖形用戶界面 | CC | 計算機圖形學 |