问题标签 [texturing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
593 浏览

scenekit - 如何在 SceneKit 中有效地映射高分辨率 SKScene?

可能相关: 使用高分辨率纹理优化 SceneKit 性能

我正在将 a 映射SKScene到棋盘几何以创建棋盘游戏。场景需要相对较大(2048x1024),这样我才能放大动作并保留漂亮的细节。现在,为了解决这个常见问题,我已经知道了两种方法:

  • 缩小时使用较低分辨率的纹理(即 mipmapping) - 这不是问题,SceneKit对我有用。
  • 平铺场景以获得特写,并且仅显示屏幕上的那些平铺。

现在第二点让我思考。如何平铺 SKScene 并将它们映射到几何体上的不同位置?还有另一种方法可以使这项工作吗?


截图

这是几何: 没有纹理的简单几何图形。

这是以静态图像 (2048x1024) 作为纹理的几何图形: 具有图像纹理的几何图形。

这是以SKScene(2048x1024) 作为纹理的几何图形: 在此处输入图像描述

该场景不包含任何物理实体,只有大约 40 个SKSpriteNodes什么都不做。我需要它能够更改区域的颜色,也许添加一些额外的叠加层等。有没有办法SceneKit完全做到这一点?也许为每个领域创建一个几何图形?


已实施的答案

我现在尝试使用SceneKitonly 来实现相同的场景。每个区域都是一个四边形,使用包含预渲染边界的纹理。不同的混合模式有助于衬托纸张纹理。不幸的是,性能影响大致相同 - 我的结论是,它SpriteKit毕竟不是占用资源,而是节点数与高分辨率纹理相结合(遗憾的是,如果你不使用路径,则需要保持边界清晰) .

仅使用 SceneKit 的解决方案

0 投票
0 回答
636 浏览

qt - QQuickFramebufferObject:当使用一个Item,其父项有“visible: false”作为纹理源时,什么都不显示

这在 Canvas3D 中可以正常工作,但在 QQuickFramebufferObject 中不行。

我的代码

我的测试用例基于与 Qt 捆绑的 textureinsgnode 示例应用程序。由于我的作品是衍生作品,我必须先在此处发布许可条款:

现在是实际来源。

主.cpp

main.qml

如果取消注释visible: falsein main.qml,QQFBO 将停止显示任何内容。为什么会这样,什么是适当的解决方案?

我试过设置opacity: 0而不是,visible: false但这会导致同样的问题。

我尝试用 替换layer: true一个单独的ShaderEffectSource元素hideSource: true,但是我必须在visible: false上设置ShaderEffectSource,这会导致同样的问题。

我也尝试过设置x: -10000; y: -10000而不是,visible: false它工作正常,但它是一个黑客。

0 投票
1 回答
225 浏览

android - 如何使用 Tango3DR_updateTexture?

我正在尝试制作 3DR 纹理,但它始终只使用纹理中的顶点颜色。

在每一帧上,我都将帧存储为 PNG:


在 Save 方法中,我正在尝试处理纹理:

1)我从上下文中提取全网格

2) 使用提取的网格创建纹理上下文

3)使用我之前存储的数据调用 Tango3DR_updateTexture(这不起作用)

4)纹理网格

5)将其保存为OBJ(在结果纹理中只有来自顶点颜色的数据,为什么?)

所有方法都返回 TANGO_3DR_SUCCESS。

完整代码在这里:https ://github.com/lvonasek/tango

0 投票
2 回答
1148 浏览

three.js - 如何在框架中的一个模型上应用多个纹理

a 在 maya/blender 中有一个模型,它有多个 UV。

我认为 .mtl 包含有关材料/纹理的所有信息(我可以在 .mtl 中看到链接),但显然我必须将每个纹理链接到一个对象 @ src="texture.jpg"。

除了在 photoshop/gimp 中组合这些纹理,或者将我的模型分解为具有自己纹理的单独 .obj 之外,还有其他方法吗?

我应该更多地研究 aframe/three.js @ registerShader 中的自定义着色选项吗?

0 投票
1 回答
79 浏览

c# - 通过 VBO 绘制时在 Tao.OpenGL 中的纹理

我正在制作一个使用 VBO 缓冲区来绘制模型的应用程序,而不是gl.Vertex。我要绘制的平行六面体已正确绘制,但纹理却没有。经过一个小时的搜索,我发现我还需要添加法线和顶点。但我怎样才能得到它们?

我的变量:

我加载缓冲区的方法:

我的模型绘制方法:

最后,结果:

0 投票
1 回答
750 浏览

c - 在 OpenGL 中使用 glTexGen 对球体进行纹理处理

