青浦网络公司网站广告公司网页页面设计模板

diannao/2026/1/17 9:10:21/文章来源:
青浦网络公司网站,广告公司网页页面设计模板,自己开发的app如何上线,如何做视频网站赚钱(1) 我们要做的是#xff0c;根据原始纹理T0创建一系列的纹理#xff08;通常使用平均滤波#xff09;#xff1a;T1、T2…Tn#xff0c;其中每个纹理的大小都是前一个纹理的1/4#xff0c;即长度和宽度减半#xff0c;如图12.40所示。 要根据前一个mip纹理计算当前纹…(1) 我们要做的是根据原始纹理T0创建一系列的纹理通常使用平均滤波T1、T2…Tn其中每个纹理的大小都是前一个纹理的1/4即长度和宽度减半如图12.40所示。 要根据前一个mip纹理计算当前纹理中纹素的值可以使用平均滤波器即在RGB空间中计算纹素(xy)、(x1y)、(x1y1)和(xy1)的平均值然后将结果写入到当前纹理中如图12.41所示。 点击查看大图图12.40  根据原始纹理创建Mip纹理链 点击查看大图图12.41  用于创建mip纹理的平均滤波器 创建Mip纹理链时需要遵守一些规则。首先所有纹理都必须是方形的且边长为2的幂。这样可以在两个轴上按相同的比例缩小Mip纹理链末尾的最后一个纹理总是1×1的。另一个约定是原始纹理为mip等级0然后依次为mip等级1、2、3、4…n。例如如果原始纹理的大小为256×256则mip链中各个纹理的大小如表12.4所示。 表12.4 原始纹理为256×256时各个Mip纹理的大小 Mip纹理 纹理大小 Mip纹理 纹理大小 T0 256×256 T5 8×8 T1 128×128 T6 4×4 T2 64×64 T7 2×2 T3 32×32 T8 1×1 T4 16×16     除原始纹理外mip等级数为log2T0的边长。 在这个例子中为log2256 8。要计算总纹理数只需将上述结果加1。因此计算总纹理数的公式为log2T0的边长1。在这个例子中总纹理数为9。 2 这里纹理要占用多少内存呢图12.42是实际的mip纹理其中每个纹理的大小都是前一个纹理的1/4。由于每次都将纹理缩小到原来的1/4因此占用的内存很少。下面计算在前一个例子中纹理需要占用多少内存。 图12.42  实际的mip纹理 初始纹理的大小为256×256需要占用2562个字。Mip纹理链需要的内存量如下 要计算x为原始纹理所需内存量的多少倍将其除以2562 换句话说加上mip纹理时每个纹理需要的内存量只增加33代价很小收益却很高。 知道如何创建mip纹理以及它们占用的内存量后需要拿出一种将其加入到引擎中的方法。作者苦思闷想考虑过再次修改物体/多边形数据结构最后终于柳暗花明只需将纹理指针指向mip纹理链而不是单个纹理即可。然而在每个多边形中设置一个Mipmapping标记并在渲染多边形时将纹理指针视为执行位图数组的指针而不是单个位图的指针。这样便可以使用原来的数据结构。请看图12.43以理解这里讨论的方法。 图12.43  支持mip纹理链的纹理指针数组需要对纹理进行Mipmapping时原来的texture指针指向0级别mip纹理。据此分两步创建mip纹理链首先分配一个位图指针数组并将原来的texture指针指向该数组然后为每个mip纹理分配内存、生成mip纹理并将位图指针数组中的每个元素指向相应mip纹理的位图。看起来令人迷惑其实并非如此。 这种方案存在的唯一问题是我们强行将物体/多边形的位图图像指针指向了一个位图指针数组。因此必须非常小心避免不知道纹理已被mipmap化的函数将0级纹理视为普通纹理而知道纹理已被mipmap化的函数必须从mip纹理链中选择正确的纹理。 3 int Generate_Mipmaps(BITMAP_IMAGE_PTR source, // 原始纹理 BITMAP_IMAGE_PTR *mipmaps, // 指向mip纹理数组的指针 float gamma) // gamma修正因子 { // 这个函数创建一个mip纹理链 // 调用该函数时mipmap指向原始纹理 // 该函数退出时mipmap指向一个指针数组其中包含指向各个mip级纹理的指针 // 另外该函数返回mip等级数如果发生错误则返回-1 // 最后一个参数gamma用于提高mip纹理的亮度因为平均滤波器会降低亮度 // 1.01通常是不错的选择 // 该参数大于1.0时将提高亮度小于1.0时将降低亮度为1.0时没有影响 BITMAP_IMAGE_PTR *tmipmaps; // 局部变量指向指针数组的指针 // 第一步计算mip等级数 int num_mip_levels logbase2ofx[source-width] 1; // 为指针数组分配内存 tmipmaps (BITMAP_IMAGE_PTR *)malloc(num_mip_levels * sizeof(BITMAP_IMAGE_PTR) ); // 将元素0指向原始纹理 tmipmaps[0] source; // 设置宽度和高度它们相同 int mip_width source-width; int mip_height source-height; // 使用平均滤波器生成各个mip纹理 for (int mip_level 1; mip_level num_mip_levels; mip_level) { // 计算下一个mip纹理的大小 mip_widthmip_width mip_width / 2; mip_heightmip_height mip_height / 2; // 为位图对象分配内存 tmipmaps[mip_level] (BITMAP_IMAGE_PTR)malloc(sizeof(BITMAP_IMAGE) ); // 创建用于存储mip纹理的位图 Create_Bitmap(tmipmaps[mip_level],0,0, mip_width, mip_height, 16); // 让位图可用于渲染 SET_BIT(tmipmaps[mip_level]-attr, BITMAP_ATTR_LOADED); // 遍历前一个mip纹理使用平均滤波器创建当前mip纹理 for (int x 0; x tmipmaps[mip_level]-width; x) { for (int y 0; y tmipmaps[mip_level]-height; y) { // 需要计算4个纹素的平均值这些纹素在前一个mip纹理中的位置如下: // (x*2, y*2)、(x*21, y*2)、(x*2,y*21)、(x*21,y*21) // 然后将计算结果写入到当前mip纹理的(x, y)处 float r0, g0, b0, // 4个样本纹素的R、G、B分量 r1, g1, b1, r2, g2, b2, r3, g3, b3; int r_avg, g_avg, b_avg; // 用于存储平均值 USHORT *src_buffer (USHORT *)tmipmaps[mip_level-1]-buffer, *dest_buffer (USHORT *)tmipmaps[mip_level]-buffer; // 提取每个纹素的R、G、B值 _RGB565FROM16BIT( src_buffer[(x*20) (y*20)*mip_width*2] , r0, g0, b0); _RGB565FROM16BIT( src_buffer[(x*21) (y*20)*mip_width*2] , r1, g1, b1); _RGB565FROM16BIT( src_buffer[(x*20) (y*21)*mip_width*2] , r2, g2, b2); _RGB565FROM16BIT( src_buffer[(x*21) (y*21)*mip_width*2] , r3, g3, b3); // 计算平均值并考虑gamma参数 r_avg (int)(0.5f gamma*(r0r1r2r3)/4); g_avg (int)(0.5f gamma*(g0g1g2g3)/4); b_avg (int)(0.5f gamma*(b0b1b2b3)/4); // 根据5.6.5格式对R、G、B值进行截取 if (r_avg 31) r_avg 31; if (g_avg 63) g_avg 63; if (b_avg 31) b_avg 31; // 写入数据 dest_buffer[x y*mip_width] _RGB16BIT565(r_avg,g_avg,b_avg); } // end for y } // end for x } // end for mip_level // 让mipmaps指向指针数组 *mipmaps (BITMAP_IMAGE_PTR)tmipmaps; // 成功返回 return(num_mip_levels); } // end Generate_Mipmaps 4 该函数接受三个参数它们有些棘手。第一个参数是位图指针source可以是指向任何有效BITMAP_IMAGE对象的指针切记它是一个指针。第二个参数要复杂些 BITMAP_IMAGE_PTR *mipmaps;  这是一个指向BITMAP_IMAGE指针的指针。假设物体或多边形有一个texture指针它指向一个BITMAP_IMAGE。现在的问题是当mip纹理函数生成所有的mip纹理时我们要将该指针指向mip纹理链本身为此需要知道该指针的地址以便能够修改它因此需要一个** BITMAP_IMAGE。这就是需要一个指向指针的指针作为参数的原因。我们将让该参数指向mip纹理指针数组。 这个函数提供了这样的灵活性可以将同一个对象作为参数source和mipmap。对于source参数将其设置为指向该对象的指针对于参数mipmaps需要将其设置为指向该对象的指针的地址这样函数才能对其进行修改。假设您这样调用该函数 Generate_Mipmaps(obj-texture, (BITMAP_IMAGE_PTR *)obj-texture,1.01);  其中obj的类型为OBJECT4DV2_PTR它有一个texture字段该字段是一个指向BITMAP_IMAGE的指针BITMAP_IMAGE_PTR。仔细查看上述调用可以发现我们将该指针作为第一个参数同时将其地址作为第二个参数因此对第二个参数进行修改时将修改obj-texture指向的实际值从而丢失它指向的原始数据。但事实上并不会丢失任何数据我们将把obj-texture指向的原始位图用作mip纹理链中的第一个纹理。在删除mip纹理链时我们重新将该指针指向原始位图。图12.44说明了整个处理过程。 点击查看大图图12.44  让obj.texture指向mip纹理链和重新指向T0 回到mip纹理生成函数--它创建mip纹理链为纹理指针数组分配内存然后计算下一个mip等级的大小为该mip等级分配内存在RGB空间使用平均滤波器来创建该mip等级。这一过程不断重复直到mip等级的大小为1×1为止然后函数结束。该函数的最后一个参数默认值为1.01用于设置gamma值。使用平均过滤器来不断缩小图像时其亮度会逐渐降低因此通常使用gamma因子来提高每个mip等级的亮度确保所有mip等级的亮度一致。为说明这一点作者编写了一个演示程序名为DEMOII12_10.CPP|H。用户可以选择不同的纹理图该程序将动态地创建mip纹理并显示它们如图12.45所示。另外用户还可以修改gamma值以查看其影响。该程序的控制方式如下 图12.45  mip纹理实时生成程序的屏幕截图

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

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

