- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我最近了解了 mipmapping 的定义,但我不确定如何在 Three.js 中正确使用该技术。
我看了一下这个例子:
http://threejs.org/examples/webgl_materials_texture_manualmipmap.html
我也看到了这个:
http://threejs.org/examples/#webgl_materials_texture_anisotropy
两者似乎都使用mipmapping。第一个例子有这部分代码:
function mipmap( size, color ) {
var imageCanvas = document.createElement( "canvas" ),
context = imageCanvas.getContext( "2d" );
imageCanvas.width = imageCanvas.height = size;
context.fillStyle = "#444";
context.fillRect( 0, 0, size, size );
context.fillStyle = color;
context.fillRect( 0, 0, size / 2, size / 2 );
context.fillRect( size / 2, size / 2, size / 2, size / 2 );
return imageCanvas;
}
var canvas = mipmap( 128, '#f00' );
var textureCanvas1 = new THREE.CanvasTexture( canvas );
textureCanvas1.mipmaps[ 0 ] = canvas;
textureCanvas1.mipmaps[ 1 ] = mipmap( 64, '#0f0' );
textureCanvas1.mipmaps[ 2 ] = mipmap( 32, '#00f' );
textureCanvas1.mipmaps[ 3 ] = mipmap( 16, '#400' );
textureCanvas1.mipmaps[ 4 ] = mipmap( 8, '#040' );
textureCanvas1.mipmaps[ 5 ] = mipmap( 4, '#004' );
textureCanvas1.mipmaps[ 6 ] = mipmap( 2, '#044' );
textureCanvas1.mipmaps[ 7 ] = mipmap( 1, '#404' );
textureCanvas1.repeat.set( 1000, 1000 );
textureCanvas1.wrapS = THREE.RepeatWrapping;
textureCanvas1.wrapT = THREE.RepeatWrapping;
var textureCanvas2 = textureCanvas1.clone();
textureCanvas2.magFilter = THREE.NearestFilter;
textureCanvas2.minFilter = THREE.NearestMipMapNearestFilter;
materialCanvas1 = new THREE.MeshBasicMaterial( { map: textureCanvas1 } );
materialCanvas2 = new THREE.MeshBasicMaterial( { color: 0xffccaa, map: textureCanvas2 } );
var geometry = new THREE.PlaneBufferGeometry( 100, 100 );
var meshCanvas1 = new THREE.Mesh( geometry, materialCanvas1 );
meshCanvas1.rotation.x = -Math.PI / 2;
meshCanvas1.scale.set(1000, 1000, 1000);
var meshCanvas2 = new THREE.Mesh( geometry, materialCanvas2 );
meshCanvas2.rotation.x = -Math.PI / 2;
meshCanvas2.scale.set( 1000, 1000, 1000 );
textureCanvas1.mipmaps[ 1 ] = mipmap( 64, '#0f0' );
var texture = THREE.ImageUtils.loadTexture( 'images/512.png', undefined, function() {
texture.repeat.set( 1, 1 );
texture.mipmaps[ 0 ] = texture.image;
texture.generateMipmaps = true;
texture.needsUpdate = true;
};
最佳答案
映射
Mipmapping 是一种纹理渲染技术,您可以在每个纹理的基础上应用。它的基本要点是,当启用 mipmapping 时,GPU 将使用较小版本的纹理来渲染表面,具体取决于表面与相机的距离。
为了使用 mipmapping,您需要为您的纹理设置一组 mipmap; mipmap 是纹理的较小版本。您可以自己提供这些 mipmap,在过去您可能不得不这样做,但是使用最新的图形 API(OpenGL >= 3.0)可以自动生成它们。 如果您所做的只是将基本纹理贴图应用到球体表面,则不太可能需要生成自己的 mipmap 。
Mipmapping 与您正在纹理化的对象的 3D 形状没有任何关系。无论您是将纹理应用于立方体、球体还是任何其他模型,您作为程序员启用 mipmapping 所需采取的步骤都是相同的。您不需要启用 mipmapping 来渲染纹理,尽管它可能会使您的纹理看起来更漂亮。
这对 Three.js 有何影响
默认情况下,three.js 中的 您不需要做任何事情来为您的纹理生成 mipmap 。引用Texture的three.js文档,有一个 generateMipmaps
属性可控制自动生成mipmap,默认值为true。此功能在渲染器 here 中实现。这意味着获得 mipmapped 纹理所需的最低限度是:
var texture1 = THREE.ImageUtils.loadTexture("surface.png");
// our mipmaps will generate automatically now!
mipmaps
属性,可以手动填充 mipmap 图像,如您提供的示例所示。奇怪的是,一个未记录的功能是如果这个数组不为空,它会禁用自动 mipmap 生成。您可以查看该
here 的来源。
mipmap()
函数在 HTML Canvas 上绘制 2D 纹理。它负责绘制您在地平面上看到的平铺纹理。然后将这些纹理作为 mipmap 加载到
mipmaps
数组中,这样它们就可以通过 Three.js 以 3D 形式呈现。
var canvas = mipmap( 128, '#f00' );
var textureCanvas1 = new THREE.CanvasTexture( canvas );
// manually set up some mipmaps
textureCanvas1.mipmaps[ 0 ] = canvas;
textureCanvas1.mipmaps[ 1 ] = mipmap( 64, '#0f0' );
textureCanvas1.mipmaps[ 2 ] = mipmap( 32, '#00f' );
textureCanvas1.mipmaps[ 3 ] = mipmap( 16, '#400' );
textureCanvas1.mipmaps[ 4 ] = mipmap( 8, '#040' );
textureCanvas1.mipmaps[ 5 ] = mipmap( 4, '#004' );
textureCanvas1.mipmaps[ 6 ] = mipmap( 2, '#044' );
textureCanvas1.mipmaps[ 7 ] = mipmap( 1, '#404' );
mipmaps[0]
)是 128x128,第二个是 64x64,第三个是 32x32,依此类推。颜色(
#0f0
,
#00f
,
#400
等)是导致瓷砖上怪异的彩虹效果的原因。它们用不同的颜色来说明不同 mipmap 的边缘。
var maxAnisotropy = renderer.getMaxAnisotropy();
var texture1 = THREE.ImageUtils.loadTexture( "textures/crate.gif" );
// no need to generate mipmaps here, we get them automatically!
texture1.anisotropy = maxAnisotropy;
texture1.wrapS = texture1.wrapT = THREE.RepeatWrapping;
texture1.repeat.set( 512, 512 );
texture1
)比右边的(
texture2
)更清晰,更不模糊?
关于javascript - 在three.js中Mipmap一个行星?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34040978/
对于 Metal ,如果对主纹理进行 mipmap 处理,是否还需要对多采样纹理进行 mipmap 处理?我阅读了苹果文档,但没有得到任何相关信息。 最佳答案 Mipmapping 适用于您将从中
是否有可能以某种方式为 mipmap 图标制作别名?例如,我们有一个名为 icon_app 的图标,但在我们的库中我们使用了 ic_launcher(应该是这样)。因此,对于可绘制对象,您可以使用 v
我正在制作一个基于 Maximum Mipmap structure 的高度图光线追踪器. 长话短说,我使用“最大过滤器”手动创建了一个带有 mipmap 级别的纹理。在 Debug模式下,程序运行良
我对使用这行代码自动生成的 mipmap 获得的质量不完全满意: glTexParameterf(GL10.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP, GL10.G
我有一个 3D 纹理。每个纹素在 alpha channel 上包含一个透明度值。 我需要以这样一种方式生成我的 mipmap,它始终采用具有最大 alpha 值的纹素值。 换句话说,如果有 4 个纹
原帖: https://computergraphics.stackexchange.com/questions/4793/how-can-i-generate-mipmaps-manually 这是
您现在可能知道,当您使用 IDE 创建 Assets 时,android studio 1.1 在 mipmap-xxx 文件夹而不是 drawable-xxx 文件夹中创建新的图像 Assets 。
我目前正在使用自动 mipmap 生成(C# + OpenTK): GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); 我使用的纹理被平铺成 16px
mipmap 是否仅用于应用程序 luancher 图标,例如,如果我将图像用于按钮,该图像是否也应该转到 mipmap 目录或 drawble 文件夹? 换句话说:mipmap 是否替换了 draw
这个问题在这里已经有了答案: Mipmap drawables for icons (12 个回答) 关闭7年前。 我正在使用 Android Studio 1.1 Preview 1。我注意到,当我
我在我的 Visual Studio 中包含了演示项目。但它在以下陈述中向我展示了错误。我也将图像和过去复制到 mipmap 中。拜托,任何人都可以检查出什么错误并指导我。提前谢谢你。 Bitma
我已经在 Android Studio 上创建了 Android 项目。但是没有放置app图标的mipmap文件夹。 这是否意味着我必须创建 mipmap 文件夹?还是项目设置有问题? 最佳答案 如果
我是 'wpf' 的新手,我遇到了以下问题:在我的项目中,我尝试使用小分辨率 .png 作为模型的纹理。当我在 Blender(我构建立方体的地方)中禁用 mipmapping 时,结果正是我想要的:
我正在尝试更改我的应用程序的图标。我添加了一个新的“Image Asset”,它生成不同的图标大小并将它们放在 mipmaps 文件夹中。 (mipmap-hdpi、mipmap-mdpi、...)。
我已经使用 webgl 做了很多工作,但现在它是第一次使用 dart,我遇到了一个奇怪的错误。我创建一个像这样的默认纹理: GlTexture() { mTexture = gl.crea
同时调用时 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_
同时调用时 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_
mipmap 的唯一真正优势是实时所需的过滤要求较低,因为它已经部分提前完成了吗? 您不能通过线性或各向异性过滤以及更多的处理能力获得相同的结果吗? 最佳答案 不是“一点点”更多的处理能力,而是更多的
我正在向您咨询是否有一个简洁的 numpy 解决方案可以使用双线性过滤来缩小 2D numpy 数组(这是一个图像)的大小? 更具体地说,我的数组的形状为 (width, height, 4)(如 r
我的 mipmapping 工作正常。但出于某种原因,在我应用纹理后,应用程序中的所有其他对象都呈现出纹理的平均颜色。甚至平视显示器。有什么我需要考虑的吗?这是代码: GLuint LoadTextu
我是一名优秀的程序员,十分优秀!