1. 程式人生 > >OpenGL中平移函式glTranslatef()、旋轉函式glRotatef()的理解

OpenGL中平移函式glTranslatef()、旋轉函式glRotatef()的理解

#include<GL\glut.h>
//太陽、地球和月亮
//假設每個月都是30天
//一年12個月,共是360天
static int day = 200; // day的變化:從0到359


void myDisplay(void)
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);


glLoadIdentity();
gluPerspective(75, 1, 1, 2000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(0, -200, 200, 0, 0, 0, 0, 0, 1);


//繪製紅色的“太陽”
glColor3f(1.0f, 0.0f, 0.0f);
glutSolidSphere(69.6, 100, 100);
glPushMatrix();//修改的地方,將太陽的變換矩陣壓入棧中
//繪製藍色的“地球”
glColor3f(0.0f, 0.0f, 1.0f);
glRotatef(day / 360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(150, 0.0f, 0.0f);
glutSolidSphere(15.945, 100, 100);
//繪製黃色的“月亮”
glPopMatrix();//修改的地方,將棧中的矩陣彈出來
glColor3f(1.0f, 1.0f, 0.0f);

glRotatef(day / 30.0*360.0 - day / 360.0*360.0, 0.0f, 0.0f, -1.0f);
glRotatef(day / 30.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(120, 0.0f, 0.0f);//修改的地方,沿X軸平移120個單位(方便觀察)
glutSolidSphere(10, 100, 100);//修改的地方,繪製的月亮稍微大一點(方便觀察)
glFlush();
glutSwapBuffers();
}
void myIdle(void)
{
Sleep(50);
++day;
if (day >= 360)
day = 0;
myDisplay();
}
int main(int argc, char *argv[])

{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(200, 100);
glutInitWindowSize(600, 600);
glutCreateWindow("I love OpenGL");
glutDisplayFunc(&myDisplay);
glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
}

相關推薦

OpenGL平移函式glTranslatef()旋轉函式glRotatef()的理解

#include<GL\glut.h>//太陽、地球和月亮//假設每個月都是30天//一年12個月,共是360天static int day = 200; // day的變化:從0到359void myDisplay(void){glEnable(GL_DEPTH_TEST);glClear(G

LIBSVM的SVM型別函式及相關引數簡介

可選引數: -s svm_type : set type of SVM (default 0)//-s用於設定SVM的型別0 -- C-SVC (multi-class classification)//硬間隔及軟間隔或核函式,最基本的SVM,C表示懲罰因子,C越大表示對錯誤分類的懲罰越大1 -- nu-SV

Javascript 函式宣告函式表示式匿名函式的寫法

javascript和其他程式語言相比比較隨意,所以javascript程式碼中充滿各種奇葩的寫法,有時霧裡看花,當然,能理解各型各色的寫法也是對javascript語言特性更進一步的深入理解。 ( function(){…} )()和( function (){…}

【學習OpenCV】仿射變換函式warpAffine旋轉

理論 翻開任意一本影象處理的書,都會講到影象的幾何變換,這裡麵包括:仿射變換(affine transformation)、投影變換(projecttive transformation)。前者針對的是平面上的物體位姿變化,如水平/垂直方向位移、旋轉、縮小/放大,常見的應

十一Go基礎程式設計:遞迴函式函式型別匿名函式與閉包

1. 遞迴函式 遞迴指函式可以直接或間接的呼叫自身。 遞迴函式通常有相同的結構:一個跳出條件和一個遞迴體。所謂跳出條件就是根據傳入的引數判斷是否需要停止遞迴,而遞迴體則是函式自身所做的一些處理。 //通過迴圈實現1+2+3……+100 func Test01() int { i

python之路-day14-內建函式匿名函式遞迴

一、匿名函式 函式: def 函式名(形參): 函式體(return) 函式名(實參)   形參: 1、位置引數 2、預設引數 3、動態傳參 *args:動態接收位置引數 **kwargs:動態接收關鍵字引數   位置 >  *args  

C++函式指標指標函式返回值為函式指標的函式淺談

C++函式指標、指標函式、返回值為函式指標的函式淺談 引言 函式指標、指標函式是C中重要而容易混淆的概念,博主將通過兩個例項來說明這兩個截然不同的概念。 而返回值為函式指標的指標函式就更難理解了,放在文章的最後來介紹。 函式指標 函式指標是一種特殊的 指標,它指向函式的入口。

筆記八:靜態變數靜態成員函式函式指標靜態函式指標

靜態變數 1、靜態變數的儲存方式和生命週期:屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區,該區域的資料在整個程式的執行期間不會釋放,所以其生命週期為整個程式執行時間段。 2、靜態區域性變數:定義在函式體內的變數。當對靜態區域性變數進行初始化時,只

個人C++速成筆記(1) -- C++與C不一樣的地方:行內函數預設引數函式過載函式模板函式的呼叫

之前學過C,現在想稍微學習下C++,由於上班,只能利用平時的空閒時間學習,記錄一下學習歷程,激勵自己有始有終,部落格內容主要記錄C與C++不同的地方。                    

函式宣告函式表示式匿名函式立即執行函式

自學js程式設計,對很多概念不是很明晰,從書本上看不到細微之處的奧妙,唯有在實戰中摔了跟頭才能認真掰扯,細細辨別。 今天看專案上的js原始碼時遇到了一堆“立即執行函式”,使我搞不清楚js的執行順序,在網上查詢相關資料時找到一篇比較好的文章,在這裡稍作編輯,作為

函式宣告函式表示式匿名函式立即執行函式的區別

函式宣告:使用function關鍵字宣告一個函式,再指定一個函式名,叫函式宣告。 function functionName(arg1, arg2, …){ } 函式表示式:使用function關鍵字宣告一個函式,但未給函式命名,最後將匿名函式賦予一個變數,叫函式表示式,這是最常見的函式表示

函式指標函式物件仿函式比較與入門

#include<iostream> using namespace std; typedef void (*func)(int ); void print(int value) { printf("%d ", value); } void

C++繼承詳解之二——派生類成員函式詳解(函式隱藏建構函式與相容覆蓋規則)

  在這一篇文章開始之前,我先解決一個問題。   在上一篇C++繼承詳解之一——初探繼承中,我提到了在派生類中可以定義一個與基類成員函式同名的函式,這樣派生類中的函式就會覆蓋掉基類的成員函式。   在譚浩強的C++程式設計這本書第十一章,351頁最下面有這麼

C++ 函式模板(十四)--template 泛型函式模板通用函式過載模板

#include <iostream> #include <string> using namespace std; //函式模板,typename 等價於 class template <typename AnyType> void

PYTHON 學習筆記2 流程控制工具以及函式定義匿名函式

前言 在上一節的學習中。已經介紹了幾種基本型別。包括字串的定義,以及字串中索引、切片、字串拼接的使用方法。以及基本的整形資料運算。一些之前都沒有了解過的運算子、比如 ** 乘方 //整數除法等。這一節,我們將學習最基本的流程控制工具,比如 if 條件判斷 for 迴圈 while 迴圈 if-elif-e

python 資料型別--列表元組的理解(一)

                                                   資料型別--列表、元組 一、列表 list 數值 score=80 字串 name1="tom" name2="jerry" name3="kate" 當需要儲存多個元素的

資料結構 3 二叉查詢樹紅黑樹旋轉與變色 理解與使用

這裡再來複習一下二叉樹的概念: 1. 每個節點下子元素不可超過兩個,必須是0個或者一個或則兩個 2. 二叉樹是一種有序樹。 理解了這些,我們這節要學習的內容就是有關於二叉查詢樹以及有關紅黑樹。 ## 二叉查詢樹 從這個名字,可以簡單理解一下,他是為了解決什麼被髮明出來的。當然是查找了。因為名字自帶查

關於opengl的三維矩陣平移,矩陣旋轉,推導過程理解 OpenGL計算機圖形學的一些必要矩陣運算知識 glTranslatef(x,y,z)glRotatef(angle,x,y,z)函式詳解

    原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/12166896.html     為什麼引入齊次座標的變換矩陣可以表示平移呢? - Yu Mao的回答 - 知乎 https://www.zhihu.com/

OpenGL投影函式glOrtho()glFrustum()以及gluPerspective()以及函式的用法

OpenGL中,如果想對模型進行操作,就要對這個模型的狀態(當前的矩陣)乘上這個操作對應的一個矩陣. 如果乘以變換矩陣(平移, 縮放, 旋轉), 那相乘之後, 模型的位置被變換; 如果乘以投影矩陣(將3D物體投影到2D平面), 相乘後, 模型的投影方式被設定; 如果乘以紋

Android OpenGLES2.0(十)——OpenGL平移旋轉縮放

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