锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
錛?錛夌浉鍚岀殑鑼冨洿錛堝湪鍚屼竴涓被涓級錛?
錛?錛夊嚱鏁板悕瀛楃浉鍚岋紱
錛?錛夊弬鏁頒笉鍚岋紱
錛?錛塿irtual 鍏抽敭瀛楀彲鏈夊彲鏃犮?
錛?錛変笉鍚岀殑鑼冨洿錛堝垎鍒綅浜庢淳鐢熺被涓庡熀綾伙級錛?
錛?錛夊嚱鏁板悕瀛楃浉鍚岋紱
錛?錛夊弬鏁扮浉鍚岋紱
錛?錛夊熀綾誨嚱鏁板繀欏繪湁virtual 鍏抽敭瀛椼?/p>
錛?錛夊鏋滄淳鐢熺被鐨勫嚱鏁頒笌鍩虹被鐨勫嚱鏁板悓鍚嶏紝浣嗘槸鍙傛暟涓嶅悓銆傛鏃訛紝涓嶈鏈夋棤virtual鍏抽敭瀛楋紝鍩虹被鐨勫嚱鏁板皢琚殣钘忥紙娉ㄦ剰鍒笌閲嶈澆娣鋒穯錛夈?
錛?錛夊鏋滄淳鐢熺被鐨勫嚱鏁頒笌鍩虹被鐨勫嚱鏁板悓鍚嶏紝騫朵笖鍙傛暟涔熺浉鍚岋紝浣嗘槸鍩虹被鍑芥暟娌℃湁virtual 鍏抽敭瀛椼傛鏃訛紝鍩虹被鐨勫嚱鏁拌闅愯棌錛堟敞鎰忓埆涓庤鐩栨販娣嗭級
璁頒綇,C++涓殑鍥涚嬈¤璦..
1.C. c鍩虹..
2.Object-Oriented C++ ,c++鐨勪富瑕?class ,綾誨皝瑁?緇ф壙,澶氭佺瓑.
3.Template C++ ..c++閲屽ご鐨勬硾鍨嬬紪紼?.妯℃澘緙栫▼.
4.STL.聽 鏍囧噯妯℃澘搴?.濡倂ector,queue,map絳?
榪欎釜鏉℃鎵鍙欒堪鐨?.搴斿綋鍦ㄦ璇█鍙樻崲鏃跺?楂樻晥緙栫▼瀹堝垯涔熼渶瑕佸仛鍑虹浉搴旂殑鏀瑰彉絳栫暐..渚嬪瓙:
聽聽聽 瀵瑰唴緗璞$被鍨嬭岃█..浣跨敤 鍊間紶閫?瑕佹瘮 寮曠敤浼犻捖?鏉ョ殑楂樻晥
聽聽聽 瀵逛簬鑷畾涔夌被鑰岃█, 甯稿紩鐢ㄤ紶閫掑線寰鏇村ソ..(const class& )
聽聽聽 STL 涓岃█.鍏舵槸鍦–鎸囬拡涔嬩笂濉戦?鍥犳.鍊間紶閫?涔熷啀嬈¢傜敤..
璋ㄨ: 瀵逛簬C++楂樻晥緙栫▼鍘熷垯搴斿綋瑙嗘儏鍐佃屽畾..鍙栧喅浣跨敤C++涓殑閭d竴閮ㄥ垎
璇瘋浣?
1.瀵逛簬鍗曠函甯擱噺,鏈濂戒互const瀵硅薄鎴杄nums 鏇挎崲鎺?#define..
濡?聽 const double PI = 3.141592653
class Test{
static const double PI;聽聽聽 //澹版槑寮?br />聽};const double Test::PI = 3.141592653;聽 //瀹氫箟寮?鍦ㄥ疄鐜版枃浠?
2. 瀵逛簬褰技鍑芥暟鐨勫畯..鏈濂芥敼鐢?inline 鍑芥暟鐨勫艦寮?鏇挎崲.
>
聽聽聽聽聽聽聽聽 璋ㄨ:
1.灝嗘煇浜涗笢瑗垮0鏄庝負const 鍙府鍔╃紪璇戝櫒渚︽祴閿欒鐢ㄦ硶. const 鍙鏂藉姞浜庝換浣曚綔鐢ㄥ煙鐨勫璞?鍑芥暟鍙傛暟.鍑芥暟榪斿洖綾誨瀷.鎴愬憳鍑芥暟鏈綋.
濡? 鍦–++閲屽父鐢ㄧ殑 const 寮曠敤浼犲?灝卞甯?const 鎸囬拡涓鏍?涓嶄互鍓嶅嚱鏁頒慨鏀瑰叾鍊?榪欏氨寰堝ソ鐨勪繚鎶や簡.鍙傛暟鐨勫間笉鑳借淇敼.
濡? 瀹氫箟鎴恈onst 鎴愬憳鍑芥暟,鍦ㄨ鎴愬憳鍑芥暟閲?鏄笉鍏佽淇敼鎴愬憳鍙橀噺鐨?鍥犳榪欐牱涓涓帴鍙e線寰鍙互鍚姩淇濇姢鏁版嵁鐨勪綔鐢?
const 寮曠敤浼犲兼椂鍊?鍙兘璋冪敤.const 鎴愬憳鍑芥暟...
const 榪斿洖鍊?寰寰浼氫綔涓烘帴鍙f椂鍊?浣垮緱榪斿洖鍊間笉鍏佽琚閮ㄤ慨鏀?鍥犳涔熸槸闈炲父鏈夌敤.
STL 褰撲腑鐨刬terator..聽 const vector<int>::Iterator 琛ㄧず int * const聽聽 鎸囬拡甯擱噺.
vector<int>::const_Iterator 鍗?const int *聽 甯擱噺鎸囬拡..
2. 緙栬瘧鍣ㄥ己鍒跺疄鏂?bitwise constness. 浣嗕嬌鐢ㄦ椂鍊?搴旀敞鎰忔槸姒傚康涓婄殑甯擱噺.
mutable 灝嗛噴鏀炬帀榪欑綰︽潫..鍗?榪欎箞瀹氫箟.聽聽 mutable int size;
鍏跺畾涔夌殑鍙橀噺鍏佽鍦╟onst 鎴愬憳鍑芥暟涓簣浠ヤ慨鏀?.
3.褰揷onst 鍜?non-const 鎴愬憳鍑芥暟 鍏鋒湁絳変環瀹炵幇鏃跺?,浠on-const 鍑芥暟 璋冪敤const 鍑芥暟 鍙伩鍏嶉噸澶?
涓轟粈涔堜笉const 璋冪敤 non-const ..鍘熷洜鍦ㄤ簬.const 闇瑕佷繚璇佷笉鍏佽淇敼鎴愬憳鍙橀噺. 鑰岃皟鐢╪on-const 鎴愬憳鍑芥暟.鍒欏瓨鍦ㄥ彲鑳藉凡緇忎慨鏀逛簡鎴愬憳鍙橀噺.鍥犳榪欐槸涓縐嶄笉姝g‘..
渚嬪瓙鍙叆涓嬫墍紺?
[const_cast<T&>]( static_cast<const T&>(*this) .function());聽聽 const_cast 瑙嗘儏鍐佃屽畾..濡傞渶瑕佽繑鍥炲煎幓鎺塩onst灞炴у垯灝遍渶瑕佷簡. static_cast<> 鍒欒繘琛屼竴嬈″己鍒惰漿鎹㈡垚const 寮曠敤..

inline void applyModelViewMatrix(const osg::RefMatrix* matrix)
{
if (_modelView!=matrix)
{
if (matrix)
{
_modelView=matrix;
glLoadMatrix(matrix->ptr());
}
else
{
_modelView=_identity;
glLoadIdentity();
}
}
}
bool MatrixTransform::computeLocalToWorldMatrix(Matrix& matrix,NodeVisitor*) const

{
if (_referenceFrame==RELATIVE_RF)
{
matrix.preMult(_matrix);
}
else // absolute
{
matrix = _matrix;
}
return true;
}
bool PositionAttitudeTransform::computeLocalToWorldMatrix(Matrix& matrix,NodeVisitor*) const

{
if (_referenceFrame==RELATIVE_RF)
{
matrix.preMultTranslate(_position);
matrix.preMultRotate(_attitude);
matrix.preMultScale(_scale);
matrix.preMultTranslate(-_pivotPoint);
}
else // absolute
{
matrix.makeRotate(_attitude);
matrix.postMultTranslate(_position);
matrix.preMultScale(_scale);
matrix.preMultTranslate(-_pivotPoint);
}
return true;
}
osg::Node* createTrans()

{
/**//** declare a root node*/
osg::Group* root = new osg::Group;
/**//** declare a Position Node*/
osg::PositionAttitudeTransform* posCow = new osg::PositionAttitudeTransform;
root->addChild(posCow);
/**//** declare a Matrix Node*/
osg::MatrixTransform* matrixCow = new osg::MatrixTransform;
root->addChild(matrixCow);
osg::Node* cow = osgDB::readNodeFile("cow.osg");

/**//**
When use Position Node and the ReferenceFrame is RELATIVE_RF
the matrix is Compute Trans(-pivot) * scale * Rotate * Trans(Pos)
here the pivot and scale is default,so it means that make rotate firstly.
*/
posCow->addChild(cow);
osg::Quat quat;
quat.makeRotate(osg::PI_2,osg::Vec3(0.0,0.0,1.0));
posCow->setAttitude(quat);
posCow->setPosition(osg::Vec3(-10,0.0,0.0));

/**//**
when use Matrix Node you can set the matrix what you want.
here , it make trans firstly and then make rotate.
*/
matrixCow->addChild(cow);
quat.makeRotate(osg::DegreesToRadians(60.0),osg::Vec3(0.0,0.0,1.0));
matrixCow->setMatrix(osg::Matrixd::translate(osg::Vec3(10.0,0.0,0.0))*osg::Matrixd::rotate(quat));
return root;
}
osg::Node* create()

{
/**//**
geode is a leaf node,It must contain some drawables..
*/
osg::Geode* geode = new osg::Geode;

/**//** define a Geometry for draw a triangle.*/
osg::Geometry* triangle = new osg::Geometry;
geode->addDrawable(triangle);

/**//** triangle Vertexs */
osg::Vec3Array* Tvertex = new osg::Vec3Array;
triangle->setVertexArray(Tvertex);
Tvertex->push_back(osg::Vec3(-2.0,0.0,-1.0));
Tvertex->push_back(osg::Vec3( 0.0,0.0,-1.0));
Tvertex->push_back(osg::Vec3(-1.0,0.0, 1.0));

/**//** set the color */
osg::Vec3Array* Tcolor = new osg::Vec3Array;
triangle->setColorArray(Tcolor);
triangle->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
Tcolor->push_back(osg::Vec3(1.0,0.0,0.0));
Tcolor->push_back(osg::Vec3(0.0,1.0,0.0));
Tcolor->push_back(osg::Vec3(0.0,0.0,1.0));

/**//** set the normal*/
osg::Vec3Array* Tnormal = new osg::Vec3Array;
Tnormal->push_back(osg::Vec3(0.0,-1.0,0.0));
triangle->setNormalArray(Tnormal);
triangle->setNormalBinding(osg::Geometry::BIND_OVERALL);

/**//** set the Primitive use GL_TRIANGLES*/
osg::PrimitiveSet* Tprimitive = new osg::DrawArrays(GL_TRIANGLES,0,3);
triangle->addPrimitiveSet(Tprimitive);


/**//** now define a box(center,width)*/
osg::Box* boxtest = new osg::Box(osg::Vec3(1.5,0.0,0.0),1.0);
/**//** use the ShapeDrawable*/
osg::ShapeDrawable* box = new osg::ShapeDrawable(boxtest);
geode->addDrawable(box);
return geode;
}
#include "openglglut.h"

/**//*
** opengl 鏁欑▼絎洓璇懼唴瀹?br>
** 鍦ㄧ獥鍙g殑宸﹁竟閮ㄥ垎緇樺埗涓涓褰╃殑涓夎褰?瀹冨皢浣跨敤騫蟲粦鐫鑹?br>
** 鍦ㄧ獥鍙g殑鍙寵竟閮ㄥ垎緇樺埗涓涓摑鑹茬殑姝f柟褰?瀹冨皢浣跨敤鍗曡皟鐫鑹?br>
** 浣垮緱宸﹁竟鐨勪笁瑙掑艦緇昚杞翠笉鍋滄棆杞?br>
** 浣垮緱鍙寵竟鐨勬鏂瑰艦緇晉杞翠笉鍋滄棆杞?br>
*/
double yRot=0.0; //涓夎褰㈢粫y杞存棆杞殑瑙掑害
double xRot=0.0; //涓夎褰㈢粫x杞存棆杞殑瑙掑害
int main(int argc, char** argv)

{
/**//** 鍒濆鍖栫獥鍙?nbsp;騫跺垱寤虹獥鍙?/span>*/
createWindow("opengl lesson_4",&argc,argv);

/**//** 娉ㄥ唽glut鐨勪竴浜涘嚱鏁?nbsp;*/
glutReshapeFunc(glutResize); //紿楀彛璋冩暣鍑芥暟 浣垮緱璋冩暣鍚庡浘褰㈡樉紺轟笉鍙戠敓鏀瑰彉
glutIdleFunc(glutIdle); //絀洪棽鍥炶皟鍑芥暟 浣垮緱鍦ㄧ┖闂叉椂闂村唴榪涜涓浜涙搷浣?/span>
glutDisplayFunc(glutDisplay); //閲嶇粯鍑芥暟 浣垮緱鍙互鍦ㄧ獥鍙d腑緇樺埗鍥懼艦
glutSpecialFunc(glutSpecial); //鐗規畩鎸夐敭鍑芥暟 浣垮緱瀹炵幇鍏ㄥ睆/紿楀彛鍒囨崲
/**//** 鍒濆鍖杘pengl鐨勪竴浜涙搷浣?/span>*/
InitOpenGL();

/**//** 榪涘叆浠跨湡寰幆*/
glutMainLoop();
}
/**//** 瀹炵幇澶存枃浠跺綋涓畾涔夌殑緇樺埗鍑芥暟 緇樺埗涓夎褰㈠拰姝f柟褰?nbsp;**/
void glutDisplay(void)

{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); //灝嗗厛鍒濆鍖栧崟浣嶇煩闃?/span>
glPushMatrix(); //灝嗗綋鍓嶇煩闃靛鍒朵竴涓帇鍏ユ爤欏?騫朵繚鎸佸綋鍓嶇煩闃典笉鍙?/span>
glTranslatef(-1.5,0.0,-6.0);
glRotatef(yRot,0.0,1.0,0.0); //浣垮緱涓夎褰㈢粫y杞存棆杞瑈Rot瑙掑害
//鍐沖畾涓夎褰笁涓《鐐圭殑棰滆壊鍊?涓夎褰㈠唴閮ㄥ悇涓偣鐨勯鑹插皢浼氭槸綰挎ф彃鍊肩殑
glBegin(GL_TRIANGLES); // 緇樺埗涓夎褰?/span>
glColor3f(1.0f,0.0f,0.0f); //浣跨敤綰㈣壊緇樺埗涓婇《鐐?/span>
glVertex3f( 0.0f, 1.0f, 0.0f); //涓婇《鐐?/span>
glColor3f(0.0f,1.0f,0.0f); //浣跨敤緇胯壊緇樺埗宸︿笅欏剁偣
glVertex3f(-1.0f,-1.0f, 0.0f); //宸︿笅
glColor3f(0.0f,0.0f,1.0f); //浣跨敤钃濊壊緇樺埗鍙充笅欏剁偣
glVertex3f( 1.0f,-1.0f, 0.0f); //鍙充笅
glEnd();
glPopMatrix(); //鎭㈠褰撳墠鐭╅樀涓轟笂涓嬈ush鏃剁殑鐭╅樀
glTranslatef(1.5f,0.0f,-6.0f);
glRotatef(xRot,1.0,0.0,0.0); //浣垮緱姝f柟褰㈢粫x杞存棆杞瑇Rot瑙掑害
glColor3f(0.0f,0.0f,1.0f); //灝嗗綋鍓嶉鑹插艱緗負钃濊壊 緇樺埗鏁翠釜姝f柟褰?/span>
glBegin(GL_QUADS); // 緇樺埗姝f柟褰?/span>
glVertex3f(-1.0f, 1.0f, 0.0f); // 宸︿笂
glVertex3f( 1.0f, 1.0f, 0.0f); // 鍙充笂
glVertex3f( 1.0f,-1.0f, 0.0f); // 宸︿笅
glVertex3f(-1.0f,-1.0f, 0.0f); // 鍙充笅
glEnd();
glutSwapBuffers(); //寮哄埗緇樺浘鍛戒護鎵ц緇樺埗鍦ㄧ紦鍐插尯浜ゆ崲鍑烘潵
}
/**//** 瀹炵幇澶存枃浠跺綋涓0鏄庣殑絀洪棽鍥炶皟鍑芥暟*/
void glutIdle(void)

