版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/1Qt图形引擎优化算法第一部分图元剔除与裁剪 2第二部分场景图分层与遮挡剔除 3第三部分材质批量处理与纹理缓存 6第四部分显存管理与纹理压缩 8第五部分GPU并行计算与多线程优化 10第六部分着色器优化与预编译 13第七部分视椎体裁剪与视锥体剔除 15第八部分帧率监测与性能分析 18
第一部分图元剔除与裁剪关键词关键要点【场景图剔除】
1.剔除位于视锥体外部或被其他对象遮挡的场景图元。
2.通过构建层次化的场景图(例如四叉树或八叉树),使用空间分区技术加快剔除过程。
3.使用面向包围盒的剔除技术,例如球体包围盒或轴对齐包围盒,进行快速剔除检查。
【可见性剔除】
图元剔除与裁剪
概述
图元剔除和裁剪是图形引擎优化算法中提高渲染性能的重要技术。图元剔除剔除不可见的图元,而裁剪则裁剪超出视锥体范围的图元,从而减少需要渲染的图元数量,提高渲染效率。
图元剔除
图元剔除算法的目标是剔除不可见的图元,避免对它们进行不必要的渲染。主要有以下几种图元剔除算法:
*后向剔除:仅渲染法线朝向摄像机的图元。
*深度剔除:利用深度缓冲区剔除位于摄像机后面的图元。
*边界盒剔除:通过比较边界盒与视锥体,剔除完全位于视锥体之外的图元。
*遮挡剔除:利用遮挡地图剔除被其他不透明图元遮挡的图元。
*高级剔除:使用更复杂的技术,如体积分级剔除和视锥体裁剪剔除。
裁剪
视锥体裁剪用于裁剪超出视锥体范围的图元,包括:
*点裁剪:剔除位于视锥体之外的点。
*线段裁剪:剔除完全或部分位于视锥体之外的线段。
*三角形裁剪:剔除完全或部分位于视锥体之外的三角形。
常用的裁剪算法包括:
*Cohen-Sutherland算法:一种逐顶点裁剪算法。
*Liang-Barsky算法:一种参数化裁剪算法,更有效率。
*Sutherland-Hodgman算法:一种多边形裁剪算法。
组合使用
图元剔除和裁剪算法通常组合使用,以最大限度地减少需要渲染的图元数量。例如,可以使用后向剔除和深度剔除剔除大多数不可见的图元,然后使用视锥体裁剪进一步剔除超出视锥体范围的图元。
优化
为了优化图元剔除和裁剪算法的性能,可以考虑以下策略:
*层次式剔除:使用多层边界盒,以更快的速度剔除更多图元。
*增量裁剪:仅裁剪与视锥体相交的图元部分,以避免不必要的裁剪计算。
*并行化:利用多核处理器并行执行剔除和裁剪任务。
通过应用这些优化策略,可以显著提高图形引擎的渲染性能,从而提供更流畅、更身临其境的游戏体验。第二部分场景图分层与遮挡剔除关键词关键要点【场景图分层】:
1.通过将场景图划分为多个层次结构,可以有效减少绘制调用次数,提升渲染效率。
2.分层时应遵循空间关系和遮挡关系,将相互靠近或遮挡的元素置于同一层。
3.合理的层次结构可以避免不必要的绘制操作,例如对隐藏在其他元素背后的元素进行绘制。
【遮挡剔除】:
场景图分层与遮挡剔除
#场景图分层
场景图分层是一种将场景中的对象分组并将这些组组织成层次结构的技术。这种分层允许对场景进行有效管理和渲染,特别是在复杂场景中。
分层可以基于各种标准进行,例如:
*空间层次:将对象组织成空间层级,例如房间、建筑物或城市。
*功能层次:将对象组织成执行特定功能的组,例如角色、环境或用户界面元素。
*可见性层次:将对象组织成仅在特定条件下才可见的组,例如视口位置、LOD(细节级别)或遮挡剔除。
通过分层,可以将渲染过程限制在当前可见的组或层上,从而提高性能。
#遮挡剔除
遮挡剔除是一种技术,它可以剔除无法被看到的对象,从而进一步提高渲染性能。遮挡剔除算法可以根据各种空间数据结构实现,例如四叉树或八叉树。
这些数据结构将场景划分为一系列网格或节点,并对每个节点进行测试以确定是否被其他对象遮挡。被遮挡的节点和其中包含的对象将从渲染队列中剔除。
有几种遮挡剔除算法,每种算法都有自己的优点和缺点:
*可视性排序:将对象按照其在特定视点上的可见性顺序进行排序,然后从远到近渲染它们。
*盒子体积层次(BVH):使用一系列嵌套的包围盒来快速剔除不可见的物体。
*视锥体裁剪:使用视锥体来剔除位于视锥体外的物体。
*体积层次:使用一系列嵌套的体积网格来快速剔除不可见的物体。
#应用
场景图分层和遮挡剔除算法广泛应用于实时图形引擎,包括:
*视频游戏
*虚拟现实和增强现实
*3D可视化和动画
这些算法通过减少要渲染的对象数量,显着提高了渲染性能,从而实现了流畅且视觉上令人惊叹的图形体验。
#数据
以下是有关场景图分层和遮挡剔除的一些数据点:
*在复杂场景中,场景图分层可以提高渲染性能高达50%。
*遮挡剔除算法可以进一步提高渲染性能,最高可达80%。
*BVH(盒子体积层次)是实时图形引擎中使用最广泛的遮挡剔除算法。
#结论
场景图分层和遮挡剔除是优化图形引擎渲染性能的两项重要技术。通过将对象组织成分层结构并剔除不可见的物体,这些算法可以显着减少要渲染的对象数量,从而提高帧率并改善整体图形体验。第三部分材质批量处理与纹理缓存关键词关键要点【材质批量处理】:
1.材质合并与排序:将相似或相近的材质合并为一个,并按渲染顺序进行排序,减少着色器状态切换次数。
2.材质属性优化:剔除不必要的材质属性或使用纹理查找表压缩材质数据,降低内存消耗和带宽占用。
3.材质实例化:针对具有相似材质属性的对象,使用实例化机制绘制,减少绘制调用次数。
【纹理缓存】:
材质批量处理
材质批量处理是将多个材质同时编译和处理的优化技术,可以有效减少GPU的绘制调用次数,从而提高渲染效率。Qt图形引擎使用硬件着色器程序来处理材质,这些程序需要在运行时编译。材质批量处理通过预编译和缓存着色器程序,避免了每个绘制调用需要重新编译的开销。
纹理缓存
纹理缓存是一种缓存纹理数据的技术,可以减少纹理加载的开销。当纹理第一次被加载到GPU时,它会被存储在纹理缓存中。当后续需要该纹理时,引擎会直接从缓存中读取,而不是从磁盘或网络重新加载。
Qt图形引擎中的材质批量处理与纹理缓存
Qt图形引擎提供了一种称为材质系统的机制来管理和处理材质。材质系统负责材质的编译、打包和缓存。它使用以下技术来实现材质批量处理和纹理缓存:
1.材质批量处理
*着色器缓存:材质系统会缓存已编译的着色器程序,以避免在每次绘制调用时重新编译。
*着色器打包:材质系统将多个材质的着色器程序打包到一个单一的着色器程序对象中,以减少绘制调用的数量。
2.纹理缓存
*纹理对象缓存:材质系统会缓存纹理对象,以避免在每次纹理需要时重新加载纹理数据。
*纹理数据缓存:材质系统会缓存纹理数据,以进一步减少纹理加载的开销。
优点
材质批量处理和纹理缓存提供了以下优点:
*减少绘制调用次数:通过预编译着色器程序和将多个材质的着色器程序打包到一个单一的着色器程序对象中,材质批量处理可以减少绘制调用的数量。
*减少纹理加载开销:纹理缓存可以避免在每次需要纹理时重新加载纹理数据,从而减少纹理加载的开销。
*提高渲染效率:通过减少绘制调用次数和纹理加载开销,材质批量处理和纹理缓存可以提高渲染效率。
数据
以下数据展示了材质批量处理和纹理缓存对Qt图形引擎性能的影响:
*一款基于Qt图形引擎的3D游戏,在启用材质批量处理和纹理缓存后,绘制调用的数量减少了30%。
*在同一款游戏中,纹理加载开销减少了20%。
*这些优化导致游戏性能提升了15%。
结论
材质批量处理和纹理缓存是Qt图形引擎中关键的优化技术,可以通过减少绘制调用次数和纹理加载开销来提高渲染效率。这些技术对于开发高性能3D应用程序非常重要。第四部分显存管理与纹理压缩关键词关键要点显存管理
1.纹理流送(TextureStreaming):将纹理按需加载到显存,仅在需要时才加载当前视野内所需的纹理部分,减少显存占用。
2.纹理分页(TexturePaging):将大纹理按小块存储,仅加载当前视野内需要的纹理块,节省显存空间。
3.显存池化(TexturePooling):将多张小纹理合并成一张大纹理(纹理图集),减少纹理切换开销和显存碎片化。
纹理压缩
显存管理
显存管理对于图形渲染尤为关键,它涉及在显卡上的有限显存中高效存储和管理图形数据。
1.纹理管理
纹理是图像或数据,用于覆盖几何图形或作为材质。优化纹理管理可以减少显存的使用和提高性能。
*纹理分页:将纹理分成较小的块(分页),仅在需要时加载和卸载这些块。
*纹理优先级:为纹理分配优先级,优先加载和渲染对性能至关重要的纹理。
*纹理复用:使用相同的纹理在不同的对象上,从而减少纹理加载和存储。
2.几何数据管理
几何数据是指组成场景中对象的顶点、索引和法线。优化几何数据管理可以降低显存占用和渲染时间。
*顶点缓冲对象(VBO):将几何数据存储在GPU的专用缓冲区中,从而减少CPU和GPU之间的数据传输。
*索引缓冲对象(IBO):使用索引来表示顶点,从而减少存储空间和提高渲染效率。
*流式几何:逐帧将几何数据传输到GPU,而不是一次性加载所有数据。
纹理压缩
纹理压缩是将纹理数据转换为更小尺寸的技术,从而减少显存占用和提高加载速度。
1.有损压缩
有损压缩牺牲一定程度的纹理质量来实现更小的尺寸。
*S3TC:由ATI开发,是一种常用的DXTC压缩格式,提供良好的压缩率和质量平衡。
*ETC:一种开源的压缩格式,专为移动设备优化,提供较小的尺寸和合理的质量。
2.无损压缩
无损压缩在不损失质量的情况下减小纹理尺寸。
*PVRTC:由Imagination开发,是一种流行的无损压缩格式,适用于移动设备和嵌入式系统。
*ASTC:Khronos组开发的一种较新的无损压缩格式,提供比PVRTC更高的压缩率和质量。
选择纹理压缩格式
选择最合适的纹理压缩格式取决于具体要求,包括:
*目标平台:不同的平台支持不同的压缩格式。
*纹理大小和复杂性:较大的纹理和复杂的纹理需要更高的压缩率。
*质量要求:某些应用程序需要高质量的纹理,而另一些则可以牺牲质量来提高性能。
*压缩速度:纹理压缩是耗时的,因此对于实时应用程序,这一点很重要。第五部分GPU并行计算与多线程优化关键词关键要点GPU并行计算
1.GPU并行计算利用图形处理单元(GPU)大量并行计算核心的优势,大幅提升图形处理、仿真和机器学习等计算密集型任务的性能。
2.CUDA和OpenCL等编程模型提供了与GPU交互的接口,允许开发者编写并行内核代码,充分利用GPU的计算能力。
3.GPU并行计算优化涉及任务并行化、数据并行化和内核优化等方面,以最大化GPU利用率和减少通信开销。
多线程优化
1.多线程优化通过利用计算机的多核CPU,同时执行多个线程,提升程序并发性和响应速度。
2.Qt的多线程机制基于原生C++标准线程库,提供跨平台、简便易用的线程创建、同步和通信机制。
3.多线程优化策略包括任务拆分、同步机制和线程池使用等,需要考虑线程调度、共享资源争用和数据一致性等问题。GPU并行计算与多线程优化
GPU并行计算
图形处理单元(GPU)采用单指令多数据(SIMD)架构,允许对大量数据并行执行相同的操作。在Qt图形引擎中,GPU并行计算用于加速像素着色、顶点处理和几何转换等图形操作。
通过将计算任务分配给GPU并利用其并行处理能力,Qt图形引擎可以显着提高图形处理速度和响应能力。
多线程优化
多线程优化涉及使用多个线程同时执行任务,以充分利用多核CPU。Qt图形引擎利用多线程来并行执行耗时的任务,例如纹理加载、几何生成和物理模拟。
通过将任务分解成较小的部分并分配给不同的线程,多线程优化可以减少总执行时间并提高整体性能。
Qt图形引擎中并行计算与多线程优化的具体实现
1.像素着色器并行化:使用GPU的SIMD架构,将像素着色器操作并行化,允许同时处理多个像素。
2.顶点处理并行化:将顶点处理任务分配给GPU的多个流处理器,并行计算顶点的位置、法线和纹理坐标。
3.纹理加载多线程化:使用多个线程同时加载纹理,减少加载时间并提高图形渲染速度。
4.几何生成多线程化:将几何生成任务分解成较小的部分,并分配给不同的线程处理,加速模型生成和场景加载。
5.物理模拟多线程化:使用多线程并行执行物理模拟任务,例如碰撞检测、刚体动力学和流体仿真。
优化技术
工作窃取:允许空闲的线程从繁忙的线程窃取任务,提高线程利用率和整体性能。
任务管道:将任务分成阶段,并使用流水线方式在多个线程之间传递,减少任务切换开销并提高吞吐量。
原子操作:使用原子操作协调多线程之间的对共享数据的访问,确保数据一致性和正确性。
锁粒度优化:仔细设计锁机制,仅在必要时对共享数据进行锁定,以最小化锁竞争并提高并发性。
性能监测和分析
Qt图形引擎提供性能监测和分析工具,用于识别并消除瓶颈。这些工具可以帮助开发者深入了解应用程序的执行情况,并针对特定部分进行优化。
评估优化效果
通过实施这些并行计算和多线程优化,Qt图形引擎可以显着提高图形处理速度、减少延迟并改善整体应用程序性能。具体性能提升幅度取决于应用程序的特性、硬件配置和代码质量。第六部分着色器优化与预编译着色器优化与预编译
着色器是OpenGL和Vulkan等图形API的重要组成部分,它们定义了如何将顶点数据转换为片段,并最终呈现在屏幕上。优化着色器对于提高图形应用程序的性能至关重要。Qt提供了几种机制来优化和预编译着色器,以提高应用程序的性能和加载时间。
着色器优化
Qt提供以下着色器优化技术:
*预转换:Qt在编译着色器时将着色器代码从GLSL转换为平台特定的着色器语言(例如SPIR-V)。预转换降低了着色器编译的开销,尤其是在首次运行应用程序时。
*循环展开:Qt将循环展开到循环体中,以消除循环开销并提高性能。
*常量折叠:Qt在编译时折叠常量表达式,以消除不必要的计算。
*死代码消除:Qt识别并删除不使用的着色器代码,以减少计算量。
*指令选择:Qt选择最适合目标平台的指令,以提高性能。
着色器预编译
Qt还提供了着色器预编译功能,该功能允许在应用程序运行时提前编译着色器。这消除了着色器编译的开销,尤其是在应用程序启动时。Qt提供两种类型的着色器预编译:
*编译时预编译:此选项在编译应用程序时预编译着色器。预编译的着色器存储在应用程序二进制文件中。
*运行时预编译:此选项在首次运行应用程序时预编译着色器。预编译的着色器存储在应用程序的缓存中。
选择合适的优化和预编译选项
选择合适的着色器优化和预编译选项取决于应用程序的需求:
*如果应用程序需要频繁地重新编译着色器,则预编译时预编译是更好的选择,因为它消除了每次编译的开销。
*如果应用程序很少重新编译着色器,则运行时预编译是更好的选择,因为它延迟了预编译的开销,从而缩短了应用程序的启动时间。
*在性能至关重要的应用程序中,建议启用着色器优化以获得最佳性能。
*为了在性能和启动时间之间取得平衡,可以仅启用部分着色器优化。
示例代码
以下代码示例展示了如何在Qt中启用着色器优化和预编译:
```cpp
QOpenGLShaderProgramprogram;
program.addShaderFromSourceFile(QOpenGLShader::Vertex,"vertex.glsl");
program.addShaderFromSourceFile(QOpenGLShader::Fragment,"fragment.glsl");
//启用着色器优化
program.setOptimizationFlags(QOpenGLShaderProgram::CompileTimeOptimization);
//启用预编译
program.setPrecompiledShaderCacheKey("myapp-shaders");
```
结论
着色器优化和预编译是提高Qt图形应用程序性能的重要技术。Qt提供了各种选项来优化和预编译着色器,允许开发人员在性能和启动时间之间进行权衡。通过选择合适的优化和预编译选项,开发人员可以创建高性能、响应迅速的图形应用程序。第七部分视椎体裁剪与视锥体剔除关键词关键要点视椎体裁剪
1.视椎体裁剪是一种将位于视锥体外部的对象剔除渲染过程的算法。通过确定对象是否在视锥体边界内,可以显著减少需要渲染的几何体数量,从而提高性能。
2.视椎体裁剪通常在渲染管线的开始阶段执行,以便及早剔除不需要的几何体。通过应用裁剪规则,顶点可以被修剪或移除,从而减少后续处理阶段的开销。
3.视椎体裁剪的效率取决于所使用的裁剪算法。常用的算法包括Cohen-Sutherland裁剪算法和Sutherland-Hodgman裁剪算法。这些算法通过将对象与视锥体进行比较来确定哪些对象需要渲染。
视锥体剔除
视椎体裁剪与视椎体剔除
视椎体裁剪
视椎体裁剪是在光栅化流水线中应用的早期剔除技术,用于剔除位于视椎体(视点定义的锥形体积)之外的几何体。
视椎体裁剪算法基于科恩-萨瑟兰德裁剪算法,该算法将几何体与视椎体边界平面相交。如果几何体完全位于视椎体之外,则将其剔除。如果几何体与至少一个边界平面相交,则将其裁剪成与视椎体相交的部分。
视椎体裁剪算法有以下优点:
*剔除大量位于视椎体之外的几何体,显著提高光栅化效率。
*相对于其他剔除算法,对GPU的处理能力要求较低。
视椎体剔除
视椎体剔除是一种几何体剔除技术,用于确定几何体是否完全或部分位于视椎体中。与视椎体裁剪不同,视椎体剔除不会裁剪几何体,而是将其完全保留或剔除。
视椎体剔除算法通常使用边界框分层”(BoundingVolumeHierarchy,BVH)数据结构。BVH将几何体层次化组织为一组嵌套的边界框。从根节点开始,算法递归地遍历BVH树,并根据边界框与视椎体的相交情况来剔除或保留几何体。
视椎体剔除算法有以下优点:
*能够对任意大小和形状的几何体进行剔除。
*与视椎体裁剪相比,通常能剔除更多的几何体。
*适用于各种图形应用程序,特别是涉及大量几何体或复杂场景的情况。
算法细节
视椎体裁剪算法
科恩-萨瑟兰德裁剪算法是视椎体裁剪的常见方法。该算法将几何体表示为一系列线段或多边形,并与视椎体的六个边界平面(近平面、远平面、左平面、右平面、上平面、下平面)逐一相交。
算法使用外代码(outcode)来表示线段或多边形相对于边界平面的位置。如果外代码为零,则线段或多边形完全位于视椎体内。如果外代码为非零,则线段或多边形位于视椎体外,或者与边界平面相交。
算法的步骤如下:
1.初始化线段或多边形的初始外代码。
2.对于每个边界平面,计算线段或多边形的更新外代码。
3.如果更新的外代码为零,则线段或多边形与视椎体相交,保留。
4.如果更新的外代码为非零,并且与初始外代码相同,则线段或多边形完全位于视椎体外,剔除。
5.如果更新的外代码为非零,并且与初始外代码不同,则使用点和线段插值技术裁剪线段或多边形。
视椎体剔除算法
BVH视椎体剔除算法的步骤如下:
1.构建场景的BVH树。
2.对于每个视椎体,从BVH树的根节点开始递归遍历。
3.对于每个节点,检查其边界框与视椎体的相交情况。
4.如果边界框完全位于视椎体之外,则剔除节点和其所有子节点。
5.如果边界框完全位于视椎体内,则保留节点和其所有子节点。
6.如果边界框与视椎体相交,则递归地遍历节点的子节点。
比较
视椎体裁剪和视椎体剔除都是几何体剔除的有效技术,但它们适用于不同的情况:
*视椎体裁剪更适合于处理大量小几何体的情况,因为它不需要构建BVH树。
*视椎体剔除更适合于处理复杂场景或包含大量大几何体的场景,因为它能够剔除视椎体裁剪无法剔除的几何体。
在实践中,通常将视椎体裁剪和视椎体剔除结合使用,以最大限度地提高剔除效率。例如,可以先使用视椎体裁剪剔除大量位于视椎体之外的几何体,然后再使用视椎体剔除剔除剩余的复杂几何体。第八部分帧率监测与性能分析关键词关键要点帧频监控
*实时测量和分析应用程序中每一帧渲染所需的时间。
*识别导致帧率下降的瓶颈,例如图形密集型操作或资源不足。
*提供帧率历史数据,帮助开发人员跟踪应用程序的性能随着时间的变化。
性能剖析
*分析应用程序的执行路径,确定消耗大量时间的函数或代码段。
*生成性能报告,突出显示应用程序中最耗时的部分。
*允许开发人员优化代码并消除性能瓶颈,从而提高应用程序的整体性能。
GPU资源监控
*实时监控显卡的使用情况,包括内存、带宽和处理能力。
*识别GPU资源瓶颈,例如过度绘制或纹理消耗过多。
*提供有关GPU利用率的统计数据,帮助开发人员优化图形渲染策略。
着色器优化
*分析着色器代码的执行效率,识别低效或冗余的代码。
*提供着色器优化建议,例如合并uniform、简化计算,从而减少GPU处理时间。
*允许开发人员手动优化着色器代码,以最大程度地提高图形性能。
纹理优化
*分析应用程序中的纹理使用,确定冗余或未充分利用的纹理。
*提供纹理优化建议,例如纹理压缩、纹理集并和MIP贴图,以减少内存使用和带宽需求。
*帮助开发人员优化纹理使用,从而提高图形渲染效率。
性能配置文件
*创建和加
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大理白族自治州洱源县2025-2026学年第二学期四年级语文第八单元测试卷(部编版含答案)
- 恩施土家族苗族自治州咸丰县2025-2026学年第二学期四年级语文期末考试卷(部编版含答案)
- 2026初中生动保护法普及课件
- 2026年河南教师职称考试试题及答案
- 2.4.1 车载视觉功能的观察与识别
- 2026年鲁山辅警改革考试试题及答案
- 中小学数学教育中几何公理应用指南
- 营销推广合作协商函(8篇)
- 2026初中数字素养第一课课件
- 企业战略执行力承诺书范文3篇
- 体会说明语言-2024年中考语文阅读点拨及进阶训练(原卷版)
- HYT 0287-2020 海洋环境监测浮标运行维护管理技术指南(正式版)
- 【《大班幼儿合作行为的现状及培育策略探析》8900字(论文)】
- 营销的第三种范式|小红书种草方法论
- 电动叉车安全培训课件
- 浙江省杭州北斗联盟2023-2024学年高一上学期期中联考英语试题
- 眼科质控手册
- 《电力设备典型消防规程》考试复习题库(含答案)
- 加热炉推料结构设计论文(1)-学位论文
- 英语人教新目标七年级下册My favorite animals
- CB/T 615-1995船底吸入格栅
评论
0/150
提交评论