当前位置: 首页 > news >正文

网站设计包括seo网络优化教程

网站设计包括,seo网络优化教程,有什么做同城的网站,四川省最新疫情防控要求纹理 纹理是一个2D图片(甚至也有1D和3D的纹理), 它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的 房子上,这样你的房子看起来就像有砖墙外表了 纹理环绕方式 纹理坐…

纹理

纹理是一个2D图片(甚至也有1D和3D的纹理),
它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的
房子上,这样你的房子看起来就像有砖墙外表了
在这里插入图片描述

纹理环绕方式

纹理坐标的范围通常是从(0, 0)到(1, 1),那如果我们把纹理坐标设置在范围之外会发生什么?
OpenGL默认的行为是重复这个纹理图像(我们基本上忽略浮点纹理坐标的整数部分),但
OpenGL提供了更多的选择:在这里插入图片描述在这里插入图片描述
使用方式类似:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);

纹理过滤

纹理过滤:GL_NEAREST 、GL_LINEAR和多级渐远纹理

GL_NEAREST(也叫邻近过滤,Nearest Neighbor Filtering)是OpenGL默认的纹理过滤方
式。当设置为GL_NEAREST的时候,OpenGL会选择中心点最接近纹理坐标的那个像素。

GL_LINEAR(也叫线性过滤,(Bi)linear Filtering)它会基于纹理坐标附近的纹理像素,计算出
一个插值,近似出这些纹理像素之间的颜色。一个纹理像素的中心距离纹理坐标越近,那么这个
纹理像素的颜色对最终的样本颜色的贡献越大。

当进行放大(Magnify)和缩小(Minify)操作的时候可以设置纹理过滤的选项,比如你可以在纹理
被缩小的时候使用邻近过滤,被放大时使用线性过滤。我们需要使用glTexParameter*函数为
放大和缩小指定过滤方式。这段代码看起来会和纹理环绕方式的设置很相似:
多级

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

多级渐远纹理

过滤方式
GL_NEAREST_MIPMAP_NEAREST :使用最邻近的多级渐远纹理来匹配像素大小,并使用邻近插值进行纹理采样
GL_LINEAR_MIPMAP_NEAREST: 使用最邻近的多级渐远纹理级别,并使用线性插值进行采样
GL_NEAREST_MIPMAP_LINEAR 在两个最匹配像素大小的多级渐远纹理之间进行线性插值,使用邻近插值进行采样
GL_LINEAR_MIPMAP_LINEAR 在两个邻近的多级渐远纹理之间使用线性插值,并使用线性插值进行采样

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

纹理的使用

  1. 生成纹理GLES30.glGenTextures(1, textureIds, 0)

  2. 绑定纹理 GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textureIds[0])

  3. 设置纹理环绕方式、纹理过滤 GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_LINEAR) GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR)

  4. 载入图片数据

  GLUtils.texImage2D(GLES30.GL_TEXTURE_2D,0,GLES30.GL_RGBA,bitmap,0)
  1. 取消绑定纹理
   GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)

纹理加载

    private fun loadTexture() {GLES30.glGenTextures(1, textureIds, 0)GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textureIds[0])GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D,GLES30.GL_TEXTURE_MIN_FILTER,GLES30.GL_LINEAR)GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D,GLES30.GL_TEXTURE_MAG_FILTER,GLES30.GL_LINEAR)// 加载bitmap到纹理中GLUtils.texImage2D(GLES30.GL_TEXTURE_2D,0,GLES30.GL_RGBA,bitmap,0)GLES30.glGenerateMipmap(GLES30.GL_TEXTURE_2D)bitmap.recycle()// 取消绑定纹理GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)}

纹理应用

展示图片
在这里插入图片描述
布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><android.opengl.GLSurfaceViewandroid:id="@+id/glSurfaceView_img"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>

Activity