{
yRot+=0.2f; //澧炲姞涓夎褰㈡棆杞搴?/span>
xRot-=0.15f; //鍑忓皯姝f柟褰㈠噺灝戣搴?/span>
glutPostRedisplay(); //浣垮緱鎵ц瀹岃鍑芥暟鍚庤皟鐢ㄩ噸緇樺嚱鏁?/span>
}
#include "openglglut.h"

/**//*
** opengl 鏁欑▼絎笁璇懼唴瀹?br>
** 鍦ㄧ獥鍙g殑宸﹁竟閮ㄥ垎緇樺埗涓涓褰╃殑涓夎褰?瀹冨皢浣跨敤騫蟲粦鐫鑹?br>
** 鍦ㄧ獥鍙g殑鍙寵竟閮ㄥ垎緇樺埗涓涓摑鑹茬殑姝f柟褰?瀹冨皢浣跨敤鍗曡皟鐫鑹?br>
*/
int main(int argc, char** argv)

{
/**//** 鍒濆鍖栫獥鍙?nbsp;騫跺垱寤虹獥鍙?/span>*/
createWindow("opengl lesson_3",&argc,argv);

/**//** 娉ㄥ唽glut鐨勪竴浜涘嚱鏁?nbsp;*/
glutReshapeFunc(glutResize); //紿楀彛璋冩暣鍑芥暟 浣垮緱璋冩暣鍚庡浘褰㈡樉紺轟笉鍙戠敓鏀瑰彉
glutDisplayFunc(glutDisplay); //閲嶇粯鍑芥暟 浣垮緱鍙互鍦ㄧ獥鍙d腑緇樺埗鍥懼艦
glutSpecialFunc(glutSpecial); //鐗規畩鎸夐敭鍑芥暟 浣垮緱瀹炵幇鍏ㄥ睆/紿楀彛鍒囨崲

/**//** 鍒濆鍖杘pengl鐨勪竴浜涙搷浣?/span>*/
InitOpenGL();

/**//** 榪涘叆浠跨湡寰幆*/
glutMainLoop();
}
void glutDisplay(void)

