问题标签 [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.
scenekit - 如何在 SceneKit 中有效地映射高分辨率 SKScene?
可能相关: 使用高分辨率纹理优化 SceneKit 性能
我正在将 a 映射SKScene
到棋盘几何以创建棋盘游戏。场景需要相对较大(2048x1024),这样我才能放大动作并保留漂亮的细节。现在,为了解决这个常见问题,我已经知道了两种方法:
- 缩小时使用较低分辨率的纹理(即 mipmapping) - 这不是问题,
SceneKit
对我有用。 - 平铺场景以获得特写,并且仅显示屏幕上的那些平铺。
现在第二点让我思考。如何平铺 SKScene 并将它们映射到几何体上的不同位置?还有另一种方法可以使这项工作吗?
截图
这是以静态图像 (2048x1024) 作为纹理的几何图形:
这是以SKScene
(2048x1024) 作为纹理的几何图形:
该场景不包含任何物理实体,只有大约 40 个SKSpriteNodes
什么都不做。我需要它能够更改区域的颜色,也许添加一些额外的叠加层等。有没有办法SceneKit
完全做到这一点?也许为每个领域创建一个几何图形?
已实施的答案
我现在尝试使用SceneKit
only 来实现相同的场景。每个区域都是一个四边形,使用包含预渲染边界的纹理。不同的混合模式有助于衬托纸张纹理。不幸的是,性能影响大致相同 - 我的结论是,它SpriteKit
毕竟不是占用资源,而是节点数与高分辨率纹理相结合(遗憾的是,如果你不使用路径,则需要保持边界清晰) .
qt - QQuickFramebufferObject:当使用一个Item,其父项有“visible: false”作为纹理源时,什么都不显示
这在 Canvas3D 中可以正常工作,但在 QQuickFramebufferObject 中不行。
我的代码
我的测试用例基于与 Qt 捆绑的 textureinsgnode 示例应用程序。由于我的作品是衍生作品,我必须先在此处发布许可条款:
现在是实际来源。
主.cpp:
main.qml:
如果取消注释visible: false
in main.qml
,QQFBO 将停止显示任何内容。为什么会这样,什么是适当的解决方案?
我试过设置opacity: 0
而不是,visible: false
但这会导致同样的问题。
我尝试用 替换layer: true
一个单独的ShaderEffectSource
元素hideSource: true
,但是我必须在visible: false
上设置ShaderEffectSource
,这会导致同样的问题。
我也尝试过设置x: -10000; y: -10000
而不是,visible: false
它工作正常,但它是一个黑客。
android - 如何使用 Tango3DR_updateTexture?
我正在尝试制作 3DR 纹理,但它始终只使用纹理中的顶点颜色。
在每一帧上,我都将帧存储为 PNG:
在 Save 方法中,我正在尝试处理纹理:
1)我从上下文中提取全网格
2) 使用提取的网格创建纹理上下文
3)使用我之前存储的数据调用 Tango3DR_updateTexture(这不起作用)
4)纹理网格
5)将其保存为OBJ(在结果纹理中只有来自顶点颜色的数据,为什么?)
所有方法都返回 TANGO_3DR_SUCCESS。
three.js - 如何在框架中的一个模型上应用多个纹理
a 在 maya/blender 中有一个模型,它有多个 UV。
我认为 .mtl 包含有关材料/纹理的所有信息(我可以在 .mtl 中看到链接),但显然我必须将每个纹理链接到一个对象 @ src="texture.jpg"。
除了在 photoshop/gimp 中组合这些纹理,或者将我的模型分解为具有自己纹理的单独 .obj 之外,还有其他方法吗?
我应该更多地研究 aframe/three.js @ registerShader 中的自定义着色选项吗?
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 编码纹理相匹配(它作为大学作业的一部分硬编码,我对此无能为力)
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()
方法中的代码,直到找到使纹理正常工作的代码行。但是当我启动应用程序时,四边形闪烁,从黑色纹理变为正确的纹理。
纹理显示没有问题,因为它使用一种方法。我还尝试在代码中添加深度缓冲区,但结果是一样的。因此,由于我的应用程序中不需要它,因此我将其注释掉。
有没有人可以说一下是怎么回事?如果有人有一个可以运行的应用程序但不知道我的问题是什么,那么如果那个人可以上传该项目会很好,因为我没有找到一个有安卓项目可供下载的教程。
unity3d - 展平 3D 对象以创建 2D 纹理贴图的模板
我想为我拥有的 3D 汽车模型创建纹理贴图。我不知道从哪里开始。我想也许我可以将 3D 对象展开为 2D 图像,然后将其用作轮廓来绘制我的纹理。这是可能的,还是有更简单的解决方案?
先感谢您!
c++ - 使用 glTexCoordPointer() 的问题
我对OpenGL(和 GLSL)相当陌生,我在使用glTexCoordPointer()
.
我加载了纹理,它正确地渲染在对象上(单个四边形),但我也得到了另一个四边形,它是单一颜色,不是加载纹理的一部分。
数组定义如下:
以及绘图功能的相关摘录:
据我了解glTexCoordPointer()
,第一个参数指定每个顶点的元素数,如:
第二个参数是类型,GLfloat
。
第三个参数是与每个顶点有关的每组元素之间的偏移量,因此在前面所述的两个元素之后为零(我也尝试过2 * sizeof(GLfloat)
没有改变)。
第四个参数是指向数据开头的指针,即obj_tex_buf
.
四边形正确渲染并且纹理正确绘制在其上,但我得到另一个随机形状从其中心脱落并且纹理不正确,任何想法都会很棒。没有这条线,额外的四边形是不可见的glTexCoordPointer()
。