微信网站开发流程戚墅堰网站建设

diannao/2026/1/22 1:05:56/文章来源:
微信网站开发流程,戚墅堰网站建设,广东省建设行业数据开放平台,xxx网站策划书多重纹理和纹理组合器 本文主要介绍OpenGL中两种技术的使用方法#xff1a;多重纹理技术和纹理组合器技术#xff0c;最终根据参考【2】中的代码#xff0c;实现了两个简单的演示DEMO#xff0c;其中使用到了《八叉树颜色量化、BMP、TGA文件解析》篇章中提供的图像解析类。… 多重纹理和纹理组合器 本文主要介绍OpenGL中两种技术的使用方法多重纹理技术和纹理组合器技术最终根据参考【2】中的代码实现了两个简单的演示DEMO其中使用到了《八叉树颜色量化、BMP、TGA文件解析》篇章中提供的图像解析类。 下载地址https://github.com/twinklingstar20/twinklingstar_cn_demo_multitexture_texture_combiner/ 一多重纹理技术(Multitexture) 1.1 多重纹理技术简介 OpenGL在渲染多边形时允许多张纹理同时被应用这些纹理在操作管线上一个接一个的被处理。一个纹理单元texture unit表示单个纹理的操作一个纹理单元处理完成后将它的结果传递给下一个纹理单元直至所有的纹理单元都被处理完。下图显示了片断fragment经历的四个纹理操作过程。 图1.片断经历的四个纹理过程 注意在反馈模式下除了第一个纹理单元外多重纹理是处于未定义的状态即只有第一张纹理单元能用In feedback mode, multitexturing is undefined beyond the first texture unit。 1.2 使用多重纹理的几个步骤 1   建立每个纹理单元的纹理状态包括纹理图像数据过滤器环境矩阵纹理函数生成方式等。可用glActiveTexture()函数以改变当前的纹理状态然后调用glTexImage*()glTexParameter*()glTexEnv*()glTexGen*()glBindTexture()方法分配每个纹理单元的纹理信息纹理状态、纹理坐标和光栅化纹理坐标的查询都应用在当前纹理单上即glActiveTexture()指定的纹理单元。此外可以使用glGetIntegerv(GL_MAX_TEXTURE_UNITS,…)显示当前实现中允许的最大纹理单元数得到的最大纹理单元数至少为2。 注意glPushAttrib()glPushClientAttrib()glPopAttrib()或者glPopClientAttrib()可以保存或者恢复所有纹理单元的纹理状态但是纹理矩阵堆栈除外。 2   可以用glMultiTexCoord*()函数规定每个顶点上不同纹理单元的纹理坐标。下面的代码片段演示该函数的用法 1 2 3 4 5 6 7 8 9 10 11 glBegin(GL_TRIANGLES); glMultiTexCoord2f(GL_TEXTURE0,0.0f,0.0f); glMultiTexCoord2f(GL_TEXTURE1,1.0f,0.0f); glVertex2f(0.0f,0.0f); glMultiTexCoord2f(GL_TEXTURE0,0.5f,1.0f); glMultiTexCoord2f(GL_TEXTURE1,0.5f,0.0f); glVertex2f(50.0f,100.0f); glMultiTexCoord2f(GL_TEXTURE0,1.0f,0.0f); glMultiTexCoord2f(GL_TEXTURE1,1.0f,1.0f); glVertex2f(100.0f,0.0f); glEnd(); 注意如果使用glTexCoord*()相当于采用了第一个纹理单元的纹理坐标即与glMultiTexCoord*(GL_TEXTURE0,…)等价。 3   恢复使用单个纹理。在使用多重纹理时如果想要恢复使用单个纹理需要禁用除纹理单位0之外的所有纹理单位。如下面的代码片段所示 1 2 3 4 5 glActiveTexture(GL_TEXTURE1); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE2); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); 附加说明 1由于微软的VS平台上只支持OpenGL 1.1版本所以无法使用glActiveTexture()等函数所以需要安装上glew库这个库的安装方法网上很容易搜索到 2将多重纹理技术与组合器函数glTexEnv*()结合使用可以产生很绚丽的效果下面介绍纹理组器函数 3multitexture-demo演示了一个多重纹理的简单例子使用到纹理组合器。 二纹理组合器Texture combiner 2.1 纹理组合器函数简介 OpenGL除了多重纹理外还提供了一些灵活的纹理组合器函数允许程序员对片断与纹理值或者其它颜色的混合对纹理提供了更加精细的控制。这就使得OpenGL的重心从原先的顶点处理变换、裁剪过渡到光栅化和片断操作片断的处理能力越来越强。纹理组合器函数glTexEnv*()的参数比较多下面会逐步进行介绍。 2.2 glTexEnv*()函数介绍 void glTexEnv{if}(GLenum target,GLenum pname,TYPE param); void glTexEnv{if}v(GLenum target,GLenum pname,TYPE* param); target规定纹理环境texture environment必需是GL_TEXTURE_ENVGL_TEXTURE_FILTER_CONTROLGL_POINT_SPRITE中的任意一个值。对target和pname对应参数进行总结如表1所示对pname和param对应参数进行总结如表2所示。 表1. 参数target和参数pname的对应取值 表2. 参数pname和参数param的对应取值 2.2.1 target的值是GL_TEXTURE_FILTER_CONTROL 如果target是GL_TEXTURE_FILTER_CONTROL时pname必须是GL_TEXTURE_LOD_BIAS则param规定了纹理细节层的偏移量它的用途可以参见文章《基本的二维纹理对象的使用方法介绍》中3.1小节的介绍。 2.2.2 target的值是GL_POINT_SPRITE 如果target是GL_POINT_SPRITE 时pname必须是GL_COORD_REPLACEboolean值用于规定是否开启点精灵纹理坐标替换point sprite texture coordinate replacement。 2.2.3 target的值是GL_TEXTURE_ENV 如果target是GL_TEXTURE_ENVpname必须是1GL_TEXTURE_ENV_MODE  GL_TEXTURE_ENV_COLOR3GL_COMBINE_RGBGL_COMBINE_ALPHA4GL_RGB_SCALE5GL_ALPHA_SCALE6GL_SRC0_RGB GL_SRC1_RGB7GL_SRC2_RGB8GL_SRC0_ALPHA9GL_SRC1_ALPHA10GL_SRC2_ALPHA。 在不同的纹理存储格式下用于纹理计算的R、G、B、A4个颜色分量的取值。 表3.进行组合操作的源纹理不同的内部存储格式下的Cs、As值 C代表一个三元的颜色值RGBA是相关的alpha值从纹理图像中提取的RGBA的值都在范围[0,1]内下标是p的代表由上一个阶段计算得到的纹理颜色处理阶段为0的纹理颜色就是起始的原片断颜色下标是s的代表原纹理颜色Texture Source Color下标是c的代表纹理环境的颜色Texture Environment Color下标是v的代表通过纹理函数计算后得到的纹理颜色。 表4. 当pname是GL_TEXTURE_ENV_MODE时几种纹理处理函数的计算公式 如果pname是GL_TEXTURE_ENV_MODEparams是GL_COMBINE则纹理函数的计算依赖GL_COMBINE_RGB和GL_COMBINE_ALPHA。 接下来描述的是由GL_SRC0_RGB、GL_SRC1_RGB、GL_SRC2_RGB、GL_SRC0_ALPHA、GL_SRC1_ALPHA、GL_SRC2_ALPHA规定的源纹理通过组合生成最后的纹理颜色的方法在下面的表中GL_SRC0_c表示Arg0GL_SRC1_c表示Arg1GL_SRC2_c表示Arg2。 当pname是GL_COMBINE_RGB时param可以接受的几个参数是GL_REPLACE、GL_MODULATE、GL_ADD、GL_ADD_SIGNED、GL_INTERPOLATE、GL_SUBTRACT、GL_DOT3_RGB、GL_DOT3_RGBA。 表5. 规定几种源纹理通过对这几种纹理的RGB颜色计算得到最终的纹理颜色     类似的当pname是GL_COMBINE_ALPHA时param可以接受的几个参数是GL_REPLACE、GL_MODULATE、GL_ADD、GL_ADD_SIGNED、GL_INTERPOLATE、GL_SUBTRACT。 表6.规定几种源纹理通过对这几种纹理的alpha颜色计算得到最终的纹理颜色 下面的表格中Cs表示当前绑定的纹理采样的颜色Cc表示环境纹理颜色常量Constant Texture-Environment ColorCf表示传入片断的主颜色Cp表示以前的纹理阶段计算出的颜色如果当前正处理的纹理阶段是0则它的值为Cf类似的AsAcAfAp表示对应纹理的alpha值。下表是基于源纹理的RGB值和操作计算得到的Arg0Arg1Arg2。 表7. 基于源纹理的RGB值和操作计算得到的Arg0Arg1Arg2      类似的下表是基于源纹理的Alpha值和操作计算得到的Arg0Arg1Arg2。 表8. 基于源纹理的Alpha值和操作计算得到的Arg0Arg1Arg2 2.3 glTexEnv*()函数使用例子 选择激活纹理组合方法 1 glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE); 选择纹理组合的运算法则 1 glTexEnvf(GL_TEXTURE_ENV,GL_COMBINE_RGB,GL_SUBTRACT); 设置纹理组合函数中纹理的来源 1 2 glTexEnvf(GL_TEXTURE_ENV,GL_SRC0_RGB,GL_TEXTURE); glTexEnvf(GL_TEXTURE_ENV,GL_SRC1_RGB,GL_PREVIOUS); 设置如何使用纹理组合函数中纹理的来源来计算Arg0和Arg1如表7所示 1 2 glTexEnvf(GL_TEXTURE_ENV,GL_OPERAND0_RGB,GL_SRC_COLOR); glTexEnvf(GL_TEXTURE_ENV,GL_OPERAND1_RGB,GL_SRC_COLOR); 实现了multitexture-combine-demo这个demo用组合器生成多重纹理的代码片段如下所示 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 void initTexture() {     unsigned int textureId[2];     //创建2个纹理     //生成一个2*2颜色为(0,0,255)的纹理图片     textureId[0] genTexture(0,0,255);     //读取一个BMP图片生成纹理     textureId[1] genTextureFile(text.bmp);     //激活第1个纹理     glActiveTexture(GL_TEXTURE0);     glEnable(GL_TEXTURE_2D);     glBindTexture(GL_TEXTURE_2D,textureId[0]);     //用纹理textureId[0]替换环境纹理     glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);     glActiveTexture(GL_TEXTURE1);     glEnable(GL_TEXTURE_2D);     glBindTexture(GL_TEXTURE_2D,textureId[1]);     //设置组合器运算法则是“减法”,     //textureId[1]是纹理GL_SRC0_RGB前一个阶段计算的纹理是GL_SRC1_RGB     //根据运算法则GL_SRC0_RGB-GL_SRC1_RGB字体中间是白色的(255,255,255)减去(0,0,255)会显示出黄色     //字体周围是黑色的减去(0,0,255)还是黑色的。     glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE);     glTexEnvf(GL_TEXTURE_ENV,GL_COMBINE_RGB,GL_SUBTRACT);     glTexEnvf(GL_TEXTURE_ENV,GL_SRC0_RGB,GL_TEXTURE);     glTexEnvf(GL_TEXTURE_ENV,GL_OPERAND0_RGB,GL_SRC_COLOR);     glTexEnvf(GL_TEXTURE_ENV,GL_SRC1_RGB,GL_PREVIOUS);     glTexEnvf(GL_TEXTURE_ENV,GL_OPERAND1_RGB,GL_SRC_COLOR); } void drawScene() {     glBegin(GL_QUADS);         //分别指定三个纹理的纹理坐标         glMultiTexCoord2f(GL_TEXTURE0,0.0f, 0.0f);glMultiTexCoord2f(GL_TEXTURE1,0.0f, 0.0f);         glVertex3f(-1.0f, -1.0f,  1.0f);         glMultiTexCoord2f(GL_TEXTURE0,1.0f, 0.0f);glMultiTexCoord2f(GL_TEXTURE1,1.0f, 0.0f);         glVertex3f( 1.0f, -1.0f,  1.0f);         glMultiTexCoord2f(GL_TEXTURE0,1.0f, 1.0f);glMultiTexCoord2f(GL_TEXTURE1,1.0f, 1.0f);         glVertex3f( 1.0f,  1.0f,  1.0f);         glMultiTexCoord2f(GL_TEXTURE0,0.0f, 1.0f);glMultiTexCoord2f(GL_TEXTURE1,0.0f, 1.0f);         glVertex3f(-1.0f,  1.0f,  1.0f);     glEnd(); } 该DEMO的组合效果如下图所示 图2. 通过设置组合器得到最终的结果     至此演示了组合器的基本用法可以通过概念组合器不同的参数得到不同的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