{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); //灝嗗厛鍒濆鍖栧崟浣嶇煩闃?/span>
glPushMatrix(); //灝嗗綋鍓嶇煩闃靛鍒朵竴涓帇鍏ユ爤欏?騫朵繚鎸佸綋鍓嶇煩闃典笉鍙?/span>
glTranslatef(-1.5,0.0,-6.0);
//鍐沖畾涓夎褰笁涓《鐐圭殑棰滆壊鍊?涓夎褰㈠唴閮ㄥ悇涓偣鐨勯鑹插皢浼氭槸綰挎у樊鍊肩殑
glBegin(GL_TRIANGLES); // 緇樺埗涓夎褰?/span>
glColor3f(1.0f,0.0f,0.0f); //浣跨敤綰㈣壊緇樺埗涓婇《鐐?/span>
glVertex3f( 0.0f, 1.0f, 0.0f); //涓婇《鐐?/span>
glColor3f(0.0f,1.0f,0.0f); //浣跨敤緇胯壊緇樺埗宸︿笅欏剁偣
glVertex3f(-1.0f,-1.0f, 0.0f); // 宸︿笅
glColor3f(0.0f,0.0f,1.0f); //浣跨敤钃濊壊緇樺埗鍙充笅欏剁偣
glVertex3f( 1.0f,-1.0f, 0.0f); // 鍙充笅
glEnd();
glPopMatrix(); //鎭㈠褰撳墠鐭╅樀涓轟笂涓嬈ush鏃剁殑鐭╅樀
glTranslatef(1.5f,0.0f,-6.0f);
glColor3f(0.0f,0.0f,1.0f); //灝嗗綋鍓嶉鑹插艱緗負钃濊壊 緇樺埗鏁翠釜姝f柟褰?/span>
glBegin(GL_QUADS); // 緇樺埗姝f柟褰?/span>
glVertex3f(-1.0f, 1.0f, 0.0f); // 宸︿笂
glVertex3f( 1.0f, 1.0f, 0.0f); // 鍙充笂
glVertex3f( 1.0f,-1.0f, 0.0f); // 宸︿笅
glVertex3f(-1.0f,-1.0f, 0.0f); // 鍙充笅
glEnd();
glutSwapBuffers(); //寮哄埗緇樺浘鍛戒護鎵ц緇樺埗鍦ㄧ紦鍐插尯浜ゆ崲鍑烘潵
}
#include "openglglut.h"