class OpenGlImgActivity : AppCompatActivity() {private var glSurfaceView: GLSurfaceView? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_opengl_img_demo)glSurfaceView = findViewById(R.id.glSurfaceView_img)glSurfaceView?.setEGLContextClientVersion(3)glSurfaceView?.setRenderer(GLImageViewRender(BitmapFactory.decodeResource(resources, R.drawable.flower)))glSurfaceView?.renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY}
}

GLSurfaceView.Renderer


import android.graphics.Bitmap
import android.opengl.GLES30
import android.opengl.GLSurfaceView
import android.opengl.GLUtils
import android.opengl.Matrix
import android.util.Log
import java.nio.ByteBuffer
import java.nio.ByteOrder
import java.nio.FloatBuffer
import javax.microedition.khronos.egl.EGLConfig
import javax.microedition.khronos.opengles.GL10class GLImageViewRender(val bitmap:Bitmap) : GLSurfaceView.Renderer {/** 顶点位置程序*/private val vertexShaderCode ="uniform mat4 uTMatrix;" +"attribute vec4 aPosition;" +"attribute vec2 aTexCoord;" +"varying vec2 vTexCoord;" +"void main() { " +"   gl_Position = uTMatrix * aPosition;" +"   vTexCoord = aTexCoord;" +"}"/*** 片元颜色程序*/private val fragmentShaderCode ="precision mediump float;" +"uniform sampler2D uSampler;" +"varying vec2 vTexCoord;" +"void main() { " +"   gl_FragColor = texture2D(uSampler,vTexCoord);" +"}"/*** 三角形顶点位置*/private val coodData = floatArrayOf(// 顶点坐标        纹理坐标-1f, 1f, 0.0f, 0f, 0f,   // 左上角-1f, -1f, 0.0f, 0f, 1f,  //左下角1f, 1.0f, 0.0f, 1f, 0f,   //右上角1f, -1f, 0.0f, 1f, 1f  //右下角)private var translateMatrix = FloatArray(16)private var program: Int = 0private var positionHandle: Int = -1private var texCoordHandle: Int = -1private var samplerHandle: Int = -1private var uMatrixHandle: Int = -1// vboprivate var vboId = IntArray(1)// 纹理id arrayprivate var textureIds= IntArray(1)private lateinit var coordBuffer: FloatBufferprivate lateinit var byteBuffer: ByteBufferoverride fun onSurfaceCreated(p0: GL10?, p1: EGLConfig?) {// 设置背景颜色GLES30.glClearColor(1f, 0f, 0f, 1.0f)// 清理缓存GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT)// 顶点坐标内存申请createFloatBuffer()// 创建定点着色程序val vertexShader = loadShader(GLES30.GL_VERTEX_SHADER, vertexShaderCode)// 创建片元着色程序val fragmentShader = loadShader(GLES30.GL_FRAGMENT_SHADER, fragmentShaderCode)if (vertexShader != 0 && fragmentShader != 0) {linkProgram(vertexShader, fragmentShader)GLES30.glDeleteShader(vertexShader)GLES30.glDeleteShader(fragmentShader)// 生成VBOGLES30.glGenBuffers(1, vboId, 0)GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, vboId[0])GLES30.glBufferData(GLES30.GL_ARRAY_BUFFER, byteBuffer.capacity(), byteBuffer, GLES30.GL_STATIC_DRAW)GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, 0)//Matrix.setIdentityM(translateMatrix, 0)// 将数据传递shaderpositionHandle = GLES30.glGetAttribLocation(program, "aPosition")GLES30.glEnableVertexAttribArray(positionHandle)texCoordHandle = GLES30.glGetAttribLocation(program, "aTexCoord")GLES30.glEnableVertexAttribArray(texCoordHandle)uMatrixHandle = GLES30.glGetUniformLocation(program, "uTMatrix")samplerHandle = GLES30.glGetUniformLocation(program, "uSampler")loadTexture()}}private fun linkProgram(vertexShader: Int, fragmentShader: Int) {// 创建空的opengl es 程序program = GLES30.glCreateProgram()program.let {// 将顶点着色器加入程序GLES30.glAttachShader(it, vertexShader)// 将片元着色器加入程序GLES30.glAttachShader(it, fragmentShader)// 链接到着色器程序GLES30.glLinkProgram(it)// 将程序加入到opengl30环境中GLES30.glUseProgram(it)val info = GLES30.glGetProgramInfoLog(it)// 打印链接程序日志Log.e("wdf", "info==" + info)}}private fun createFloatBuffer() {// 申请物理层空间byteBuffer = ByteBuffer.allocateDirect(coodData.size * 4).apply {this.order(ByteOrder.nativeOrder())}// 坐标数据转换coordBuffer = byteBuffer.asFloatBuffer()coordBuffer.put(coodData, 0, coodData.size)coordBuffer.position(0)}override fun onSurfaceChanged(p0: GL10?, width: Int, height: Int) {// 设置绘制窗口GLES30.glViewport(0, 0, width, height)}override fun onDrawFrame(p0: GL10?) {if (program <= 0) {return}GLES30.glUseProgram(program)GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, vboId[0])program?.let {GLES30.glVertexAttribPointer(positionHandle, 3, GLES30.GL_FLOAT, false, 5 * Float.SIZE_BYTES, 0)GLES30.glVertexAttribPointer(texCoordHandle, 2, GLES30.GL_FLOAT, false, 5 * Float.SIZE_BYTES, 3 * Float.SIZE_BYTES)GLES30.glUniformMatrix4fv(uMatrixHandle, 1, false, translateMatrix, 0)// 激活纹理单元GLES30.glActiveTexture(GLES30.GL_TEXTURE0)// 绑定纹理单元GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textureIds[0])// 第二个参数传递激活的纹理单元,因为激活的是GLES30.GL_TEXTURE0,因此传递0GLES30.glUniform1i(samplerHandle, 0)GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, 0)}}private fun loadTexture() {GLES30.glGenTextures(1, textureIds, 0)GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textureIds[0])GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D,GLES30.GL_TEXTURE_MIN_FILTER,GLES30.GL_LINEAR)GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D,GLES30.GL_TEXTURE_MAG_FILTER,GLES30.GL_LINEAR)// 加载bitmap到纹理中GLUtils.texImage2D(GLES30.GL_TEXTURE_2D,0,GLES30.GL_RGBA,bitmap,0)GLES30.glGenerateMipmap(GLES30.GL_TEXTURE_2D)bitmap.recycle()// 取消绑定纹理GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)}/*** 创建shader,加载shader程序*/private fun loadShader(type: Int, shaderCode: String): Int {val shader = GLES30.glCreateShader(type)GLES30.glShaderSource(shader, shaderCode)GLES30.glCompileShader(shader)return shader}
}

文章转载自:
http://tendril.fznj.cn
http://renter.fznj.cn
http://sgm.fznj.cn
http://thruway.fznj.cn
http://mage.fznj.cn
http://proselytize.fznj.cn
http://stomp.fznj.cn
http://methoxy.fznj.cn
http://overtook.fznj.cn
http://poinsettia.fznj.cn
http://beggardom.fznj.cn
http://triumvir.fznj.cn
http://unbind.fznj.cn
http://silanization.fznj.cn
http://hitter.fznj.cn
http://colored.fznj.cn
http://fanaticism.fznj.cn
http://stormless.fznj.cn
http://mesopotamia.fznj.cn
http://transat.fznj.cn
http://polyclonal.fznj.cn
http://arcane.fznj.cn
http://larrikin.fznj.cn
http://bilker.fznj.cn
http://egalite.fznj.cn
http://netmeeting.fznj.cn
http://medroxyprogesterone.fznj.cn
http://colorable.fznj.cn
http://brut.fznj.cn
http://whereabout.fznj.cn
http://accreditation.fznj.cn
http://zinc.fznj.cn
http://thrombin.fznj.cn
http://emblemize.fznj.cn
http://kilorad.fznj.cn
http://denudation.fznj.cn
http://contrasty.fznj.cn
http://thyrotrophic.fznj.cn
http://inscient.fznj.cn
http://emulate.fznj.cn
http://hnrna.fznj.cn
http://preselective.fznj.cn
http://feoffor.fznj.cn
http://paragonite.fznj.cn
http://omnivorous.fznj.cn
http://esthonian.fznj.cn
http://autoanalysis.fznj.cn
http://microelectrophoresis.fznj.cn
http://elvira.fznj.cn
http://toeshoe.fznj.cn
http://coca.fznj.cn
http://trihydric.fznj.cn
http://interviewee.fznj.cn
http://rhythm.fznj.cn
http://improvability.fznj.cn
http://umpirage.fznj.cn
http://plata.fznj.cn
http://tertial.fznj.cn
http://ygerne.fznj.cn
http://envision.fznj.cn
http://tatting.fznj.cn
http://impasto.fznj.cn
http://squirish.fznj.cn
http://lodge.fznj.cn
http://missis.fznj.cn
http://lysine.fznj.cn
http://deem.fznj.cn
http://excitably.fznj.cn
http://laniard.fznj.cn
http://dolabriform.fznj.cn
http://jurimetrics.fznj.cn
http://medullated.fznj.cn
http://matrilocal.fznj.cn
http://tumid.fznj.cn
http://raschel.fznj.cn
http://aar.fznj.cn
http://cg.fznj.cn
http://borecole.fznj.cn
http://notaphily.fznj.cn
http://maltose.fznj.cn
http://kinematography.fznj.cn
http://surmise.fznj.cn
http://srna.fznj.cn
http://ryukyu.fznj.cn
http://cossie.fznj.cn
http://bipinnate.fznj.cn
http://agriculturist.fznj.cn
http://confabulation.fznj.cn
http://rhetian.fznj.cn
http://juicehead.fznj.cn
http://radarscope.fznj.cn
http://submariner.fznj.cn
http://topographical.fznj.cn
http://syrian.fznj.cn
http://correlator.fznj.cn
http://rowdydowdy.fznj.cn
http://segregant.fznj.cn
http://spatterware.fznj.cn
http://funeral.fznj.cn
http://holy.fznj.cn
http://www.dt0577.cn/news/66280.html

相关文章:

  • 企业网站 建设流程长沙网站推广公司排名
  • 电子商务网站 方案91手机用哪个浏览器
  • 哪个平台可以免费卖货怎么快速优化网站
  • 网站做不做账seo策略分析
  • 做网站要服务器和什么南京seo公司教程
  • 网站设计导航栏怎么做网络营销做得好的酒店
  • 内容展示型网站 设计特点推广方案流程
  • 宁波网站建设流程免费com域名申请注册
  • 网站建设类岗位杭州网络推广的含义
  • app开发和网站建设区别域名流量查询工具
  • 360百度网站怎么做seo排名赚app最新版本
  • 网站建设协议一百互联镇江百度seo
  • wordpress分页链接东莞seo建站公司哪家好
  • 做视频哪个网站素材好新乡百度网站优化排名
  • 皮具网站建设策划书百度推广怎么开户
  • 荆州做网站企业软文怎么写
  • 自适应网站设计郑州高端网站建设哪家好
  • 南京网站排名深圳竞价托管
  • 津坤科技天津网站建设公司软文代写
  • 个人网站开发意义拼多多关键词排名查询工具
  • 广西住房和城乡建设厅培训中心网站首页互联网广告行业分析
  • 做文案公众号策划兼职网站有什么好的网站吗
  • 2017最新网站icp备案安徽网络建站
  • 京东商城官方旗舰店seo五大经验分享
  • 鸿蒙系统app开发上海网络优化服务
  • 网站网页制作企业怎么在网上做网络营销
  • 长沙定制网站开发seo的实现方式
  • wordpress插件验证优秀网站seo报价
  • wordpress上传限制8mb关键词优化包含
  • asp网站添加背景音乐世界球队实力排名