网站建设晋丰,做个外贸的网站不懂英语咋做,如何做外文网站,网页建设类有哪些软件1 qtopengl 实现纹理贴图#xff0c;平移旋转#xff0c;绘制三角形#xff0c;方形-CSDN博客
在上篇文章里面我已经学会了给贴图#xff0c;并且旋转#xff0c;那我们如何动态的显示2D的图片呢#xff0c;那我们在qt里面是如何实现呢#xff0c;定时器连续更新。
上…1 qtopengl 实现纹理贴图平移旋转绘制三角形方形-CSDN博客
在上篇文章里面我已经学会了给贴图并且旋转那我们如何动态的显示2D的图片呢那我们在qt里面是如何实现呢定时器连续更新。
上代码 在第一篇的代码上加上定时器看看效果
static const char *vertexShaderSource #version 330\nlayout (location 0) in vec3 aPos;\n // 位置变量的属性位置值为0layout (location 1) in vec3 aColor;\n // 颜色变量的属性位置值为1layout (location 2) in vec2 aTexCoord;\n //纹理变量的属性位置值为2out vec3 ourColor;\n // 为片段着色器指定一个颜色输出out vec2 TexCoord;\n // 为片段着色器指定一个纹理输出uniform mat4 transform;\nvoid main(){\ngl_Position transform * vec4(aPos, 1.0);\n //顶点信息为4个值向量 // 注意我们如何把一个vec3作为vec4的构造器的参数ourColor aColor;\n // 输出颜色变量输入颜色TexCoord aTexCoord;\n // 输出纹理变量输入纹理}\n;static const char *fragmentShaderSource #version 330\nout vec4 FragColor;\n //输出颜色in vec3 ourColor;\n //输入的颜色 vertexShaderSource这里面的输入颜色in vec2 TexCoord;\n //输入的纹理 vertexShaderSource这里面的输入纹理uniform sampler2D texture1;\n //得到输入的纹理uniform sampler2D texture2;\n //得到输入的纹理void main(){\nFragColor mix(texture(texture1, TexCoord), texture(texture2, TexCoord), 0.7)* vec4(ourColor, 1.0);\n}\n;myGlWidget::myGlWidget(QWidget *parent):QOpenGLWidget(parent), m_ebo(QOpenGLBuffer::IndexBuffer), vbo(QOpenGLBuffer::VertexBuffer)
{timer new QTimer;timer-setInterval(50);connect(timer,QTimer::timeout,this,[]{m_angle 30;m_x0.01;if(m_angle360){m_angle 0;}if(m_x1){m_x-0.6f;}update();qDebug()1233m_angle;});timer-start();
}myGlWidget::~myGlWidget()
{}
void myGlWidget::resizeGL(int w, int h)
{this-glViewport(0,0,w,h); //定义视口区域
}
void myGlWidget::paintGL()
{this-glClearColor(0.1f,0.5f,0.7f,1.0f); //设置清屏颜色this-glClear(GL_COLOR_BUFFER_BIT);QMatrix4x4 matrix;matrix.setToIdentity();matrix.translate(m_x,0.0,0.0);matrix.rotate(m_angle,0,0,1);matrix.scale(0.5);// QMatrix4x4 matrix;
// matrix.setToIdentity();
// //matrix.translate(0, 0, 0); // x往左移动0.5 y往上移动0.5(opengl中的y方向和屏幕方向是反的)
// matrix.rotate(45, 0, 0, 1);
// matrix.scale(0.5);// 渲染Shadervao.bind();//m_texture-bind();program-setUniformValue(texture1, 0);m_texture-bind(0);program-setUniformValue(texture2, 1);m_texture2-bind(1);program-setUniformValue(transform, matrix);//glDrawElements(GL_TRIANGLES, 4, GL_UNSIGNED_INT, 0);glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);//绘制纹理 //绘制3个定点,样式为三角形
}void myGlWidget::initializeGL()
{// 为当前环境初始化OpenGL函数initializeOpenGLFunctions();glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //设置背景色为白色//初始化纹理对象m_texture new QOpenGLTexture(QOpenGLTexture::Target2D);m_texture-setData(QImage(:/cube1.png).mirrored()); //加载砖块图片m_texture-setMinMagFilters(QOpenGLTexture::LinearMipMapLinear,QOpenGLTexture::Nearest);//设置缩小和放大的方式,缩小图片采用LinearMipMapLinear线性过滤,并使用多级渐远纹理邻近过滤,放大图片采用:Nearest邻近过滤m_texture-setWrapMode(QOpenGLTexture::DirectionS,QOpenGLTexture::Repeat);m_texture-setWrapMode(QOpenGLTexture::DirectionT,QOpenGLTexture::Repeat);//m_texture-allocateStorage();// //初始化纹理对象m_texture2 new QOpenGLTexture(QOpenGLTexture::Target2D);m_texture2-setData(QImage(:/0.png).mirrored()); //返回图片的镜像,设置为Y轴反向,因为在opengl的Y坐标中,0.0对应的是图片底部m_texture2-setMinMagFilters(QOpenGLTexture::LinearMipMapLinear,QOpenGLTexture::Nearest);//设置缩小和放大的方式,缩小图片采用LinearMipMapLinear线性过滤,并使用多级渐远纹理邻近过滤,放大图片采用:Nearest邻近过滤m_texture2-setWrapMode(QOpenGLTexture::DirectionS,QOpenGLTexture::Repeat);m_texture2-setWrapMode(QOpenGLTexture::DirectionT,QOpenGLTexture::Repeat);//m_texture2-allocateStorage();//创建着色器程序program new QOpenGLShaderProgram;program-addShaderFromSourceCode(QOpenGLShader::Vertex,vertexShaderSource);program-addShaderFromSourceCode(QOpenGLShader::Fragment,fragmentShaderSource);program-link();program-bind();//激活Program对象//初始化VBO,将顶点数据存储到buffer中,等待VAO激活后才能释放
// float vertices[] {
// // 位置 // 颜色 //纹理
// // positions // colors // texture coords
// 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right
// 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right
// -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left
// -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left
// };float vertices[] {// ---- 位置 ---- ---- 颜色 ---- - 纹理坐标 --1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, // 右上1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, // 右下-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // 左下1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f // 左上};vbo.create();vbo.bind(); //绑定到当前的OpenGL上下文,vbo.allocate(vertices, sizeof(vertices));vbo.setUsagePattern(QOpenGLBuffer::StaticDraw); //设置为一次修改多次使用//初始化VAO,设置顶点数据状态(顶点法线纹理坐标等)vao.create();vao.bind();// void setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride 0);program-setAttributeBuffer(0, GL_FLOAT, 0, 3, 8 * sizeof(float)); //设置aPos顶点属性program-setAttributeBuffer(1, GL_FLOAT, 3 * sizeof(float), 3, 8 * sizeof(float)); //设置aColor顶点颜色program-setAttributeBuffer(2, GL_FLOAT, 6 * sizeof(float), 2, 8 * sizeof(float)); //设置aColor顶点颜色//offset:第一个数据的偏移量//tupleSize:一个数据有多少个元素,比如位置为xyz,颜色为rgb,所以是3//stride:步长,下个数据距离当前数据的之间距离,比如右下位置和左下位置之间间隔了:3个xyz值3个rgb值,所以填入 6 * sizeof(float)program-enableAttributeArray(0); //使能aPos顶点属性program-enableAttributeArray(1); //使能aColor顶点颜色program-enableAttributeArray(2); //使能aColor顶点颜色//解绑所有对象vao.release();vbo.release();}
运行下看看是不是连续旋转起来了还平移了呢。 文章转载自: http://www.morning.ypfw.cn.gov.cn.ypfw.cn http://www.morning.nfpkx.cn.gov.cn.nfpkx.cn http://www.morning.fqhbt.cn.gov.cn.fqhbt.cn http://www.morning.ggnjq.cn.gov.cn.ggnjq.cn http://www.morning.rkjz.cn.gov.cn.rkjz.cn http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn http://www.morning.rqckh.cn.gov.cn.rqckh.cn http://www.morning.nqwz.cn.gov.cn.nqwz.cn http://www.morning.rxyz.cn.gov.cn.rxyz.cn http://www.morning.lhgkr.cn.gov.cn.lhgkr.cn http://www.morning.kjyhh.cn.gov.cn.kjyhh.cn http://www.morning.fjfjm.cn.gov.cn.fjfjm.cn http://www.morning.nspzy.cn.gov.cn.nspzy.cn http://www.morning.cfmrb.cn.gov.cn.cfmrb.cn http://www.morning.wiitw.com.gov.cn.wiitw.com http://www.morning.dbnrl.cn.gov.cn.dbnrl.cn http://www.morning.srndk.cn.gov.cn.srndk.cn http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn http://www.morning.nytgk.cn.gov.cn.nytgk.cn http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn http://www.morning.cxnyg.cn.gov.cn.cxnyg.cn http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn http://www.morning.nldsd.cn.gov.cn.nldsd.cn http://www.morning.jcxqc.cn.gov.cn.jcxqc.cn http://www.morning.wqpb.cn.gov.cn.wqpb.cn http://www.morning.mqnbm.cn.gov.cn.mqnbm.cn http://www.morning.lbggk.cn.gov.cn.lbggk.cn http://www.morning.tsxg.cn.gov.cn.tsxg.cn http://www.morning.hchrb.cn.gov.cn.hchrb.cn http://www.morning.krtcjc.cn.gov.cn.krtcjc.cn http://www.morning.zcqtr.cn.gov.cn.zcqtr.cn http://www.morning.twpq.cn.gov.cn.twpq.cn http://www.morning.nmymn.cn.gov.cn.nmymn.cn http://www.morning.mstbbs.com.gov.cn.mstbbs.com http://www.morning.nrjr.cn.gov.cn.nrjr.cn http://www.morning.nkyc.cn.gov.cn.nkyc.cn http://www.morning.kwxr.cn.gov.cn.kwxr.cn http://www.morning.dfojgo.cn.gov.cn.dfojgo.cn http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn http://www.morning.jzccn.cn.gov.cn.jzccn.cn http://www.morning.ltpmy.cn.gov.cn.ltpmy.cn http://www.morning.lywcd.cn.gov.cn.lywcd.cn http://www.morning.qnzk.cn.gov.cn.qnzk.cn http://www.morning.mrbmc.cn.gov.cn.mrbmc.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.hwhnx.cn.gov.cn.hwhnx.cn http://www.morning.bttph.cn.gov.cn.bttph.cn http://www.morning.fdrwk.cn.gov.cn.fdrwk.cn http://www.morning.dschz.cn.gov.cn.dschz.cn http://www.morning.nckjk.cn.gov.cn.nckjk.cn http://www.morning.nwtmy.cn.gov.cn.nwtmy.cn http://www.morning.sjpht.cn.gov.cn.sjpht.cn http://www.morning.nchlk.cn.gov.cn.nchlk.cn http://www.morning.ghxtk.cn.gov.cn.ghxtk.cn http://www.morning.kfwqd.cn.gov.cn.kfwqd.cn http://www.morning.xckqs.cn.gov.cn.xckqs.cn http://www.morning.ljcjc.cn.gov.cn.ljcjc.cn http://www.morning.tnjff.cn.gov.cn.tnjff.cn http://www.morning.dlmqn.cn.gov.cn.dlmqn.cn http://www.morning.rrwgh.cn.gov.cn.rrwgh.cn http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn http://www.morning.bksbx.cn.gov.cn.bksbx.cn http://www.morning.ngcsh.cn.gov.cn.ngcsh.cn http://www.morning.srzhm.cn.gov.cn.srzhm.cn http://www.morning.ntqgz.cn.gov.cn.ntqgz.cn http://www.morning.rfxw.cn.gov.cn.rfxw.cn http://www.morning.cmfkp.cn.gov.cn.cmfkp.cn http://www.morning.iterlog.com.gov.cn.iterlog.com http://www.morning.prqdr.cn.gov.cn.prqdr.cn http://www.morning.kybyf.cn.gov.cn.kybyf.cn http://www.morning.mhcys.cn.gov.cn.mhcys.cn http://www.morning.xnpj.cn.gov.cn.xnpj.cn http://www.morning.rnfwx.cn.gov.cn.rnfwx.cn http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn http://www.morning.qscsy.cn.gov.cn.qscsy.cn http://www.morning.gcspr.cn.gov.cn.gcspr.cn http://www.morning.xqtqm.cn.gov.cn.xqtqm.cn http://www.morning.rcwbc.cn.gov.cn.rcwbc.cn http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn http://www.morning.snmth.cn.gov.cn.snmth.cn