1. 程式人生 > >OpenGL入門示例8——圖形平移、旋轉、縮放

OpenGL入門示例8——圖形平移、旋轉、縮放

#include<GL/glut.h>
#include <windows.h>

static GLfloat spin=0.0;				//旋轉量
static GLfloat move=0.0;				//平移量
static GLfloat size=1.0;				//縮放量

void init(void)
{
	glClearColor(0.0,0.0,0.0,0.0);		//指定清除顏色(黑色),即背景顏色
	glShadeModel(GL_FLAT);
}

void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);		//清除所有的畫素
	glPushMatrix();
	glTranslatef(move,0,0);				//移動,引數含義(x軸位移,y軸位移,z軸位移)
	glRotatef(spin,0,0,1);				//旋轉,引數含義(旋轉量,x軸,y軸,z軸)
	glScalef(size,size,1);				//縮放,引數含義(x軸倍數,y軸倍數,z軸倍數)
	glColor3f(0.0,1.0,0.0);				//繪製顏色RGB
	glRectf(-25.0,-25.0,25.0,25.0);		//繪製矩形
	glPopMatrix();
	glutSwapBuffers();
}

void reshape(int w,int h)
{
	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
}

void spinAndSizeDisplay()
{
	spin>360?spin-=360:spin+=2;
	size>2?size-=2:size+=0.003;
	glutPostRedisplay();				//標記當前視窗需要重繪,否則不會旋轉
	Sleep(10);
}

void moveDisplay()
{
	move=move>20?move-=20:move+=1;
	glutPostRedisplay();				//標記當前視窗需要重繪,否則不會旋轉
	Sleep(10);
}

int main(int argc,char* argv[])
{
	glutInit(&argc,argv);							//初始化GLUT並處理命令列引數
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);		//指定模式:雙快取;RGB模式
	glutInitWindowSize(250,250);					//指定視窗大小(畫素)
	glutInitWindowPosition(300,200);				//指定視窗左上角在螢幕上的位置
	glutCreateWindow(argv[0]);						//使用OpenGL場景建立一個視窗,引數為視窗名稱
	init();											//呼叫初始化函式
	glutDisplayFunc(display);						//顯示
	glutReshapeFunc(reshape);						//重繪
	glutIdleFunc(spinAndSizeDisplay);				//旋轉&縮放
	//glutIdleFunc(moveDisplay);						//移動(與上邊函式只能有一個有效)
	glutMainLoop();									//進入主迴圈並處理事件,此時建立的所有視窗都會顯示出來,被渲染到這些視窗中的內容也將顯示出來,程式開始處理事件,註冊的顯示回撥函式被觸發
	return 0;										//ANSI C要求函式main()返回一個int值
}

效果圖:


相關推薦

OpenGL入門示例8——圖形平移旋轉

#include<GL/glut.h> #include <windows.h> static GLfloat spin=0.0; //旋轉量 static GLfloat move=0.0; //平移量 static GLfloat

SVG 的平移旋轉

SVG中的平移、旋轉和縮放在不同的引數條件下,體現出不同的效果: 1、如果直接用x、y指定了圖形的座標(在我的理解該座標實際是圖形相對座標,如果沒有通過transform屬性設定座標平移,該座標是相對畫布起始位置座標,如果設定了座標平移則為相對平移後坐標位置的偏移),所有的

