圖形類編程
㈠ 圖形化編程里什麼是函數
是void函數。
返回類型,函數名在就是對於初學者要記住以後常用的幾種函數的實現:比如排序,求公約數,因為這些在以後的章節中的學習會經常遇到。
在各類編程語言中,函數是一種過程,也稱為子程序,它執行一個指定的運算或操作。函數有內部函數或稱標准函數,外部函數也即用戶定義函數等。能被程序或主函數調用。C語言中,函數的形式分無參和有參兩類。無參函數不帶回或帶回函數值。
閉包和高階函數
函數編程支持函數作為第一類對象,有時稱為閉包或者仿函數(functor)對象。實質上,閉包是起函數的作用並可以像對象一樣操作的對象。與此類似,FP 語言支持高階函數。高階函數可以用另一個函數(間接地,用一個表達式) 作為其輸入參數,在某些情況下,它甚至返回一個函數作為其輸出參數。這兩種結構結合在一起使得可以用優雅的方式進行模塊化編程,這是使用 FP 的最大好處。
㈡ 圖形學編程
在三維繪圖蓬勃發展的過程中,計算機公司推出了大量的三維繪圖軟體包。其中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
㈢ 圖形化編程是什麼課程
是入門編程語言。
1、使用圖形化編程可以進行良好的頁面布局,在現有的很多Web應用中,其應用程序的頁面布局經常需要使用圖像,這樣能夠讓頁面整體效果更加友好。用戶會對界面友好的應用程序印象深刻從而會進行回訪。
2、在頁面布局中,很多設計人員喜歡使用CSS設計,這樣能夠簡化頁面代碼,將頁面布局代碼和頁面代碼相分離,從而提高了維護性。
編程語言選用技巧
1、在選擇編程語言之前,應充分考慮項目的總體框架,以確定編程語言的分布。因為整個項目的所有部分都是用一種語言寫的。在一些項目中,可以相對簡單地選擇最佳編程語言,但是編程過程是靈活多變的。最佳語言選擇需要根據程序要求進行更改。
2、在科學合理的原則下,我們應該選擇最熟悉的編程語言。因為開發人員熟悉某種語言,他們可以極大地幫助他們預測開發時間、過程和其他內容,這可以很好地避免大的變化,提高編程效率。
㈣ 圖形編程是什麼
圖形編程的概念很廣,有UI編程,還有游戲編程,游戲編程又分為2D游戲、3D游戲等。有人覺得游戲不是一門藝術,因為受眾也是參與者;有人覺得游戲是一門藝術,尤其是一門交互藝術。創造游戲的人和游戲的受眾,都在虛擬世界中沉迷。
UI編程也如是,早期PC機上,人們在厭倦了XP風格的界面後,爭先恐後的用GDI+技術產出了各種各樣的UI風格。這種風格的UI界面不但美觀而且安全。
其安全性在於,使用GDI+技術繪制的UI控制項,不在Windows系統本身控制范圍內,所以任何檢測工具都無法檢測到其存在,這使得UI入侵的難度變高。
圖形與數據:
圖形界面編程是在與機器做抗爭,而數據編程是在與人做抗爭。數據,是人產生的,所以數據編程是對人的編程。人產生的數據千變萬化,一套代碼無法適應持續波動的數據,但是經過一系列演算法,過濾,檢測後,最終得出的結果卻是十分客觀的。
這是一個奇妙的事情,甚至可以上升到哲學層面。對機器編程產生主觀結果,對人編程產生客觀結果。如果按照這個理論,那麼上面那位說自己喜歡「算出東西」的同學,則是一個標準的理科生思維,而喜歡圖形編程的同學,則是人文和技術兼備的創作家。
㈤ 現在3D圖形的編程都是怎樣實現的你知道嗎
現在3D圖形的編程是通過css3樣式實現的,也有一些是通過使用即見即所得的軟體實現的,比如3Dmax這類軟體。
㈥ 什麼是圖形化編程編程語言是什麼
圖形化編程就是編寫有界面的程序,編程語言是一種被標准化的交流技巧,用來向計算機發出指令,定義計算機程序。
一、圖形化編程
1、使用圖形化編程可以進行良好的頁面布局,在現有的很多Web應用中,其應用程序的頁面布局經常需要使用圖像,這樣能夠讓頁面整體效果更加友好。用戶會對界面友好的應用程序印象深刻從而會進行回訪。
2、在頁面布局中,很多設計人員喜歡使用CSS設計,這樣能夠簡化頁面代碼,將頁面布局代碼和頁面代碼相分離,從而提高了維護性。
二、編程語言
1、允許程序員准確地定義計算機需要使用的數據以及在不同情況下要採取的行動。在不斷的發展和變化過程中,從最初的機器語言到2500多種高級語言,每種語言都有其特定的目的和不同的發展道路。
2、編程語言不像人類自然語言的發展和變化那樣緩慢和持久,它的發展是相當迅速的。這主要是因為計算機硬體、互聯網和IT產業的發展促進了編程語言的發展。
(6)圖形類編程擴展閱讀:
編程語言選用技巧
1、在選擇編程語言之前,應充分考慮項目的總體框架,以確定編程語言的分布。因為整個項目的所有部分都是用一種語言寫的。在一些項目中,可以相對簡單地選擇最佳編程語言,但是編程過程是靈活多變的。最佳語言選擇需要根據程序要求進行更改。
2、在科學合理的原則下,我們應該選擇最熟悉的編程語言。因為開發人員熟悉某種語言,他們可以極大地幫助他們預測開發時間、過程和其他內容,這可以很好地避免大的變化,提高編程效率。
3、對於高成本操作,如加密、圖形渲染、視頻處理和其他內容操作,應給予充分考慮。對於這些高成本的操作模塊,開發人員應該選擇需要編譯的靜態語言。JAVA和C#是最好的選擇。
參考資料來源:網路-編程語言