qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl,那么我们就可以直接用了,这里面有三个函数需要继承

virtual void initializeGL() override;
virtual void resizeGL(int w,int h) override;
virtual void paintGL() override;

这三个函数是实现opengl的重要函数。

2 我们需要写GLSL语句

static const char *vertexShaderSource =
    "#version 330\n"
    "layout (location = 0) in vec3 aPos;\n"     // 位置变量的属性位置值为0
    "layout (location = 1) in vec3 aColor;\n"     // 颜色变量的属性位置值为1
    "layout (location = 2) in vec2 aTexCoord;\n"  //纹理变量的属性位置值为2
    "out vec3 ourColor;\n"                     // 为片段着色器指定一个颜色输出
    "out vec2 TexCoord;\n"                     // 为片段着色器指定一个纹理输出  
    "void main(){\n"
      "gl_Position =  vec4(aPos, 1.0);\n"    //顶点信息为4个值向量   // 注意我们如何把一个vec3作为vec4的构造器的参数
       "ourColor = aColor;\n"        // 输出颜色变量==输入颜色
        "TexCoord = aTexCoord;\n"    // 输出纹理变量==输入纹理
    "}\n";

static const char *fragmentShaderSource =
      "#version 330\n"
      "out vec4 FragColor;\n"     //输出颜色
       "in vec3 ourColor;\n"      //输入的颜色== vertexShaderSource(这里面的输入颜色)
       "in vec2 TexCoord;\n"      //输入的纹理== vertexShaderSource(这里面的输入纹理)
       "uniform sampler2D texture1;\n"  //得到输入的纹理     
      "void main()"
      "{\n"
         "FragColor = texture(texture1, TexCoord);\n" 
      "}\n";

上面的语句不懂的可以查询,或者私信问我。

3 我们设置点顶点,颜色和纹理

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     
    };                                                                        

这里面位置颜色是什么意思呢,举例 

                                              图1 

第一行位置: 0.5f,  0.5f, 0.0f  这是以窗口中心为0,0点,所绘制的图形在紫色位置,-x ==-1,  x ==1, -y ==-1, y==1。点在一半的位置

第一行颜色:1.0f, 0.0f, 0.0f ,意思是RGB,只显示红色。

第一行纹理:1.0f, 1.0f 是什么意思呢,看下面图说明

                                                                         图2 

图3

第一个图是位置,第二个是纹理,纹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值