关于HUD编译和客户端测试的问题

06/22108 浏览BUG反馈
您好,这边在使用过程中遇到了如下几个问题
1,玩家反馈在游玩时HUD颠倒
网页测试界面:HUD显示正确
TapTap
taptap客户端:HUD显示错误
显示上下颠倒
TapTap
2,在进行测试中,由于在taptap制造的网页中,HUD实际是显示正确的,但是为了测试需要重新发布游戏才可以在taptap的客户端中打开游戏,经过重新上架后还是出现了问题,感觉流程上可能需要一个能够印证在客户端上运行没问题再发布的手段。

以下是taptap制造AI整理的可能发生的问题报告:

Bug Report: NanoVG 渲染到纹理(RTT)在 Windows 客户端 HUD 水平镜像

概述

使用 nvgSetRenderTarget 将 NanoVG 渲染到 Texture2D(TEXTURE_RENDERTARGET) 后,贴到 3D Plane 上作为 HUD。在 TapTap 制造(Web 预览)中显示正常,但在 Windows TapTap 客户端中 NanoVG 绘制的文字和图形内容被水平镜像翻转。

复现环境

环境结果
TapTap 制造内预览(Web)正常
Windows TapTap 客户端文字水平镜像(HP→Hb, KILL→KIГГ)
多台 Windows 机器均可复现

复现步骤

  1. 创建 Texture2D,设为 TEXTURE_RENDERTARGET
  2. 使用 nvgSetRenderTarget(vg, texture) 切换渲染目标
  3. nvgBeginFrame(vg, w, h, 1.0) + NanoVG 绘制文字/图形 + nvgEndFrame(vg)
  4. 将该纹理贴到 Models/Plane.mdl 上(Techniques/DiffUnlitAlpha.xmlCULL_NONE
  5. Plane 挂在 Camera 子节点,旋转 Quaternion(90, Vector3.RIGHT) 使其面向前方

现象

NanoVG 绘制的内容在 Windows 客户端被水平翻转(U 方向反转):
  • 文字从左到右绘制,但显示为镜像(每个字符本身被翻转)
  • HUD 元素的屏幕位置正确(左上/右上/左下),只是每个面板内容镜像
  • 3D 场景不受影响,只有 NanoVG RTT 内容翻转

关键代码

lua复制
lua
-- 创建渲染纹理 local tex = Texture2D:new() tex:SetSize(480, 100, Graphics:GetRGBAFormat(), TEXTURE_RENDERTARGET) -- 渲染 nvgSetRenderTarget(vg, tex) nvgBeginFrame(vg, 480, 100, 1.0) nvgText(vg, 10, 50, "HP 100/100") -- Windows 客户端显示为镜像文字 nvgEndFrame(vg) -- 贴到 3D Plane local mat = Material:new() mat:SetTechnique(0, cache:GetResource("Technique", "Techniques/DiffUnlitAlpha.xml")) mat:SetTexture(0, tex) mat.cullMode = CULL_NONE local node = cameraNode:CreateChild("HUD") node.rotation = Quaternion(90, Vector3.RIGHT) local model = node:CreateComponent("StaticModel") model:SetModel(cache:GetResource("Model", "Models/Plane.mdl")) model:SetMaterial(mat)

分析

问题疑似出在 nvgSetRenderTarget 的 Windows 原生图形 API(OpenGL/D3D)实现中,FBO 绑定后 NanoVG 的绘制坐标系 U 方向与 Web(WebGL)不一致。
可能的引擎层修复方向
  • nvgSetRenderTarget 内部在 Windows 后端的 viewport/projection 设置需检查 U 方向是否正确
  • 或者在绑定 FBO 后需要根据图形 API 添加内部的 X 方向翻转补偿(类似 WebGL 后端已有的处理)

截图对比

  • 正常(Web 预览):文字 “HP 100/100”、“ENEMY: 1”、“KILL: 0/8” 正确显示
  • 异常(Windows 客户端):文字变为镜像 “Hb 001\001”、“EИEWΛ: 1”、“KIГГ: 8\0”
6
4