持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情
- Swift Optional
- Swift Enum
- iOS开发 做一个三角形
- Swfit 指针类型
- Swift 属性(下)
- Swift 属性
- Swift 小结
- Swift 类与结构体(下)
- Swift 类的生命周期
- Swift 类的初始化器
- Swift 类与结构体
- OpenGL 压缩纹理
- OpenGL 隧道坐标计算
- 0penGL 像素格式及数据类型
- OpenGL 纹理对象
- OpenGL 纹理
- OpenGL 模型变化
- OpenGL 视图
- OpenGL 矩阵
- OpenGL 向量
- OpenGL 颜色混合
- OpenGL 深度测试的潜在风险
- OpenGL 浅析深度测试
- OpenGL 浅析隐藏面消除
- OpenGL 图元连接方式
- 记WKWebView与HTML完成交互两三事
- OpenGL 渲染流程图解析
- OpenGL 控制你的正方形
- OpenGL 专业名词解释
- OpenGL 环境搭建 - MacOS
设置Mip 贴图
上一篇我们整理了像素格式和数据类型的内容,今天我们来看看 关于 OpenGL 的隧道案例中,坐标的计算过程:
设置mip贴图基层
glTexParameteri (GL TEXTURE 2D, GL TEXTURE BASE LEVEL, O) ;
设置mip贴图最大层
glTexParameteri (GL TEXTURE 2D, GL TEXTURE BASE LEVEL, O) ;
经过Mip贴图的纹理过滤
| 常量 | 描述 |
|---|---|
| GL_NEAREST | 在Mip基层上执行最邻近过滤 |
| GL_LINEAR | 在Mip基层执行线性过滤 |
| GL_NEAREST_MIPMAP_NEAREST | 在最邻近Mip层,并执行最邻近过滤 |
| GL_NEAREST_MIPMAP_LINEAR | 在Mip层之间执行线性插补,并执行最邻近过滤 |
| GL_LINEAR_MIPMAP_NEAREST | 选择最邻近Mip层.并执行线性过滤 |
| GL_LINEAR_MIPMAP_LINEAR | 在Mip层之问执行线性插补,并执行线性过滤,又称三线性Mip贴图 |
floorBatch几何坐标计算
计算坐标使用三角形拼接,计算地板面的几何坐标
floorBatch.Begin(GL_TRIANGLE_STRIP, 28, 1);
//z表示深度,隧道的深度
for(z = 60.0f; z ›= 0.0f;: z -=10.0f) {
floorBatch.MultiTexCoordzf(0, 0.0f, 0.0f);
floorBatch.Vertex3f(-10.0f, -10.0f, z):
floorBatch.MultiTexCoord2f(0, 1.0f, 0.0f) ;
floorBatch.Vertex3f(10.0f, -10.0f, '2);
floorBatch.MultiTexCoord2f(0, 0.0f, 1.0f) ;
floorBatch.Vertex3f(-10.0f, -10.0f, z - 10.0f) ;
floorBatch.MultiTexCoord2f(0, 1.0f, 1.0f);
floorBatch.Vertex3f(10.0f, -10.0f, 2 - 10.0f):
floorBatch. End() ;
}
ceilingBatch几何坐标计算
和上面的坐标计算 相对的 天花板的 几何坐标计算
ceilingBatch.Begin(GL_TRIANGLE_STRIP, 28, 1);
for(z = 60.0f; z >= 0.0f; z-=10.0f) {
ceilingBatch.MultiTexcoord2f(0, 0.0f, 1.0f) ;
ceilingBatch.Vertex3f(-10.0f, 10.0f, z - 10.0f) :
cellingsatch.velterstrao.07/'9o.bi%:7:90.or);
ceilingBatch.MultiTexCoord2f(0, 0.0f, 0.0f) ;
ceilingBatch. Vertex3f(-10.0f, 10.0f, z);
ceilingBatch.MultiTexCoord2f(0, 1.0f, 0.0f) ;
ceilingBatch.Vertex3f(10.0f, 10.0f, z):
ceilingBatch. End() ;
}
leftWallBatch几何坐标计算
左侧墙面的 坐标计算内容:
leftWallBatch.Begin(GL_TRIANGLE_STRIP, 28, 1);
for (z = 60.0f; z >= 0.0f; z-=10.0f) {
leftWallBatch.MultiTexCoord2f(0, 0.of, 0.0f) ;
leftWallBatch.Vertex3f(-10.0f, -10.0f, z);
leftWallBatch.MultiTexCoord2f(0, 0.0f,1.0f):
leftwallBatch.Vertex3f(-10.0f, 10.0f, 'z):
leftwallBatch.Muttitexcoord27(8,2.0f,0.0f)0.of);
leftWallBatch.Vertex3f(-10.0f, -10.0f, z-
leftWallBatch.MultiTexCoord2f(0, 1.0f, 1.0f) ;
leftWallBatch.Vertex3f(-10.0f, 10.0f, z - 10.0f) ;
leftwallBatch.End0):
}
(-10.0f, 10.0f, z)
(-10.0f, -10.0f, z)
rightWallBatch几何坐标计算
和左侧墙面的计算内容基本上一样,只是这个墙在右侧:
rightWallBatch.Begin(GL_TRIANGLE_STRIP, 28, 1) ;
tor(Z = 60.0+; z >= 0.0f: z -=10.0f) {
rightwallBatch.MultiTexCoord2f(0, 0.0f, 0.0f) ;
rightWallBatch.Vertex3f(10.0f,'-10.0f, 2);
rightwalisatch.verteksi90.077/8o.oi*fa,;.on):
rightwallBatch.MultiTexCoord2f(0, 1.0f, 0.0f) ;
rightwallBatch.Vertex3f (10.0f, -10.0f, z - 10.0f) ;
rightwallBatch.MultiTexCoord2f(0, 1.0f, 1.0f) ;
rightwallBatch.Vertex3f (10.0f, 10.0f, z - 10.0f) ;
rightwallBatch. End() ;
}
q(10.0f, 10.0f, z)
q(10.0f, -10.0f, z)
最后, 我们通过将以上四面墙绘制到屏幕上,然后控制前景后退(深度值), 即 可以实现隧道中的前进后退的效果。