① C語言圖形編譯
獨立圖形運行程序的建立
Turbo C對於用initgraph()函數直接進行的圖形初始化程序, 在編譯和鏈接
時並沒有將相應的驅動程序(*.BGI)裝入到執行程序, 當程序進行到intitgraph()
語句時, 再從該函數中第三個形式參數char *path中所規定的路徑中去找相應的
驅動程序。若沒有驅動程序, 則在C:\TC中去找, 如C:\TC中仍沒有或TC不存在,
將會出現錯誤:
BGI Error: Graphics not initialized (use 'initgraph')
因此, 為了使用方便, 應該建立一個不需要驅動程序就能獨立運行的可執行
圖形程序,Turbo C中規定用下述步驟(這里以EGA、VGA顯示器為例):
1. 在C:\TC子目錄下輸入命令:BGIOBJ EGAVGA
此命令將驅動程序EGAVGA.BGI轉換成EGAVGA.OBJ的目標文件。
2. 在C:\TC子目錄下輸入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
此命令的意思是將EGAVGA.OBJ的目標模塊裝到GRAPHICS.LIB庫文件中。
3. 在程序中initgraph()函數調用之前加上一句:
registerbgidriver(EGAVGA_driver):
② 在各種編譯環境如何實現圖形編譯,就是VC啊VB之類的裡面怎麼實現
你知道makefile么?
其實圖形編譯最終還是調用的編譯器去編擾禪指譯,這一點你承認吧?
你對項目的設置都會更改該項目或者解決方案的makefile,最終點擊build的時候,會調用cc.exe(編譯器程序) ... /src:makefile.xx 參數是我自己瞎寫的,但是是這個形式,具體的你得自己去vc的bin目錄下面看。
vc IDE中的makefile,點擊」項目「-》」導出makefile「(export makefile),最後使用文本編輯器打開,就可以看出vc中的makefile寫法~~
知道怎麼寫makefile,並提供用戶整理項目的程序文件組織結構的界面,你襲敬就可以編寫一個IDE。
我記得以前貌似又一片文章還是教程的,講解eclipse的,有興趣你可緩配以找找eclipse的源碼看看。
大概原理就這些,先吃飯了~~有問題追問吧!
③ 請問C語言學習圖形編程學哪個好
wxWidget主要是用於跨平台的GUI開發,並不是面向圖形的。同wxWidget相比,跨平台的GUI開發,我更喜歡Qt,它的文檔非常好,代碼質量也很高。
無論wxWiget還是Qt,都是基於C++的,不是很適合你。
圖形的跨平台庫推薦libSDL,可以用它來開發2D游戲,也可以通過它調用OpenGL,開發3D游戲或圖形程序。libSDL支持linux,在windows下也可以用msys命令行編譯,你喜歡dos開發,就用msys+mingw32+sdl, 沒有任何問題。現在新版的SDL2已經以zlib協議發布,可以免費商用,支持閉源靜態連接!libSDL是用C寫的,不要求C++基礎。
如果要做3D開發,可以看OpenGL。建議從nehe的教程開始。你可能會看到,nehe的很多例子是有SDL版本的,這些例子是通過SDL調用OpenGL實現的。這些基於SDL的代碼,大多是用於Linux下的,但很容易移植到windows下。
CODE BLOCKS, Dev C++等是圖形界面的IDE, 如果你喜歡dos命令行,windows下推薦msys, linux下直接用命令行。如果一定要學CODE BLOCKS, 可以去它的軟體官方網站看原版的文檔。
你前面提到的硬碟鎖,我搜了一下,發現只是一個修改硬碟引導記錄的小工具。這個只要搜索一下相關的 windows api, 對磁碟直接讀寫,替換主引導記錄即可。我想替換的代碼應該是預先做好的。這個問題很小,如果你關注的是功能而不是操作系統的引導細節並實現自己的引導程序,並不需要系統的看書。可以根據這些建議,搜索例子,嘗試自己解決。
④ 圖形學編程
在三維繪圖蓬勃發展的過程中,計算機公司推出了大量的三維繪圖軟體包。其中SGI公司推出的OpenGL,作為一個性能優越的圖形應用程序設計界面(API)異軍突起,取得了很大的成就。它以高性能的互動式三維圖形建模能力和易於編程開發,得到了Microsoft、IBM、DEC、Sun、HP等大公司的認同。因此,OpenGL已經成為一種三維圖形開發標准,是從事三維圖形開發工作的必要工具。
1、初始化OpenGL繪圖環境
1.1 定義顏色格式和緩沖模式
OpenGL提供兩種顏色模式:RGB(RGBA)模式和顏色索引模式(調色板)。在RGBA模式下所有顏色的定義用RGB三個值來表示,有時也加上Alpha值(表示透明度)。RGB三個分量值的范圍都在0和1之間,它們在最終顏色中所佔的比例與它們的值成正比。如:(1、1、0)表示黃色,(0、0、1)表示藍色。顏色索引模式下每個象素的顏色是用顏色索引表中的某個顏色索引值表示(類似於從調色板中選取顏色)。由於三維圖形處理中要求顏色靈活,而且在陰影,光照,霧化,融合等效果處理中RGBA的效果要比顏色索引模式好,所以,在編程時大多採用RGBA模式。
OpenGL提供了雙緩存來繪制圖像。即在顯示前台緩存中的圖像同時,後台緩存繪制第二幅圖像。當後台繪制完成後,後台緩存中的圖像就顯示出來,此時原來的前台緩存開始繪制第三幅圖像,如此循環往復,以增加圖像的輸出速度。
設置窗口顯示模式函數:
void auxInitDisplayMode(
AUX_DOUBLE | // 雙緩存方式
AUX_RGBA // RGBA顏色模式
);
1.2 設置光源
OpenGL的光源大體分為三種:環境光(Ambient light),即來自於周圍環境沒有固定方向的光。漫射光(Diffuse light)來自同一個方向,照射到物體表面時在物體的各個方向上均勻發散。鏡面光(Specular light)則是來自於同一方向,也沿同一個方向反射。全局環境光是一種特殊的環境光,它不來自特於某種定光源,通常做為場景的自然光源。
指定光源函數:
void glLightfv(
Glenum light, // 光源號
Glenum pname, // 指明光源類型:
// GL_DIFFUSE 光源為漫射光光源
// GL_AMBIENT 光源為環境光光源
// GL_SPECULAR 光源為鏡面光光源
const Glfloat* params // 指向顏色向量的指針
);
設置全局環境光函數:
void glLightModelfv(
GL_LIGHT_MODEL_ AMBIENT,
const Glfloat* param // param:指向顏色向量的指針
);
起用光源函數:
void glEnable(GL_LIGHTING);
void glEnable(GL_enum cap); // cap:指明光源號
1.3 設置材質
在OpenGL中,用材料對光的三原色(紅綠藍)的反射率大小來定義材料的顏色。與光源相對應,材料的顏色,也分為環境色,漫反射色和鏡面反射色,由此決定該材料對應不同的光呈現出不同的反射率。由於人所看到物體的顏色是光源發出的光經物體反射後進入眼睛的顏色。所以,物體的顏色是光源的環境光,漫反射光和鏡面反射光與材料的環境色,漫反射色和鏡面反射色的綜合。例如:OpenGL的光源色是(LR、LG、LB),材質色為(MR、MG、MB),那麼,在忽略其他反射效果的情況下,最終進入眼睛的顏色是(LR*MR、LG*MG、LB*MB)。
材質定義函數:
void glMaterialfv(
GLenum face, // 指明在設置材質的哪個表面的顏色。
// 可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK
GLenum pname, // 與光源的pname參數相似
const float* params // 指向材質的顏色向量
);
1.4 定義投影方式
也即選擇觀察物體的角度和范圍。由於我們是三維繪圖,所以採用不同的視點和觀察范圍,就會產生不同的觀察效果。由於計算機只能顯示二維圖形,所以在表示真實世界中的三維圖形時,需將三維視景轉換成二維視景。這是產生三維立體效果的關鍵。OpenGL提供了兩種將3D圖形轉換成2D圖形的方式。正投影(Orthographic Projection)和透視投影(Perspective Projection)。其中,正投影指投影後物體的大小與視點的遠近無關,通常用於CAD設計;而透視投影則符合人的心理習慣,離視點近的物體大,離視點遠的物體小。此外,在OpenGL中還要定義投影范圍,只有在該范圍中的物體才會被投射到計算機屏幕上,投影范圍外的物體將被裁減掉。
定義投影范圍(不同的投影方式對應不同函數):
void glOrtho(
GLdouble left, GLdouble right,
// (left,bottom,near)及(right,top,far)分別給出正射投
GLdouble bottom, GLdouble top, // 影投影范圍的左下角和右上角的坐標。
GLdouble near,GLdouble far);
2、定義與Windows介面的系統函數
2.1 定義繪圖窗口的位置
// (x,y)給出窗口左上角坐標
// width及heigh給出窗口的寬高
void auxInitPosition(GLint x,GLint y,GLsizei width, GLsizei heigh);
2.2 定義繪圖窗口的標題
// STR表示窗口標題字串
void auxInitWindow(GLbyte* STR);
2.3 定義繪圖窗口改變時的窗口刷新函數
// 當窗口改變形狀時調指定的回調函數
// NAME表示回調函數名稱
void auxReshapeFunc(NAME);
2.4 定義空閑狀態的空閑狀態函數以實現動畫
// 當系統空閑時調用指定的回調函數
// NAME表示回調函數名稱
void auxIdleFunc(NAME);
2.5 定義場景繪制函數(當窗口更新或場景改變時調用)
// 當窗口需要更新或場景變化時調用
// NAME表示回調函數名稱
void auxMainLoop(NAME);
在VC編輯器下鍵入下述代碼後,保存為後綴是.cpp的C++文件。開始編譯,在「The build command requires an active project workspace」。「Would you like to create a default project workspace」? 的提示後,選擇「是(Y)」。進入「Project」菜單,選擇「Setting」項,彈出「Project Setting」對話框,選擇「Link」項,在「Libaray」欄目中加入OpenGL提供的函數庫:「opengl32.lib glu32.lib glaux.lib」。(注意:在執行程序時,Windows的system目錄下要包含opengl32.dll及glu32.dll兩個動態連接庫)。附源程序代碼:
#include "windows.h"
#include "gl/gl.h"
#include "gl/glaux.h"
#include "gl/glu.h"
#include "math.h"
void myinit()
{
glClearColor(1,1,0,0);
GLfloat ambient[]={.5,.5,.5,0};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
GLfloat mat_ambient[]={.8,.8,.8,1.0};
GLfloat mat_diffuse[]={.8,.0,.8,1.0};
GLfloat mat_specular[]={1.0,.0,1.0,1.0};
GLfloat mat_shininess[]={50.0};
GLfloat light_diffuse[]={0,0,.5,1};
GLfloat light_position[]={0,0,1.0,0};
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,mat_ambient);
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS,mat_shininess);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0,GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
}
void CALLBACK display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
auxSolidSphere(1.0); // 繪制半徑為1.0的實體球
glFlush(); // 強制輸出圖像
auxSwapBuffers(); // 交換繪圖緩存
_sleep(100);
}
void CALLBACK Idledisplay()
{
// x,y滿足x2+y2=0.01。這樣可以使物體沿該圓軌跡運動。
static float x=-.1,y=0.0;
static BOOL mark=TRUE;
static float step=.01;
x+=step;
if(x<=.1&&x>=-.1)
{
if(step>0)
y=sqrt(.01-x*x);
else
y=-sqrt(.01-x*x);
glTranslatef(x,y,0);
}
else
{
step=0-step;
}
display();
}
void CALLBACK myReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
glOrtho(-3.5,3.5,-3.5*(GLfloat)w/(GLfloat)h, 3.5*(GLfloat)w/(GLfloat)h,-10,10);
else
glOrtho(-3.5*(GLfloat)w/(GLfloat)h,3.5* (GLfloat)w/(GLfloat)h,-3.5,3.5,-10,10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main()
{
auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);
auxInitPosition(0,0,400,400);
auxInitWindow(" circle ");
myinit();
auxReshapeFunc(myReshape);
auxIdleFunc(Idledisplay);
auxMainLoop(display);
}
給你一個關於VC和OPENGL的網站,不錯的
http://dev.yesky.com/402/2084902.shtml
⑤ C-Free能編譯圖形嗎如何編譯
永遠不可能!
兄弟,這不是20年前!Turboc2.0是在DOS時代的編譯器,而DOS是有兩種工作模式的:字元模式、圖形模式。
但現在是Windows的時代!W系統可沒有「圖形模式」和「字元模式」之分。
所以,你的那個「圖形頭文件」是決不可能在VC里使用的。
兼容主要體現在語法上,並不是說所有的TC程序都能在W系統下運行!程序是要和操作系統掛鉤的。除非是JAVA,和平台無關。
所以你還是放棄吧,沒有任何辦法。TC的圖形程序如果要在W系統里運行,只能重寫!
另外,站長團上有產品團購,便宜有保證
⑥ 在各種編譯環境如何實現圖形編譯,就是VC啊VB之類的裡面怎麼實現圖形編譯。具體一點,直白一點。急用
請提問的時候整理思路衡李此,並且把相關詞語解釋咐迅一下。什麼叫做圖形編譯?
如果是圖形界面編程,用win32 API就擾者應該可以。如果用其他圖形框架,一般都會附帶在各個編譯器下調用的幫助的。
⑦ 什麼是圖形化編程編程語言是什麼
圖形化編程就是編寫有界面的程序,編程語言是一種被標准化的交流技巧,用來向計算機發出指令,定義計算機程序。
一、圖形化編程
1、使用圖形化編程可以進行良好的頁面布局,在現有的很多Web應用中,其應用程序的頁面布局經常需要使用圖像,這樣能夠讓頁面整體效果更加友好。用戶會對界面友好的應用程序印象深刻從而會進行回訪。
2、在頁面布局中,很多設計人員喜歡使用CSS設計,這樣能夠簡化頁面代碼,將頁面布局代碼和頁面代碼相分離,從而提高了維護性。
二、編程語言
1、允許程序員准確地定義計算機需要使用的數據以及在不同情況下要採取的行動。在不斷的發展和變化過程中,從最初的機器語言到2500多種高級語言,每種語言都有其特定的目的和不同的發展道路。
2、編程語言不像人類自然語言的發展和變化那樣緩慢和持久,它的發展是相當迅速的。這主要是因為計算機硬體、互聯網和IT產業的發展促進了編程語言的發展。
(7)圖形編譯好不好擴展閱讀:
編程語言選用技巧
1、在選擇編程語言之前,應充分考慮項目的總體框架,以確定編程語言的分布。因為整個項目的所有部分都是用一種語言寫的。在一些項目中,可以相對簡單地選擇最佳編程語言,但是編程過程是靈活多變的。最佳語言選擇需要根據程序要求進行更改。
2、在科學合理的原則下,我們應該選擇最熟悉的編程語言。因為開發人員熟悉某種語言,他們可以極大地幫助他們預測開發時間、過程和其他內容,這可以很好地避免大的變化,提高編程效率。
3、對於高成本操作,如加密、圖形渲染、視頻處理和其他內容操作,應給予充分考慮。對於這些高成本的操作模塊,開發人員應該選擇需要編譯的靜態語言。JAVA和C#是最好的選擇。
參考資料來源:網路-編程語言