(五)(1)OpenGL下的渲染技巧(上)绘制甜甜圈实例---正背面剔除解析、深度测试、多边形偏移

一、运行效果展示

可以通过方向键转动方向
在这里插入图片描述

二、代码实现

1、代码设计实现流程

在这里插入图片描述

2、代码

0)相关类定义
//演示了OpenGL背面剔除,深度测试,和多边形模式
#include "GLTools.h"	
#include "GLMatrixStack.h"
#include "GLFrame.h"
#include "GLFrustum.h"
#include "GLGeometryTransform.h"

#include <math.h>
#ifdef __APPLE__
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>
#endif

设置角色帧,作为相机,设置观察者视图坐标
GLFrame             viewFrame;
//使用GLFrustum类来设置透视投影
GLFrustum           viewFrustum;
GLTriangleBatch     torusBatch; //容器类
GLMatrixStack       modelViewMatix; //模型视图矩阵
GLMatrixStack       projectionMatrix;//物理投影矩阵
GLGeometryTransform transformPipeline;//变换管道,存储模型视图/投影/模型视图投影矩阵
GLShaderManager     shaderManager; //存储着色器管理工具类
1)创建窗口代码实现
//窗口改变
void ChangeSize(int w, int h)
{
   
    //1、防止h变为 0
    if(h == 0)
        h = 1;
    
    //2.设置视口窗口尺寸
    glViewport(0, 0, w, h);
    
    //3.setPrespective 函数的参数是一个从顶点方向看去的视场角度(用角度值表示)
    //设置透视模式,初始化其透视矩阵
    viewFrustum.SetPerspective(35.f, float(w)/float(h), 1.f, 100.f);
    
    //4.把透视矩阵加载到透视矩阵对阵中
    projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());
    
    //5.初始化渲染管线
    transformPipeline.SetMatrixStacks(modelViewMatix, projectionMatrix);
}
2)方向事件响应代码实现
//键位设置,通过不同的键位对其进行设置
//控制Camera的移动,从而改变视口
void SpecialKeys(int key, int x, int y)
{
   
    //判断方向
    if (key ==  GLUT_KEY_UP) {
   
        //2.根据方向调整观察者位置
        viewFrame.RotateWorld(m3dDegToRad(-5.0), 1.0f, 0.0f, 0.0f);
    }
    
    if (key == GLUT_KEY_DOWN) {
   
        viewFrame.RotateWorld(m3dDegToRad(5.0), 1.0f, 0.0f, 0.0f);
    }
    
    if (key == GLUT_KEY_LEFT) {
   
        viewFrame.RotateWorld(m3dDegToRad(-5.0), 0.0f, 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值