相关文章

沈阳工伤保险做实在哪个网站服务公司起名

Hive 中的条件函数允许你在查询中基于某些条件执行逻辑操作。以下是你提到的条件函数的详细讲解,包括案例和使用注意事项: IF() 功能:根据条件返回两个表达式中的一个。语法:IF(boolean_test, value_if_true, value_if_false)案例:SELECT IF(1=1, true, false); 结果为 tr…

菲律宾做网站企业内部网站源码

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个下…

制作网站的顺序是相城网页设计报价

数据压缩是一个软件开发中的常见需求:很多时候需要先将较大的数据进行压缩然后再通过网络等进行传输。在 .NET 中,有多个压缩算法供我们选择:Deflate、GZip 和 Br 。这些压缩算法都是基于流(Stream)的,在对…

广州加盟网站建设萍乡建站公司

SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录(第五天)MyBatis的注解开发 ​ 昨天我们深入学习了MyBatis多表之间的关联映射,了解掌握了一对一关联映射,一对多关联映射,嵌套查询方…

网站宣传方案高端网站定制站

1. lambda 函数概述lambda 表达式是一种匿名函数,即没有函数名的函数;该匿名函数是由数学中的λ演算而来的。通常情况下,lambda函数的语法定义为:[capture] (parameters) mutable ->return-type {statement}其中:[c…

建设网站企业网上银行登录入口网站定制制作

这篇文章是我最近十天口语系列文章的合辑,文章比较长,一万五千余字。但是系统化地归纳了自己十多年的英语尤其是口语方面的学习经历与总结思考。我不是个纯粹的英语专业学生,我甚至不是任何英语相关专业的学生,但是我和英语却有着…

找网站推广濮阳吧

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootthymeleaf的物业管理系统(源代码数据库)129 一、系统介绍 本项目前后端分离,本系统分为管理员、小区管理员、用户三种角色 1、用户: 登…

小程序网站开发临沂建设中专官方网站

使用 logcat 命令 查看和跟踪系统日志缓冲区的命令logcat的一般用法是&#xff1a; [adb] logcat [<option>] ... [<filter-spec>] ... 下文介绍过滤器和命令选项&#xff0c;详细内容可参见Listing of logcat Command Options。 可以在开发机中通过远程shell的方式…

局网站建设招标电商网站可维护性

A and B and Lecture Rooms 题意要求我们找有多少个点iii满足dis(i,x),dis(i,y)dis(i, x), dis(i, y)dis(i,x),dis(i,y)&#xff0c;输出点iii的数量即可。 首先特判无解的情况就是dis(x,y)dis(x, y)dis(x,y)为奇数时&#xff0c;接下来我们讨论有解的情况&#xff0c;大致分…

网站没有域名设置景德镇做网站哪家好

首先查看你的环境变量中是否有如果没有请添加该环境变量。变量名为&#xff1a;TNS_ADMIN 变量值为&#xff1a;E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN;(如果你更改了默认目录&#xff0c;请找到相应的目录加进去)&#xff0c;添加完成之后&#xff0c;…

外贸网站 费用怎么做跟别人一样的网站吗

import java.util.ArrayList;/*** ## 编程题【System类】* <p>* 请定义一个集合,并将1至1千万这1千万个数字添加到集合中* &#xff0c;计算这个行为运行的时间&#xff0c;并打印。*/ public class Demo1 {public static void main(String[] args) {//起始时间long star…

企业服务平台网站建设h5 和手机网站

1、是什么&#xff1f; 上次访问时间&#xff1b;即用户最近一次登录时间&#xff1b; 2、为什么&#xff1f; 为了提示用户登录或访问记录&#xff0c;提高安全性&#xff0c;如qq登录提示&#xff1b; 3、怎么做&#xff1f; 通过cookie 实现&#xff1b; 用户第1次登录&…

智能写作网站老干部局网站建设

1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.N…

上海网站改版方案德化规划与建设局网站

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个数组aaa&#xff0c;让你实现以下两个操作之后输出数组aaa。 n≤6e5,ai≤230−1n\le6e5,a_i\le2^{30}-1n≤6e5,ai​≤230−1 思路&#xff1a; 下面介绍的思路清奇&#xff0c;反正我想不到。 对…

做网站一般哪里找wordpress 手动上传主题

1、list的介绍及使用 1.1、list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元…

网站管理建设的总结正邦设计电话

二维数组在小程序的开发中经常用到&#xff0c;整理如下 // pages/shuzu/shuzu.js Page({/*** 页面的初始数据*/data: {arry:[{name:凉拌茄子,mix:[茄子,蒜末,小米椒,葱花]},{name:清炒丝瓜,mix:[丝瓜,盐,糖]}],week: [{name:星期一,mix:03-08},{name:星期二,mix:03-08},{name…

网站后台word编辑器建设一个网站所需要注意的

防火墙技术持续发展&#xff0c;以应对日益复杂的网络安全威胁。以下是防火墙领域的一些最新技术汇总&#xff1a; 下一代防火墙&#xff08;NGFW&#xff09;&#xff1a;NGFW结合了传统防火墙的分组过滤和状态检测功能&#xff0c;还集成了深度包检测&#xff08;DPI&#xf…

盐山网站餐饮设计公司网站

在学习 http://xiaopengyou.fun/public/2019/09/20/20_Material/ 的时候遇到的一些问题 初始化 初始化的时候 VkWriteDescriptorSet 把 ring buffer 绑定到 descriptor set 在每帧的最后&#xff0c;提交完 uniform buffer 的数据之后&#xff0c;vkCmdBindDescriptorSets 把…

网站产品推广北京百度推广优化公司

难度参考 难度&#xff1a;中等 分类&#xff1a;链表 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨在…

容桂网站建设哪家公司好手机编辑WordPress博客

说明&#xff1a;datatables是一款jQuery表格插件。感觉EasyUI的datagrid更易用 内容&#xff1a;多选框和服务器端分页 缘由&#xff1a;写这篇博客的原因是datatables的文档写的不怎么样&#xff0c;找东西很麻烦 环境&#xff1a;asp.net mvc , vs2015sqlserver2012 显示效…