/**//*
** opengl 鏁欑▼絎簩璇懼唴瀹?br>
** 鍦ㄧ獥鍙g殑宸﹁竟閮ㄥ垎緇樺埗涓涓櫧鑹茬殑涓夎褰?br>
** 鍦ㄧ獥鍙g殑鍙寵竟閮ㄥ垎緇樺埗涓涓櫧鑹茬殑姝f柟褰?br>
*/
int main(int argc, char** argv)

{
/**//** 鍒濆鍖栫獥鍙?nbsp;騫跺垱寤虹獥鍙?/span>*/
createWindow("opengl lesson_2",&argc,argv);

/**//** 娉ㄥ唽glut鐨勪竴浜涘嚱鏁?nbsp;*/
glutReshapeFunc(glutResize); //紿楀彛璋冩暣鍑芥暟 浣垮緱璋冩暣鍚庡浘褰㈡樉紺轟笉鍙戠敓鏀瑰彉
glutDisplayFunc(glutDisplay); //閲嶇粯鍑芥暟 浣垮緱鍙互鍦ㄧ獥鍙d腑緇樺埗鍥懼艦
glutSpecialFunc(glutSpecial); //鐗規畩鎸夐敭鍑芥暟 浣垮緱瀹炵幇鍏ㄥ睆/紿楀彛鍒囨崲

/**//** 鍒濆鍖杘pengl鐨勪竴浜涙搷浣?/span>*/
InitOpenGL();

/**//** 榪涘叆浠跨湡寰幆*/
glutMainLoop();
}