找活做的网站wordpress首页白屏

1、什么是视图视图是虚拟的表,是一个存储的查询,虽然不需要实际的物理存储,但是也被看作是一个数据库对象;它与包含数据的表不一样,它不包含任何列或数据,它只是包含使用时动态检索数据的查询,并…

中英文网站建设企业网站未收录

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

织梦系统网站地图模板下载中国最好的外贸公司

1.最大公约数和最小公倍数的组合问题 (1)在调试的过程中涉及到很大的数据,我们我们在定义变量的时候定义为long long类型 (2)这个里面我们自定义了max2用来求最大公约数,min2用来求最小公倍数 &#xff0…

网站站做地图软件西安网站工作室

由于大量数据存储在数据库同一张表中,后期性能和扩展会受到影响。所以需要进行表分区,因为它可以将大表分成较小的表,从而减少内存交换问题和表扫描,最终提高性能。庞大的数据集被分成更小的分区,更易于访问和管理。 …

东莞网站设计案例阿里建站价格

目录 AQS简介AQS的设计思路AQS的核心组成部分 状态(State)同步队列(Sync Queue)条件队列(Condition Queue) AQS的内部实现 节点(Node)锁的获取与释放 独占锁共享锁 条件变量 AQS的应…

谷歌网站推广费用软装设计网站有哪些

