可不知爲什麼越晚就越來精神。
我們的階段性目標是爲了在QT的 GLWidget上顯示點雲,可就目前掌握的知識來看還缺乏相機的知識,只能繼續按照教程進行研究與創造。opengl貼圖!首先放效果:
就像大家所知的那樣,QT封裝了opengl3.0方法,但是其接口變得快跟D3D一樣複雜了。
這個界面的風格用的是網上的,一搜就有,是一個老外弄的吧。但是人們很少在網上分享他們的qss風格,不知道爲何。
QT5的opengl3雖然引入了頂點緩存和索引緩存,但是其寫法和傳統的opengl差別還是很大。對於像我這樣的菜鳥來講,能在傳統opengl下摸爬滾打就已經很吃力了,更沒有閒暇的功夫去沾手更高級的東西。
這幾次的博客其實寫得並不好,都是代碼,也沒有太多功夫放註釋上來。
以後等有時間了會精雕細琢。
簡單說一下,QglWidget可以進行opengl的固定管線繪製。其顯示主要由三個方法完成:然後我翻了一下QTopengl的官方例子,搞的賊花哨,不適合新手學習。
我們還是乖乖跟着這三個重載函數走。
廢話說太多了,我們直接上代碼,Cpp文件中這樣寫:
void qScarletOpenglInterface::Start()
{
setWindowTitle(tr("opengl demo"));
fullscreen=false;//不全屏
if (fullscreen)
showFullScreen();
rTri = 0.0;
rQuad = 0.0;
xRot =yRot=zRot =0.0;
setGeometry(0,0,640,480);
}
void qScarletOpenglInterface::initializeGL()
{
//爲當前環境初始化Opengl函數
initializeOpenGLFunctions();
Start();
glShadeModel(GL_SMOOTH);
glClearColor( 0.618, 0.0, 0.1, 0.2 );//紅綠藍
glClearDepth(1.0);//設置深度緩存
glEnable(GL_DEPTH_TEST);//啓用深度測試。
glDepthFunc(GL_LEQUAL);//所作深度測試的類型。
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);//真正精細的透視修正。這一行告訴OpenGL我們希望進行最好的透視修正。這會十分輕微的影響性能。
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, 3, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //設置照相機位置
//glTranslatef(ptsCen.x,ptsCen.y,ptsCen.z);
glRotatef(thetaX, 1, 0, 0);
glRotatef(thetaY, 0, 1, 0);
glScalef(scaleFactor, scaleFactor, scaleFactor);
glTranslatef(-px, -py, -pz);
//Initial_DrawPoint();
}
void qScarletOpenglInterface::loadGLTextures()
{
QImage tex, buf;
if (!buf.load(":/logo/logo/Scarletogo3.png"))
{
qWarning( "Could not read image file, using single-color instead." );
QImage dummy( 128, 128, QImage::Format_RGB32 );//Format_RGB32 Format_RGB888
dummy.fill( Qt::green);
buf = dummy;//如果載入不成功,自動生成一個128*128的32位色的綠色圖片。
}
tex = QGLWidget::convertToGLFormat( buf );
glGenTextures( 1, &m_texture[0] );
glBindTexture( GL_TEXTURE_2D, m_texture[0] );
glTexImage2D( GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
}
void qScarletOpenglInterface:: paintGL_Texture()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glTranslatef( 0.0, 0.0, -5.0 );
glRotatef( xRot, 1.0, 0.0, 0.0 );
glRotatef( yRot, 0.0, 1.0, 0.0 );
glRotatef( zRot, 0.0, 0.0, 1.0 );
glBindTexture( GL_TEXTURE_2D, m_texture[0] );//選擇我們使用的紋理。您不能在glBegin()和glEnd()之間綁定紋理
glBegin( GL_QUADS );
glTexCoord2f( 0.0, 0.0 ); glVertex3f( -1.0, -1.0, 1.0 );
glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, -1.0, 1.0 );
glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 );
glTexCoord2f( 0.0, 1.0 ); glVertex3f( -1.0, 1.0, 1.0 );
glTexCoord2f( 1.0, 0.0 ); glVertex3f( -1.0, -1.0, -1.0 );
glTexCoord2f( 1.0, 1.0 ); glVertex3f( -1.0, 1.0, -1.0 );
glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, 1.0, -1.0 );
glTexCoord2f( 0.0, 0.0 ); glVertex3f( 1.0, -1.0, -1.0 );
glTexCoord2f( 0.0, 1.0 ); glVertex3f( -1.0, 1.0, -1.0 );
glTexCoord2f( 0.0, 0.0 ); glVertex3f( -1.0, 1.0, 1.0 );
glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, 1.0, 1.0 );
glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, -1.0 );
glTexCoord2f( 1.0, 1.0 ); glVertex3f( -1.0, -1.0, -1.0 );
glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, -1.0, -1.0 );
glTexCoord2f( 0.0, 0.0 ); glVertex3f( 1.0, -1.0, 1.0 );
glTexCoord2f( 1.0, 0.0 ); glVertex3f( -1.0, -1.0, 1.0 );
glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, -1.0, -1.0 );
glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, -1.0 );
glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 );
glTexCoord2f( 0.0, 0.0 ); glVertex3f( 1.0, -1.0, 1.0 );
glTexCoord2f( 0.0, 0.0 ); glVertex3f( -1.0, -1.0, -1.0 );
glTexCoord2f( 1.0, 0.0 ); glVertex3f( -1.0, -1.0, 1.0 );
glTexCoord2f( 1.0, 1.0 ); glVertex3f( -1.0, 1.0, 1.0 );
glTexCoord2f( 0.0, 1.0 ); glVertex3f( -1.0, 1.0, -1.0 );
glEnd();
xRot += 0.3;
yRot += 0.2;
zRot += 0.4;
}
void qScarletOpenglInterface::paintGL()//不會自動調用paintGL的
{
paintGL_Texture();//繪製紋理
update();
}
最後:
也許正因爲生命有限,人類纔會如此珍惜時光吧。
可就算再怎麼珍惜時光,就算在有限的時間裏做了再多的事,就算再怎麼在這個世界上留下名號。
對於已經死去的自己來講也是毫無意義的。
如果被賜予了無限的時間,最先崩壞的恐怕是信仰吧。
死後的世界什麼的也就不攻自破,什麼地獄天堂也將不復存在。
如果精神世界得不到滿足,只能在無盡的虛空中徘徊與恐懼。
人們尋求與他人的聯繫,這無非是恐懼的產物而已,就像因害怕孤獨而渴求團結一樣。
人們希望自己的存在爲他人所知,不停地討好與諂媚,多麼可悲。
我沒有無限的生命,也不求他人憐憫,大夥最終都要歸於塵土。
如果非要留下什麼的話,如果可以讓後人記住我的程序倒也不錯。