QT与菜鸟的opengl贴图
来源:互联网 发布:北大青鸟软件开发 编辑:程序博客网 时间:2024/05/22 02:09
假期本该是无论做什么都提不起劲来才对 ゆ_ゆ
可不知为什么越晚就越来精神。
我们的阶段性目标是为了在QT的 GLWidget上显示点云,可就目前掌握的知识来看还缺乏相机的知识,只能继续按照教程进行研究与创造。opengl贴图!首先放效果:
也许正因为生命有限,人类才会如此珍惜时光吧。
可就算再怎么珍惜时光,就算在有限的时间里做了再多的事,就算再怎么在这个世界上留下名号。
对于已经死去的自己来讲也是毫无意义的。
如果被赐予了无限的时间,最先崩坏的恐怕是信仰吧。
死后的世界什么的也就不攻自破,什么地狱天堂也将不复存在。
如果精神世界得不到满足,只能在无尽的虚空中徘徊与恐惧。
人们寻求与他人的联系,这无非是恐惧的产物而已,就像因害怕孤独而渴求团结一样。
人们希望自己的存在为他人所知,不停地讨好与谄媚,多么可悲。
我没有无限的生命,也不求他人怜悯,大伙最终都要归于尘土。
如果非要留下什么的话,如果可以让后人记住我的程序倒也不错。
可不知为什么越晚就越来精神。
我们的阶段性目标是为了在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();}
以上就完成了opengl的贴图。需要注意的是在贴图之前要载入自己的纹理才行
最后:
昨晚刚刚搭建完基于模型-视图的opencv方法组合器。今早就立刻翻身继续opengl的研究。最后:
也许正因为生命有限,人类才会如此珍惜时光吧。
可就算再怎么珍惜时光,就算在有限的时间里做了再多的事,就算再怎么在这个世界上留下名号。
对于已经死去的自己来讲也是毫无意义的。
如果被赐予了无限的时间,最先崩坏的恐怕是信仰吧。
死后的世界什么的也就不攻自破,什么地狱天堂也将不复存在。
如果精神世界得不到满足,只能在无尽的虚空中徘徊与恐惧。
人们寻求与他人的联系,这无非是恐惧的产物而已,就像因害怕孤独而渴求团结一样。
人们希望自己的存在为他人所知,不停地讨好与谄媚,多么可悲。
我没有无限的生命,也不求他人怜悯,大伙最终都要归于尘土。
如果非要留下什么的话,如果可以让后人记住我的程序倒也不错。
阅读全文
0 0
- QT与菜鸟的opengl贴图
- Qt中使用OpenGL的纹理贴图
- Qt OpenGL----纹理贴图
- OpenGL贴图坐标与纹理贴图坐标的转换
- Qt下OpenGL贴图问题
- Qt+OpenGL之纹理贴图
- 关于OpenGL的贴图
- Qt-OpenGL中的多纹理贴图
- OpenGL+Qt界面(四) 纹理贴图
- OpenGL ES平铺与重叠贴图的思考
- 改造的opengl纹理贴图
- OpenGL镂空贴图的方法
- opengl纹理贴图的模式
- OpenGL中的平面圆绘制与贴图
- OpenGL: 平面圆绘制与贴图
- opengl 贴图
- OpenGL: OpenGL中的平面圆绘制与贴图
- 凹凸贴图与法线贴图的区别
- 关于swift迁移
- MTK NVRam添加Lid,以及读、写、备份
- Opencv+Kdtree在C++和Python下的使用
- Vue 折腾记
- angularJS 中html 标签绑定样式,ng-class的使用
- QT与菜鸟的opengl贴图
- (HDU
- Vue组件通信
- android面试题(2)——Fragment篇
- 获取UWP配置文件中的版本信息
- 寻找中位数
- 【OI】gprof 性能测试工具 小结
- How to Extend Django User Model 如何扩展Django用户模型
- java中poi导出excel