void类型修饰符(type specifier)表示“没有值可以获得”。因此,不可以采用这个类型声明变量或常量。void 类型可以用于下面各小节所描述的目的。void用于函数声明没有返回值的函数,其类型为 void。例如,标准库函数 perror() 被声明为以下原型…

关于建设集团公司网站的报告众包网站建设

按显示技术尺寸来分,主要分为大尺寸和小尺寸(10寸以下),TFT-LCD行业下游主要是各类型消费电子,包括PC显示器,液晶电视,智能手机等。 TFT-LCD面板产业链 资料来源:共研产…

做公众好号的网站吗黄冈做学生互评的网站

这开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内,可以解决你的问题。加群请联系 liuaustin3 ,(共1830人左右 1 2 3 4 5&#xf…

做足球推荐网站能赚钱吗1.网站建设基本流程是什么

代码框架 // 在数组nums将下标从left到right中进行从小到大排序// 原理是先将一个元素排好序,然后将其他的元素排好序void sort(int[] nums, int left, int right) {if (left > right) {return;}// 对数组nums[left,right]进行切分,使得nums[left,p-1…

台州企业网站搭建价格网站关键词代码位置

目前的技术存在的问题?   尽管DCOM和IIOP都是固定的协议,业界还没有完全转向其中任何一个协议。没有融合的部分原因是文化的问题所致。而且在当一些组织试图标准化一个或另一个协议的时候,两个协议的技术适用性就被提出质疑。传统上认为DC…

正规网站制作公司哪家好多个wordpress站点互相

在linux服务器环境下,可以使用cat /proc/cpuinfo命令查看当前CPU的核数等信息。 cat /proc/cpuinfo 字段解析 /proc/cpuinfo 是一个特殊的文件,在 Linux 系统中提供有关 CPU 的详细信息。它实际上是一个伪文件系统中的文件,通过它可以获取到…

大观网站建设seo知识分享

在本文中,我们将介绍五种方法,这些方法可以使用有效的编码来帮助垃圾回收器减少分配和释放内存的CPU时间,并减少GC开销。 较长的GC通常会导致我们的代码在回收内存时被停止(也称为“停止世界”)。 一些背景 GC的建立…

网站建设中html网页长沙 网站设计 公司价格

要在 CentOS 7 下使用 Ansible Playbook 实现 MySQL 8.0.34 的二进制安装,需要先下载 MySQL 8.0.34 的二进制包,并将其上传至目标服务器。 以下是基于二进制包安装的一个简化示例 Playbook: --- # mysql8_binary_install_playbook.yaml- nam…

我想花钱做网站徐州seo公司

以下是在学习和使用spark过程中遇到的一些问题,记录下来。 1、首先来说说spark任务运行完后查错最常用的一个命令,那就是把任务运行日志down下来。 程序存在错误,将日志down下来查看具体原因!down日志命令:yarn logs -application…

网站建设会提供哪些服务备案查询入口

引言 随着人工智能技术的迅猛发展,人工智能生成内容(AIGC)技术已经逐渐走进人们的视野。AIGC技术是指利用人工智能技术生成各种形式的内容,如文字、图像、音频、视频等。这种技术不仅可以提高内容生产效率,还可以创造…

网站的建设怎么弄外贸网站建设知识 列表

面试技术栈 —— 2024网易雷火暑期实习真题 1. 最长递增子序列。2. 集中限流和单机限流你觉得哪个好?3. redis部署服务器配置,为什么不用哨兵?4. 讲讲分布式session的原理。5. 数据库:表数据量大了,如何分表&#xff1…

自学wordpressseo网址查询

1.docker的简介 1.1docker是什么 用一句话来说docker就是一个新一代虚拟化技术 Docker是一种开源的平台,用于开发、交付和运行应用程序。它允许开发人员将应用程序和它们的依赖打包在一个容器中,然后部署到任何支持Docker的环境中。Docker的主要特点包括…

免费ip代理服务器苏州seo推广公司

关卡名 认识回溯思想 我会了✔️ 内容 1.复习递归和N叉树,理解相关代码是如何实现的 ✔️ 2.理解回溯到底怎么回事 ✔️ 3.掌握如何使用回溯来解决二叉树的路径问题 ✔️ 回溯可以视为递归的拓展,很多思想和解法都与递归密切相关,在很多…

网站开发者工具post建筑学院app网站

chrome浏览器使用 Console(控制台) 了解如何:打开DevTools Console(控制台),堆叠冗余消息或在自己的行上显示它们,清除或保持输出或将其保存到文件,过滤输出,以及了解其他Console(控制台)设置。 TL;DR 以专用面板形式,或作为任何其他面板的抽屉式面板的形式,打开Console…

如何做一个公司网站网页设计作业及答案

Vue中常用的修饰符主要有以下几类: 事件修饰符: .stop:阻止事件的冒泡,相当于调用了event.stopPropagation()方法。 .prevent:阻止事件的默认行为,相当于调用了event.preventDefault()方法。 .capture&a…