OpenGL關於二維變換的例子

2021-07-03 23:10:21 字數 2499 閱讀 8084

#include

#include

#include

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"maincrtstartup\"")

/*初始化視窗大小*/

glsizei winwidth = 600, winheight = 600; /*int*/

/*設定世界座標系*/

glfloat xwcmin = 0.0, xwcmax = 225.0;

glfloat ywcmin = 0.0, ywcmax = 225.0;

class wcpt2d

;typedef glfloat matrix3x3[3][3];

matrix3x3 matcomposite; /*float 3*3 matrix*/

const gldouble pi = 3.14159l;

void init(void)

/*構造3*3矩陣*/

void matrix3x3setidentity(matrix3x3 matident3x3)

/*m1矩陣左乘m2,結果放在m2中*/

void matrix3x3premultiply(matrix3x3 m1, matrix3x3 m2)

void translate2d(glfloat tx, glfloat ty)

void rotate2d(wcpt2d pivotpt, glfloat theta) /*旋轉矩陣*/

void scale2d(glfloat sx, glfloat sy, wcpt2d fixedpt)

/*使用復合矩陣,計算座標轉換*/

void transformverts2d(glint nverts, wcpt2d *verts)

, , };*/

glint k;

glfloat temp;

for (k = 0; k < nverts; k++)

}void ********(wcpt2d *verts)

void displayfcn(void)

, , };/*每個角的座標*/

/*計算三角形質心位置*/

wcpt2d centroidpt;

glint k, xsum = 0, ysum = 0;

/*把每個點對應的座標相加求和除以頂點個數求質心的座標*/

for (k = 0; k < nverts; k++)

centroidpt.x = glfloat(xsum) / glfloat(nverts);/*100*/

centroidpt.y = glfloat(ysum) / glfloat(nverts);/*50*/

/*設定幾何轉換引數*/

wcpt2d pivpt, fixedpt;

pivpt = centroidpt;/*100,50*/

fixedpt = centroidpt;/*100,50*/

glfloat tx = 0.0, ty = 100.0; /*x方向不動,向y正方向平移100個單位*/

glfloat sx = 0.5, sy = 0.5; /*縮放比例*/

gldouble theta = pi / 2.0; /*逆時針選裝90度*/

glclear(gl_color_buffer_bit);/*清空顯示視窗*/

glcolor3f(0.0, 0.0, 1.0);/*設定初始化填充顏色*/

********(verts);/*藍色三角*/

/*初始化復合矩陣*/

matrix3x3setidentity(matcomposite);/*matcomposite

1 00

0 10

0 01*/

/*構造復合矩陣*/

scale2d(sx, sy, fixedpt);/*第一次縮放轉換*/

rotate2d(pivpt, theta);/*第二次旋轉轉換*/

translate2d(tx, ty);/*最後一次平移轉換*/

/*應用復合矩陣三角定點*/

transformverts2d(nverts, verts);

glcolor3f(1.0, 0.0, 0.0);

********(verts);

glflush();

}void winreshapefcn(glint newwidth, glint newheight)

void main(int argc, char ** argv)

//仰天大笑出門去,我輩豈是蓬蒿人

結果

gluortho2d(-1.0, 1.5, -1.5, 1.5*(glfloat)h / (glfloat)w);

glutinitwindowsize(400, 400);//視窗大小跟座標軸大小不是同乙個單位,就像在紙上畫不同大小座標軸一樣

OpenGL學習 二維幾何變換

gltranslatef 實現平移變換 glrotatef 實現旋轉變換 縮放功能可由以上兩個函式實現 矩陣堆疊操作 glpushmatrix glpopmatrix 實現乙個線框模型的自行車運動動畫。採用鍵盤控制的方式,驅動自行車沿某一方向運動。include stdafx.h include i...

二維DCT變換

出處 dct,又叫離散預先變換,它的第二種型別,經常用於訊號和影象資料的壓縮。經過dct變換後的資料能量非常集中,一般只有左上角的數值是非零的,也就是能量都集中在離散余弦變換後的直流和低頻部分。1,一維dct變換 我們首先看著一維的dct變換,這是二維的基礎。一維的dct變換共有8種,其中最實用的是...

二維傅利葉變換需知

from 如下,這個 是實現灰度影象作二維傅利葉變換後的非線性變換哈 clear all i imread coins.png f fft2 im2double i f fftshift f f abs f t log f 1 subplot 1,2,1 imshow f,title 未經變換的頻譜...