我想在球体上获得地球纹理。我的球体是一个由许多三角形 (100+) 构建的 icosphere,我发现为整个球体设置 UV 坐标令人困惑。我尝试使用 glTexGen 并且效果非常接近,但我的纹理重复了 8 次(见图)。我找不到一种方法让它只包裹整个对象一次。这是我创建球体和纹理的代码。

在此处输入图像描述

0 投票
1 回答
456 浏览

c++ - 尝试将纹理映射到 GLSL 中的三角形时访问冲突

问题在于当我将要绘制的纹理传递给片段着色器时,它是一个 64x64 RGBA 无符号 8 位纹理。我看过其他人的代码,阅读函数定义。检查错误glGetError(),无论我将它放在程序中的哪个位置,它都会返回 0,直到它在调用后引发访问冲突。glDrawArrays(GL_TRIANGLES, 0, 6);这可能是非常明显的事情,我最近问了一个问题,但我一直在努力自己解决这个问题。所以我希望我不会觉得问这个问题很麻烦。

这是我尝试将纹理加载到内存中的代码

这是我尝试将它传递给着色器的地方

我的片段着色器

完整的 main.cpp

BTH_IMAGE_WIDTH、BTH_IMAGE_HEIGHT 和 BTH_IMAGE_DATA 在 bth_image.h 中定义,下面是它的定义(由于它的大小,不包括 BTH_IMAGE_DATA 的整个定义)

调用 sizeof(BTH_IMAGE_DATA) 给出 16384 ,它的大小与未压缩的 8 位 64x64 RGBA 编码纹理相匹配(它作为大学作业的一部分硬编码,我对此无能为力)

0 投票
1 回答
271 浏览

android - OpenGL ES 2.0 FrameBuffer 返回黑屏

好吧,我制作了一个应用程序,它使用 FBO 渲染到纹理,然后使用此纹理将其显示在四边形上。

这就是我用来初始化 FBO 和纹理的代码:

(1. 中的代码onDrawFrame())

问题是我不知道把代码放在哪里,所以一开始我把代码放在onDrawFrame()方法里。当我这样做时,纹理效果很好,我得到了我想要的结果。但由于我每帧都创建一个新的 FBO 和纹理,一段时间后应用程序开始滞后,最后模拟器崩溃。

(2. 中的代码onSurfaceChanged())

在注意到这种行为后,我决定将代码放入onSurfaceChanged()方法中。这次应用程序没有崩溃,但整个纹理是黑色的。我试图清除纹理或在其上绘制一个白色四边形,但没有任何效果。当我尝试从中获取错误时,GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER)或者GLES20.glGetError()它说一切都很好。

我还尝试将代码放在onDrawFrame()用 if 子句包围的方法中,以便它只执行一次。结果也是黑色纹理。

(3.onDrawFrame()和中的代码onSurfaceChanged())

我尝试的最后一件事是将代码放入这两种方法中。我想减少onDrawFrame()方法中的代码,直到找到使纹理正常工作的代码行。但是当我启动应用程序时,四边形闪烁,从黑色纹理变为正确的纹理。

纹理显示没有问题,因为它使用一种方法。我还尝试在代码中添加深度缓冲区,但结果是一样的。因此,由于我的应用程序中不需要它,因此我将其注释掉。

有没有人可以说一下是怎么回事?如果有人有一个可以运行的应用程序但不知道我的问题是什么,那么如果那个人可以上传该项目会很好,因为我没有找到一个有安卓项目可供下载的教程。

0 投票
1 回答
1605 浏览

unity3d - 展平 3D 对象以创建 2D 纹理贴图的模板

我想为我拥有的 3D 汽车模型创建纹理贴图。我不知道从哪里开始。我想也许我可以将 3D 对象展开为 2D 图像,然后将其用作轮廓来绘制我的纹理。这是可能的,还是有更简单的解决方案?

先感谢您!

0 投票
1 回答
635 浏览

c++ - 使用 glTexCoordPointer() 的问题

我对OpenGL(和 GLSL)相当陌生,我在使用glTexCoordPointer().

我加载了纹理,它正确地渲染在对象上(单个四边形),但我也得到了另一个四边形,它是单一颜色,不是加载纹理的一部分。

数组定义如下:

以及绘图功能的相关摘录:

据我了解glTexCoordPointer(),第一个参数指定每个顶点的元素数,如:

第二个参数是类型,GLfloat

第三个参数是与每个顶点有关的每组元素之间的偏移量,因此在前面所述的两个元素之后为零(我也尝试过2 * sizeof(GLfloat)没有改变)。

第四个参数是指向数据开头的指针,即obj_tex_buf.

四边形正确渲染并且纹理正确绘制在其上,但我得到另一个随机形状从其中心脱落并且纹理不正确,任何想法都会很棒。没有这条线,额外的四边形是不可见的glTexCoordPointer()