opengl为每一个物体添加完整的边框

本文介绍如何在OpenGL中为每个物体添加完整的边框,通过控制深度测试和模板缓冲来实现。虽然在绘制完轮廓后再次绘制物体需要特殊处理,但此方法能有效地展示物体的边界。
摘要由CSDN通过智能技术生成

opengl每一个物体添加完整的边框

简述:通过控制深度测试,及模板缓冲的清除。当开启边框绘制后,可绘制完整物体边框或物体连接的整体边框。
问题:轮廓物体绘制后,如果再次绘制物体需要另外处理。

代码流程:

//先进行模板缓冲测试,在进行深度测试
glEnable(GL_DEPTH_TEST);    //深度测试
glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glStencilMask(0x00); // 保证绘制其他物品的时候不会更新模板缓冲

//---绘制其他物品-----//
drawOther();

//--绘制轮廓物品--//
is_border = true;     //开启边框绘制
is_all_connect_border = false;  //是否连接所有边框

if (is_border)
    {
        glStencilFunc(GL_ALWAYS, 1, 0xFF);;//物体片段被渲染时(设为总是通过),将模板缓冲更新为1
        glStencilMask(0xff);

        shader.use();
        model = glm::scale(model, glm::vec3(1.0f, 1.0f, 1.0f)); //重复绘制时,重置model大小
        shader.setMat4("model", model);
        glDrawArrays(GL_TRIANGLES, 0, 36);

        outShader.use();

        glStencilFunc(GL_NOTEQUAL, 1, 0xff); //物体片
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值