Android利用利用OpenGLES绘制天空盒实例教程绘制天空盒实例教程
前言前言
天空盒这个效果最早是在腾讯的实景地图里看到的,当时觉得很牛逼,但是没有想过自己去实现以下。最近这段时间对opengl
很有兴趣,顺便就搞了这个天空盒,话不多说,先上效果。
天空盒的原理就是在三维空间中放置一个正方体,然后将我们的相机放置在正方体内,当我们的视点转动,相机跟着转动。我
们就可以看到相应的景色的变换了,天空盒本质上是一个立方体。
OpenGL
关于什么是OpenGL,什么是OpenGLES就不细说了,不了解的就自行百度吧,我们主要是关注代码。整个项目采用了Kotlin
+ Ndk的形式进行的开发。现在NDK的环境搭建比以前容易了,而且现在是使用CMakeList来构建C++代码的,不熟悉的可以
去查看一下。整个项目就两个关键类,SkyBoxView和SkyBoxRender。下面分别来看一下。
第一步第一步
SkyBoxView继承了GLSurfaceView,为什么要继承GLSurfaceView,因为在使用OpenGLES需要建立一个窗口和一个上下
文,GLSurfaceView帮我们做了这些工作。下面是SkyBoxView的主要代码:
class SkyBoxView(context: Context, attributeSet: AttributeSet?) : GLSurfaceView(context, attributeSet)
{
private lateinit var skyBoxRender: SkyBoxRender
private var lastX=0F
private var lastY=0F
private var yaw=0f
private var pitch=0f
private var screenWidth=0
private var screenHeight=0
private var horSensity=0.03f
private var verSensity=0.03f
constructor(context: Context) : this(context, null)
init
{
// initSensor()
initSensity()
initConfig()
}
private fun initSensity()