美文网首页
OpenGL纹理综合练习

OpenGL纹理综合练习

作者: CrazySnow | 来源:发表于2020-07-22 14:44 被阅读0次

球体

球体运动效果图.gif

金字塔

纹理金字塔.gif

隧道

纹理隧道效果图.gif

针对以上三种立体图形添加纹理后的效果图,其绘制流程均是一下流程:


绘制流程(转载自Style_月月).png

主要针对纹理添加过程作出分析,完整代码见文章末尾

切换地板绘制方式,由原来的线条换成整个纹理图片替换,由于纹理贴图较小,这里使用了10倍的纹理坐标大小,以获得更细腻的地板效果。

//5.设置地板顶点数据&地板纹理
GLfloat texSize = 10.0f;
floorBatch.Begin(GL_TRIANGLE_FAN, 4, 1);

floorBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
floorBatch.Vertex3f(-20.f, -0.41f, 20.0f);

floorBatch.MultiTexCoord2f(0, texSize, 0.0f);
floorBatch.Vertex3f(20.0f, -0.41f, 20.f);

floorBatch.MultiTexCoord2f(0, texSize, texSize);
floorBatch.Vertex3f(20.0f, -0.41f, -20.0f);

floorBatch.MultiTexCoord2f(0, 0.0f, texSize);
floorBatch.Vertex3f(-20.0f, -0.41f, -20.0f);

floorBatch.End();

镜面效果的设置

镜面效果通过镜像绘制小球,并和地板进行混合达到镜面效果。

镜面之后,y轴的前后移动会反向;原来正面为逆时针,现在为顺时针。

//7.---添加反光效果---
    //翻转Y轴
    modelViewMatrix.Scale(1.0f, -1.0f, 1.0f);
    //镜面世界围绕Y轴平移一定间距,因为镜面了,所以是向下移动0.8
    modelViewMatrix.Translate(0.0f, 0.8f, 0.0f);
    
    // 镜面后,原来逆时针为正面,现在顺时针为正面
    //8.指定顺时针为正面
    glFrontFace(GL_CW);
  
    //9.绘制地面以外其他部分(镜面)
    drawSomething(yRot);
   
    //10.恢复为逆时针为正面
    glFrontFace(GL_CCW);
    
    //11.绘制镜面完毕,恢复矩阵
    modelViewMatrix.PopMatrix();
    
    //12.开启混合功能(绘制地板)
    glEnable(GL_BLEND);
    //13. 指定 glBlendFunc 颜色混合方程式
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    
    //14.绑定地面纹理
    glBindTexture(GL_TEXTURE_2D, uiTextures[0]);
    
    /*15.
     纹理调整着色器(将一个基本色乘以一个取自纹理的单元nTextureUnit的纹理)
     参数1:GLT_SHADER_TEXTURE_MODULATE
     参数2:模型视图投影矩阵
     参数3:颜色
     参数4:纹理单元(第0层的纹理单元)
     */
    shaderManager.UseStockShader(GLT_SHADER_TEXTURE_MODULATE,
                                 transformPipeline.GetModelViewProjectionMatrix(),
                                 vFloorColor,
                                 0);
    //开始绘制
    floorBatch.Draw();
    //绘制完毕,取消混合
    glDisable(GL_BLEND);

完整demo

相关文章

  • OpenGL纹理综合练习

    球体 金字塔 隧道 针对以上三种立体图形添加纹理后的效果图,其绘制流程均是一下流程: 主要针对纹理添加过程作出分析...

  • 八、OpenGL综合练习+纹理

    1. 最终效果 给 六、OpenGL综合练习 的demo配上纹理,再添加一个镜面效果。 2. 代码 3. 部分讲解...

  • OpenGL大小球纹理镜像

    这个案例是基于OpenGL综合练习基础上增加纹理和镜像效果的实现。 一、SetupRC函数 纹理的顶点数据设置完成...

  • OpenGL纹理综合案例

    之前用OpenGL做了一个关于大球公转,小球自转的案例,现在我们通过纹理去绘制大球小球和地板,呈现出一个有倒影的画...

  • 纹理在OpenGL中的实际运用

    这次的案例我们在OpenGL综合练习的基础上配上纹理和镜面效果,提升整理的视觉效果。具体代码如下: 主要模块讲解 ...

  • OpenGL笔记六:纹理常用API(一)

    前言 期待您移步上篇:OpenGL笔记五:综合实例理解-压栈、出栈、堆栈矩阵相乘、矩阵相乘、向量相乘 纹理 纹理只...

  • GLKit常用API解析

    GLKTextureInfo 创建OpenGL纹理信息 name: OpenGL上下文中纹理名称 target: ...

  • OpenGL ES GLKit 􏰼􏰜常用API解析

    GLKTextureInfo创建OpenGL纹理信息 name : OpenGL上下文中纹理名称 target :...

  • OpenGL综合练习

    大球自传小球公转案例是OpenGL比较综合的一个经典案例,案例效果如下所示,接下来我们将一步一步得来完成这个经典案...

  • OpenGL综合练习

网友评论

      本文标题:OpenGL纹理综合练习

      本文链接:https://www.haomeiwen.com/subject/vzozkktx.html