Sketchup用ruby進行二次開發--利用Transformation實現Move工具(平移旋轉

 在Sketchup中,move工具使用的非常廣泛,,可以移動、拉伸和複製幾何體,也可以用來旋轉元件。舉一個簡單地例子。 我們要做一個建築物的尖頂,如下圖所示,就是使用move工具實現的。                   接下來我們就要學習如何使用ruby實現這樣的功能

canvas和白鷺引擎中平移旋轉

都是 canvas 引擎 偏移 坐標 這一 text sla 偏移量 canvas中的 translate() 和白鷺引擎中的 .x 或者 .y 所導致的平移效果並不是移動 目標元素,而是移動目標元素父親所在的坐標系。 例如 bgg.translate(100,100)

矩陣運算——平移旋轉

平時開發程式,免不了要對影象做各種變換處理。有的時候變換可能比較複雜,比如平移之後又旋轉,旋轉之後又平移,又縮放。 直接用公式計算,不但複雜,而且效率低下。這時可以藉助變換矩陣和矩陣乘法,將多個變換合成一個。 最後只要用一個矩陣對每個點做一次處理就可以得到想要的結果。

[CAAnimation核心動畫練習一]普通的平移旋轉

#import "ViewController.h" @interface ViewController () { @private CALayer* _calyer; } @end @implementation ViewController - (vo

Android matrix偏移(平移),旋轉,傾斜的原理

第一部分 Matrix的數學原理 在Android中,如果你用Matrix進行過影象處理,那麼一定知道Matrix這個類。Android中的Matrix是一個3 x 3的矩陣,其內容如下: Matrix的對影象的處理可分為四類基本變換: Translate   

計算機圖形OpenGL學習五(二維幾何變換1.平移旋轉)

二維幾何變換(平移、旋轉、縮放)本章涉及數學變換比較多,程式碼是次要的,數學理論可自己推導一下。【二維平移】通過將二維量加到一個點的座標上來生成一個新的座標位置,可以實現一次平移。將平移距離加到原始座標上獲得一個新的座標,實現一個二維位置的平移。為平移向量,使用列向量來表示各

二維圖形學的變換-平移旋轉 OpenGL

這裡實現的是多點畫多邊形,然後把這個多邊形進行二維的變換。 首先,多點畫多邊形,為了方便起見,我直接呼叫了Opengl的庫函式。其次,就是如何進行多邊形的二維變換。在這裡我有兩種方法。第一種是直接根據數學三角等公式推斷得到結果。第二種方法是用矩陣相乘的方法。 先講第一種:

opengl繪製桌子(平移旋轉

主要儀器裝置 VisualStudio C++2015 Windows10環境 Glut壓縮包 Ex2工程 操作方法和實驗步驟 1.繪製立方體 桌子由立方體組成,我們可以通過繪製六個面來構造一個立方體。六個面的繪製需要八個頂點的引數,而每個頂點均有x,y,z三個引數,如

Android OpenGLES2.0(十)——OpenGL中的平移旋轉

在前面的部落格中,所有的例子都是一個物件,類似繪製圓錐繪製圓柱,我們都是傳入一個引數,然後去控制那個圓面的位置,如果我們要繪製幾個個正方形,它的位置、大小、方向都是不相同的,按照那種方式該多麻煩啊。所以我們需要更好的辦法——矩陣變換。 什麼是矩陣 其實在

Matlab 圖像平移旋轉鏡像

more msh ret 結果 src end 初始 求解 http 今天學習了用Matlab實現對圖像的基本操作。在Matlab中,圖像是按照二維矩陣的形式表示的。所以對圖像的操作就是對矩陣的操作。 對圖像進行縮放、平移、旋轉,都可以轉化為矩陣的運算。 關於變換矩陣的構

基本動畫復合動畫設置 平移旋轉透明度 編碼實現 xml實現

sca ons new rpo 頂點 進行 clas imageview abs public class VAActivity extends Activity { private ImageView iv_animation; private Tex

屬性動畫---平移旋轉漸變組合

佈局—5個按鈕,一個ImageView 平移 private void transAnimator() { ObjectAnimator objectAnimator = new ObjectAnimator().ofFloat(image,

OpenGL ES2.0實現手指滑動平移雙指Android

主要是實現了手指在螢幕上滑動實現平移,兩個手指進行縮放。主要是這部分矩陣還挺麻煩的。 效果圖如下所示: 核心部分程式碼如下 觸控事件處理: @SuppressLint("ClickableViewAccessibility") @Override

4_圖片的裁剪旋轉平移模糊(20181218)

圖片的裁剪、旋轉、放縮、平移、模糊(20181218) 1、圖片的裁剪 2、Tensorflow 中圖片的裁剪 2、圖片的旋轉 3、圖片的放縮 4、圖片的平移 5、圖片的模糊

線性代數——矩陣解釋平移旋轉

參考部落格: 線性代數:理解齊次座標 https://blog.csdn.net/yinhun2012/article/details/79566148 線性代數:矩陣變換圖形(二維平移縮放旋轉) https://blog.csdn.net/yinhun2012/article/de

vtkPolyData 的空間變換(平移旋轉

vtkPolydata的空間變化主要基於vtkTransform與vtkTransformPolyDataFilter兩個類實現,示例程式碼如下: vtkSmartPointer<vtkTr

檢視的平移旋轉等操作(transform)

override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from

matlab 影象幾何變換 平移旋轉

1、縮放 該函式用於對影象做縮放處理。在matlab的命令視窗中輸入doc imresize或者help imresize即可獲得該函式的幫助資訊 呼叫格式 B = imresize(A, m) 返回的影象B的長寬是影象A的長寬的m倍,即縮放影象。 m大於1,則放大影象;