/**//** 瀹炵幇澶存枃浠跺綋涓畾涔夌殑緇樺埗鍑芥暟 緇樺埗涓夎褰㈠拰姝f柟褰?nbsp;**/
void glutDisplay(void)

{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); //灝嗗厛鍒濆鍖栧崟浣嶇煩闃?/span>
glPushMatrix(); //灝嗗綋鍓嶇煩闃靛鍒朵竴涓帇鍏ユ爤欏?騫朵繚鎸佸綋鍓嶇煩闃典笉鍙?/span>
glTranslatef(-1.5,0.0,-6.0); //宸︾Щ鍔?.5騫跺悜灞忓箷鍐呴儴縐誨姩6.0 鍦ㄩ偅鍖哄煙鐢諱笁瑙掑艦
glBegin(GL_TRIANGLES); // 緇樺埗涓夎褰?/span>
glVertex3f( 0.0f, 1.0f, 0.0f); // 涓婇《鐐?/span>
glVertex3f(-1.0f,-1.0f, 0.0f); // 宸︿笅
glVertex3f( 1.0f,-1.0f, 0.0f); // 鍙充笅
glEnd();
glPopMatrix(); //鎭㈠褰撳墠鐭╅樀涓轟笂涓嬈ush鏃剁殑鐭╅樀
glTranslatef(1.5f,0.0f,-6.0f); //鍙崇Щ鍔?.5騫跺悜灞忓箷鍐呴儴縐誨姩6.0 鍦ㄩ偅鍖哄煙鐢諱笁瑙掑艦
glBegin(GL_QUADS); // 緇樺埗姝f柟褰?/span>
glVertex3f(-1.0f, 1.0f, 0.0f); // 宸︿笂
glVertex3f( 1.0f, 1.0f, 0.0f); // 鍙充笂
glVertex3f( 1.0f,-1.0f, 0.0f); // 宸︿笅
glVertex3f(-1.0f,-1.0f, 0.0f); // 鍙充笅
glEnd();
glutSwapBuffers(); //寮哄埗緇樺浘鍛戒護鎵ц緇樺埗鍦ㄧ紦鍐插尯浜ゆ崲鍑烘潵
}
鍏跺疄浠婂ぉ鍦ㄦ葷粨榪欎釜鐨勬椂鍊欙紝騫朵笉鏄湪鐢╫pengl鑰屾槸鍦ㄤ嬌鐢╫sg璁捐涓涓」鐩漢鐗╂苯杞﹁濺絳夋極娓哥被銆婂彲鑳藉簲鐢ㄥ湪鎵嬫満錛屾苯杞﹀鑸笂銆嬬殑鏃跺欙紝鎯寵搗鎬葷粨榪欑殑銆傛垜鍏跺疄鏄兂鐢諱簺鍥炬潵鍐欒繖浠芥葷粨鍙兘浼氭洿瀹規槗鐞嗚В鐨?鐒惰屽疄鍦ㄦ噿...
鍦ㄥ浘褰㈠鐨勬樉紺烘祦紼嬶細
涓夌淮鍥懼艦->妯″瀷瑙嗗浘鍙樻崲->鎶曞獎鍙樻崲->涓夌淮瑁佸壀->瑙嗗彛->灞忓箷鍥懼艦鏄劇ず
涓夌淮->浜岀淮鐨勫彉鎹紝鎬葷殑鏉ョ悊瑙e彧鏄笁緇寸殑鐗╀綋鍦ㄤ竴緋誨垪鐨勫彉鎹箣鍚庡喅瀹氫簡灞忓箷涓婃煇浜涘儚绱犱綅緗殑棰滆壊鍊箋傛渶鍚庤繖浜涢鑹茬粍鎴愪簡涓騫呭浘鐢匯傚氨鏄垜浠墍鐪嬪埌寰楁渶緇堝睆騫曚簩緇村浘褰簡銆?/p>
鍦ㄥぇ姒備簡瑙h繖縐嶆祦紼嬩箣鍚庯紝妯″瀷瑙嗗浘鍙樻崲 鏃犵枒灝嗘垚涓哄喅瀹氭垜浠墍灝嗙湅鍒扮殑鍥懼儚鐨勮疆寤撱?/p>
妯″瀷瑙嗗浘鍙樻崲 搴旇鏉ヨ鏄寘鍚袱涓彉鎹㈢殑:妯″瀷鍙樻崲,瑙嗗浘鍙樻崲銆備負浠涔堝皢浠栦滑鍚堝湪涓璧峰憿錛?鍦ㄧ収鐩告満鎴愬儚緋葷粺涓?鑻ュ浐瀹氱浉鏈轟笉鍔ㄧЩ鍔ㄦā鍨嬩細 絳変環浜?/span> 鍥哄畾妯″瀷涓嶅姩縐誨姩鐩告満銆?/p>
鑰冪┒濡備笅鍐呭錛?/p>
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //褰撳墠鐭╅樀璁劇疆涓哄崟浣嶇煩闃?/p>
glRotatef(45.0f,0.0,0.0,1.0); //鎸塠0.0,0.0,1.0]涓鴻醬鏃嬭漿45搴?/p>
glTranslatef(2.0,2.0,2.0); // 騫崇Щ鑷?[2.0,2.0,2.0] glBegin(...); // 鐢繪煇浜涗笢瑗?br> ... 鏈変袱縐嶆柟寮忕悊瑙o細涓縐嶆槸灞閮ㄥ潗鏍囩郴鐨勭悊瑙o紝涓縐嶆槸鍏ㄥ眬鍧愭爣緋葷殑鐞嗚В銆?/p>
濡傛灉鎸夌収涓婇潰閭d簺鍐呭浠庝笂鍒頒笅鐨勭悊瑙g殑鏂瑰紡灝辨槸灞閮ㄥ潗鏍囩郴鐨勭悊瑙?/span>銆俹pengl鍙樻崲涓婄殑瀹炵幇鍏跺疄鏄釜鐭╅樀鐨勪箻娉曘傛寜鐓у眬閮ㄥ潗鏍囩郴鐨勭悊瑙?涓婇潰浠g爜鐨勫彉鎹㈡槸鎸夌収榪欐牱鐨勯『搴忔墽琛岀殑: 鍏堝皢灞閮ㄥ潗鏍囩郴緇晍杞存棆杞?5搴︼紝鍦ㄥ皢灞閮ㄥ潗鏍囩郴鐨勫師鐐瑰鉤縐昏嚦[2.0,2.0,2.0]錛岀劧鍚庡湪灞閮ㄥ潗鏍囩郴鍐呯敾鐗╀綋銆?/p>
鍋囪 鏃嬭漿姝ラ鐨勭煩闃典負R錛屽鉤縐婚儴鍒嗙殑鐭╅樀涓篢 褰撳墠鐭╅樀涓篊銆?/p>
new_C=old_C*R*T 榪欐槸涓涓煩闃靛彸涔樻搷浣?/p>
鐞嗚涓婃潵璁?榪欏氨鏄竴涓潗鏍囩郴鐨勫彉鎹㈣繃紼嬶紝R*T 榪欎釜鐭╅樀鍏跺疄灝辨槸灝嗗師鍏堢殑鍧愭爣緋誨彉鎹㈠埌鐜板湪鐨勫潗鏍囩郴錛岃繖涓椂鍊欏師鍏堝潗鏍囩郴鐨勭偣p灝嗗彉鎹㈡垚p1,p1=(R*T)*p銆?/p>
鑰屾寜鐓у叏灞鍧愭爣緋葷殑鐞嗚В錛屽畠鐨勫彉鎹㈣繃紼嬪垯鏄浉鍙嶇殑錛岃繖涔熸槸鐩稿綋鐨勫ソ鐞嗚В鐨?鍦ㄥ綋鍓嶄笘鐣屽潗鏍囩郴涓敾濂借鐗╀綋涔嬪悗錛屾垜蹇呴』灝嗗畠縐誨姩鍒版紜殑浣嶇疆銆傞偅蹇呴』寰楀厛騫崇Щ鐗╀綋鍒癧2.0,2.0,2.0],鐒跺悗灝嗙墿浣撶粫z杞存棆杞?5搴︺傝繖鏄竴涓浉鍙嶇殑鍙樻崲榪囩▼錛岀劧鑰岃繖涓笌鍓嶉潰鐨勬槸絳変環鐨?涓轟粈涔堬紵 鑰冭檻涓栫晫鍧愭爣緋諱笅鐐筽錛岀粡榪囧鉤縐繪搷浣滃悗 p11=T*p; 鍦ㄧ粡榪囨棆杞搷浣滃悗 p1=R*P11=R*(T*p) 榪欐槸鐭╅樀鐨勪竴涓乏涔樻搷浣?鍏堝彉鎹㈢殑鍦ㄥ悗闈? 鎵浠ヨnew_C=(old_c*(R*(T))) 宸︿箻 鎵浠ヨ榪欐槸涓涓瓑浠風殑榪囩▼. 涓鑸潵灝嗭紝鎴戜滑鑰冭檻鐨勬椂鍊欐繪槸涓栫晫鍧愭爣緋昏冭檻鏃嬭漿騫崇Щ絳夋搷浣滅殑.鎵浠ュ湪鍐欏彉鎹㈢殑鏃跺欐渶濂界殑鏂瑰紡灝辨槸灝?鍙樻崲姝ラ涓鐩村乏涔橈紝鑰屼唬鐮佷腑鍒欐寜宸︿箻鍚庣粨鏋滅煩闃電殑欏哄簭鍐欎唬鐮併?/p>
鍏舵鍦ㄧ悊瑙d互涓婄殑鍙樻崲榪囩▼涓ā鍨嬪彉鎹㈢殑鍘熺悊錛屾垜浠彲浠ュ緢濂界殑鐞嗚ВgluLookAt(eye,center,up)鐨勮鍥懼彉鎹㈢殑榪囩▼錛岀幇鍦ㄥ彧鑰冭檻妯″瀷涓嶅姩錛岀収鐩告満縐誨姩鐨勮繃紼嬶紝涓旀槸鍦ㄥ叏灞鍧愭爣緋諱笅鐨勭Щ鍔ㄨ繃紼? opengl榛樿鐓х浉鏈烘鏋?鏄鐐瑰湪鍘熺偣 y杞翠負鍚戜笂鏂瑰悜 z杞磋礋鏂瑰悜涓鴻綰挎柟鍚?/span> gluLookAt鐨勭洰鐨勫湪浜庝嬌寰楄鐐圭Щ鍔ㄥ埌eye浣嶇疆 騫剁湅鍚慶enter銆?/span> 鍒檊luLookAt鐨勮繃紼嬪厛騫崇Щ鑷砮ye,鑰宑enter->eye(center鎸囧悜eye)鍒欎負z鏂瑰悜璁句負z(Zx,Zy,Zz),Up鏂瑰悜涓簓杞存柟鍚戯紝y,z鐨勫弶縐垯涓簒杞存柟鍚?鍒欏彧闇灝嗗畠浠兘鏃嬭漿鍒頒綅灝辮浜?/span> 鎵浠ヨ繖涓椂鍊欐ā鍨嬪彉鎹㈢煩闃靛氨涓恒婄浉瀵逛簬妯″瀷鏉ヨ 鐩告満縐誨姩鍒癳ye絳変環浜庢ā鍨嬬Щ鍔ㄥ埌-eye. |Xx Xy Xz 0| |1 0 0 -eyex| |Yx Yy Yz 0| * |0 1 0 -eyey| |Zx Zy Zz 0| |0 0 1 -eyez| |0 0 0 1| |0 0 0 1 |
...
...
glEnd();
]]>