使用 Three.js 在片段着色器中手动选择 mipmap 的 lod

2024-04-04

我正在使用 Three.js 中的 glsl es 编写一个基于物理的着色器。为了添加镜面全局照明,我使用内部带有 mipmap 链的立方体贴图 dds 纹理(按照 CubeMapGen 的说明进行预先计算here http://seblagarde.wordpress.com/2012/06/10/amd-cubemapgen-for-physically-based-rendering/)。我需要在片段着色器中访问此纹理,并且我想手动选择 mipmap 的索引。执行此操作的正确函数是

vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod)

但它仅在顶点着色器中可用。在我的片段着色器中我使用类似的函数

vec4 textureCube(samplerCube sampler, vec3 coord, float bias)

但效果不佳,因为偏差参数只是添加到自动计算的细节级别中。因此,当我放大或缩小场景时,mipmap 的 LOD 会发生变化,但对于我的着色器来说,它必须是相同的(它必须仅取决于粗略参数,如上面的链接中所述)。

我想手动选择片段着色器中的 mipmap 级别仅取决于材质的粗糙度(例如使用公式mipMapIndex = roughness*numMipMap),所以它必须与距离一致,并且在缩放时不会自动改变。我该如何解决这个问题?


它不能与 webGL atm 一起使用,因为不支持此功能。尽管您可以使用最新版本的 chrome canary 来尝试textureLOD 扩展,但它仍然需要一些调整。去查看标志并寻找这个:

启用 WebGL 草稿扩展

WebGL 纹理立方体偏差导致接缝 https://stackoverflow.com/questions/22977236/webgl-texturecube-bias-causing-seams

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Three.js 在片段着色器中手动选择 mipmap 的 lod 的相关文章

  • 在 Three.js 中获取 Object3D 的大小

    我的场景中有这个 3D 对象 var icon new THREE Object3D var iconTexture THREE ImageUtils loadTexture images icon png iconMaterial new
  • 三.JS Shadow 到对象

    我想添加castShadow and receiveShadow在一个物体上 但是下面的代码有什么问题吗 var mtlLoader new THREE MTLLoader mtlLoader setPath objects Tree mt
  • THREE.JS,忽略父级的轮换

    我试图使子对象跟随父级位置并表现得像一个普通的子对象 但是我希望它保持其旋转不变 在不影响性能的情况下 最好的方法是什么 我的CPU预算很紧张 已经运行了2个工作线程并且有很多对象 是否有设置只允许孩子的位置受到影响 同样重要的是 当父级旋
  • 解决 Three.js / webGL 中的 gl_PointSize 限制

    我正在使用 Three js 创建交互式数据可视化 此可视化涉及渲染 68000 个节点 其中每个不同的节点具有不同的大小和颜色 最初我尝试通过渲染网格来实现此目的 但事实证明这非常昂贵 我当前的尝试是使用 Three js 粒子系统 每个
  • Three.js canvas.toDataURL 有时为空

    我正在尝试使用 html2canvas js 渲染 THREE js 场景 一些覆盖的 HTML 元素 有用大多数时候 但并非一直如此 在失败的情况下 将渲染 HTML 元素 背景 覆盖层等 但不会渲染其他元素 THREE js 场景表现得
  • 三-mtl-loader 错误:THREE.MeshPhongMaterial:.shading 已被删除 -> 对象不可见

    昨天我问了这个问题 未捕获的类型错误 THREE MTLLoader 不是构造函数 2 0 https stackoverflow com questions 47741644 uncaught typeerror three mtlloa
  • 如何获取特定 GLSurfaceView 的 EGL 显示/上下文

    这是后续我原来的问题 https stackoverflow com questions 6509588 egl vs gles 2 0 on android e g java 这可能太宽泛 而这个可能太具体 但也许我可以应用牛顿法 我的具
  • 如何在 Three.js 中进入全屏?

    我已经尝试了数十种不同的方法几个小时 但没有一个有效 如下所示 document body addEventListener keydown function THREEx FullScreen request false 如何让Three
  • 如何在 Three.js 中重新调整三角形面的方向

    用更好的例子进行编辑 我使用 Three js 来显示 MRI 胃图像的外壳 外壳是从 vtk 格式的外部文件加载的 这是一个演示 http www menne biomed de uni 3d alphahull html http ww
  • 三.js如何通过id(name)获取场景

    我创造了一个场景 如何通过 id name 获取它 喜欢jquery test In three js医生 我刚刚找到scene getObjectById 获取子对象 有一个getObjectByName方法用于此这里在Object3D
  • opengl 覆盖在相机视图上

    我仍然没有找到在相机预览顶部显示 opengl 叠加层的正确方法 有一个 hack 你可以调用 setContentView GLSurfaceView addContentView MyCameraSurfaceView 但它无法正常工作
  • OrbitControls 和 dat.gui 文本不起作用

    我正在使用 Three js 和 dat gui 以及text财产 另外 我的场景中有 OrbitControls cameraControl new THREE OrbitControls camera cameraControl upd
  • OpenGL ES 2.0 中的透明对象

    所以我一直在 Android 上使用 OpenGL ES 2 0 但现在遇到了一个我无法解决的问题 提前道歉 看来我还不能发布两个以上的链接 所以我把我的三张图片放在 Photobucket 相册中 我正在尝试创建一个由透明区域 彩色玻璃
  • 丢弃对 OpenGL 中的程序性能有影响吗?

    我正在读书this http code google com p gdc2011 android opengl wiki TalkTranscript文章 作者写道 以下是如何通过两个简单的步骤在每个平台上编写高性能应用程序 遵循最佳实践
  • 计算顶点法线

    我正在使用 3d 修改器https github com foo123 MOD3 https github com foo123 MOD3弯曲一个立方体 几何体更新 顶点位置更改 后 灯光不会更新 立方体仍然着色 就好像没有任何变化一样 所
  • 创建并使用我自己的纹理图集的 mipmap

    我目前正在使用自动 mipmap 生成 C OpenTK GL GenerateMipmap GenerateMipmapTarget Texture2D 我使用的纹理平铺为 16px 的块 所以我的问题是 是否可以使用不会缩小至 1x1
  • Three.js - 重叠层闪烁

    当多个物体重叠在同一平面上时 它们开始闪烁 如何告诉渲染器将其中一个对象放在前面 我尝试使用 renderDepth 但它只能部分起作用 请参阅此处的示例 http liveweave com ahTdFQ http liveweave c
  • 是否可以将立方体环境贴图绕 Y 轴旋转 180 度?

    我想旋转立方体贴图Y轴旋转 180 度 scene new THREE Scene scene background new THREE CubeTextureLoader setPath path to my docs load posX
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • Three.js - 如何使用姿势估计数据为 3D 模型制作动画

    我正在尝试使用姿势估计坐标来对 Three js 中的装配模型进行动画处理 我正在使用的姿势估计技术提供了视频源中人物的实时 x y z 坐标 我正在尝试使用这些坐标相应地移动 3D 模型 我使用下面的代码 其中一些代码是我在相关问题的答案

随机推荐