标签: texture-mapping

如何将平面上的3D点转换为UV坐标?

我有一个3d点,定义为[x0, y0, z0].

这一点属于一个平面,由[a, b, c, d].

normal= [a, b, c],和ax + by + cz + d = 0

如何将3d点转换或映射到一对(u,v)坐标?

这一定非常简单,但我无法理解.

c# math 3d texture-mapping plane

7
推荐指数
2
解决办法
6088
查看次数

XCode没有启用纹理图集生成的选项

我正在关注这个苹果文档,但出于某种原因,当我在XCode的Build Settings下搜索"Sprite"时,没有弹出任何内容.我也尝试过搜索"启用纹理图集生成",但没有任何结果.

如果有帮助,我有Xcode 5.0.2.

xcode texture-mapping bitmap-fonts ios sprite-kit

7
推荐指数
1
解决办法
2739
查看次数

在多个网格上的Vulkan纹理渲染

我正在模型的多个网格上渲染不同的纹理,但我没有太多关于这些过程的线索.有人为每个网格建议,创建自己的描述符集并调用vkCmdBindDescriptorSets()和vkCmdDrawIndexed()进行渲染,如下所示:

    // Pipeline with descriptor set layout that matches the shared descriptor sets
vkCmdBindPipeline(...pipelines.mesh...);
...
// Mesh A
vkCmdBindDescriptorSets(...&meshA.descriptorSet... );
vkCmdDrawIndexed(...);
// Mesh B
vkCmdBindDescriptorSets(...&meshB.descriptorSet... );
vkCmdDrawIndexed(...);
Run Code Online (Sandbox Code Playgroud)

然而,上述方法与切碎机样品和vulkan的样品有很大不同,这使得我不知道从哪里开始改变.我非常感谢任何帮助,指导我找到正确的方向.

干杯

texture-mapping texture2d vulkan

7
推荐指数
2
解决办法
2994
查看次数

如何将 2D 图像纹理正确映射到 icosphere

我正在用 C++ 编写一个简单的图形引擎,它应该能够代表地球。地球被建模为一个icosphere,我计划使用每个顶点的法线来映射其纹理。为此,我本质上是尝试从顶点的法线获取垂直和水平坐标(分别为 φ 和 θ)(即纬度和经度)。

以下是实现我的方法的(已编辑的)函数(在生成新顶点时调用)。当参数是法向量时,它应该返回从(0,0)到 的纹理坐标:(1,1)n

glm::vec2 Icosphere::getTexCoord(glm::vec3 n)
{
    float theta = (atan2f(n.x, n.z) / PI) / 2.f + 0.5f;
    float phi = (asinf(-n.y) / (PI / 2.f)) / 2.f + 0.5f;
    return glm::vec2(theta, phi);
}
Run Code Online (Sandbox Code Playgroud)

然而,这正在产生意想不到的结果。通过这个测试图像,我的 icosphere 看起来像这样:

实施例1

实施例2

小白色和红色三角形位于(x,y,z) = (1,0,0)。在第一张图像中,我生成了具有较少三角形面 (320) 的 icosphere,而在后者中,生成了约 82k 个三角形的 icosphere。

我怀疑导致这些纹理“故障”的原因是坐标(0,*)(1,*)不被认为是相邻的。有没有正确的方法来做到这一点?

注意:这些是我的纹理参数:

/* Configure texture parameters: */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl textures texture-mapping

7
推荐指数
1
解决办法
2828
查看次数

像素完美纹理映射与现代OpenGL

在决定尝试在现代OpenGL中编程之后,我已经留下了固定功能管道,我不完全确定获得与之前相同的功能.

我正在尝试使用像素完美尺寸来纹理地图四边形,匹配纹理大小.例如,128x128纹理映射到四倍128x128的大小.

这是我的顶点着色器.


    #version 110
    uniform float xpos;
    uniform float ypos;
    uniform float tw; // texture width in pixels
    uniform float th; // texture height in pixels
    attribute vec4 position;
    varying vec2 texcoord;        
void main()
    {
    mat4 projectionMatrix = mat4( 2.0/600.0, 0.0, 0.0, -1.0,
                                  0.0, 2.0/800.0, 0.0, -1.0,
                                  0.0, 0.0, -1.0, 0.0,
                                  0.0, 0.0, 0.0, 1.0); 

    gl_Position = position * projectionMatrix;
    texcoord = (gl_Position.xy);
    }

这是我的片段着色器:


    #version 110
    uniform float fade_factor;    
    uniform sampler2D textures[1];
    varying vec2 texcoord;

    void main()
    { …
Run Code Online (Sandbox Code Playgroud)

opengl shader glsl texture-mapping

6
推荐指数
1
解决办法
3081
查看次数

大型几何体GL_REPEAT上的OpenGL ES 2.0纹理扭曲

OpenGL ES 2.0在纹理采样方面存在严重的精度问题 - 我见过类似问题的主题,但我还没有看到这个"扭曲的OpenGL ES 2.0纹理"问题的真正解决方案.

这与纹理的图像格式或OpenGL颜色缓冲区无关,似乎是精度错误.我不知道究竟是什么原因导致精度失败 - 它似乎不仅仅是导致这种失真的几何尺寸,因为简单地缩放传递给顶点着色器的顶点位置并不能解决问题.


以下是纹理失真的一些示例:

纹理问题仅限于OpenGL ES 2.0上的小规模几何体,否则纹理采样看起来是正常的,但是颗粒效果会逐渐恶化顶点数据距离XYZ原点(0,0,0)

桌面OpenGL上不会出现这些纹理问题(在Windows XP,Windows 7和Mac OS X下正常工作)

我只看到Android,iPhone或WebGL上出现问题(类似于OpenGL ES 2.0)


所有纹理都是2的幂,但问题仍然存在

  • 缩放顶点数据 - 顶点的XYZ位置的值在以下范围内:-65536到+65536浮点

    • 我意识到这是大的,所以我试图用1024除以顶点位置收缩的几何形状和希望得到更准确的浮点精确度,但这并没有解决或减少纹理失真问题
  • 缩放模型视图或缩放投影矩阵没有帮助

  • 更改纹理过滤选项没有帮助

    • 禁用mipmapping或使用GL_NEAREST/GL_LINEAR不会执行任何操作
    • 启用/禁用各向异性不会做任何事情
    • 即使使用GL_CLAMP,仍会出现条带效应
  • 将传递给顶点着色器的纹理坐标划分,然后将它们乘以片段着色器中的正确值,也不起作用

  • 精密highp sampler2D,highp浮动,highp INT -在片段或顶点着色器没有任何改变(lowp/mediump也不起作用)

我认为这个问题必须在某一点上得到解决 - 看到基于OpenGL ES 2.0的游戏已经能够渲染出大规模,高度详细的几何

iphone rendering texture-mapping distortion opengl-es-2.0

6
推荐指数
1
解决办法
1371
查看次数

Python 中的 UV/纹理映射

我有一个快速问题。我想知道是否可以在 python 中执行 UV/纹理映射。我知道我可能需要导入一两个模块。但我没有太多关于如何在 python 中执行 UV/纹理映射的示例。
如果可能的话有人可以发布一个例子。最终我想要做的是导入在 3D 程序(例如 Blender 或 3D Max)中创建的 3D 模型,然后我需要将数据应用到该 3D 模型的表面。数据将采用矩阵或数组的形式。我知道 UV/纹理贴图可以帮助使这个过程变得更容易,这就是我对此感到好奇的原因。

python 3d texture-mapping uv-mapping

6
推荐指数
0
解决办法
1274
查看次数

最有效的多纹理方式 - iOS,OpenGL ES2,优化

我正在尝试在iOS上找到处理OpenGL ES2中多纹理的最有效方法."高效"我的意思是即使在较旧的iOS设备(iPhone 4及更高版本)上也能实现最快的渲染 - 而且还可以平衡便利性.

我考虑过(并尝试过)几种不同的方法.但是遇到了一些问题和疑问.

方法1 - 我的碱基值和正常值是rgb,没有ALPHA.对于这些物体,我不需要透明度.我的发射和镜面反射信息都只是一个通道.为了减少texture2D()调用,我认为我可以将发射存储为基础的alpha通道,将镜面反射存储为法线的alpha.每个都在他们自己的文件中,它看起来像这样:

两个双向纹理

到目前为止我的问题是找到一个支持完整的非预乘alpha通道的文件格式.PNG只是没有为我工作.我试图将此作为PNG保存的每一种方式都将.alpha与.rgb文件保存(通过photoshop)基本上摧毁了.rgb.当我重新加载文件时,任何具有0.0 alpha的像素都有黑色rgb.我在这里发布了这个问题没有活动.

我知道如果我能找到一种方法来保存和加载这个独立的第4通道,这种方法会产生更快的渲染.但到目前为止,我还没有能够继续前进.

方法2 - 当这不起作用时,我转到单个4向纹理,其中每个象限具有不同的地图.这不会减少texture2D()调用,但会减少着色器中正在访问的纹理数量.

一个4向纹理

4向纹理确实需要我修改着色器中的纹理坐标.为了模型的灵活性,我将texcoords保留在模型的结构中,并在着色器中修改它们,如下所示:

v_fragmentTexCoord0 = a_vertexTexCoord0 * 0.5;
v_fragmentTexCoord1 = v_fragmentTexCoord0 + vec2(0.0, 0.5);     // illumination frag is up half
v_fragmentTexCoord2 = v_fragmentTexCoord0 + vec2(0.5, 0.5);     // shininess frag is up and over
v_fragmentTexCoord3 = v_fragmentTexCoord0 + vec2(0.5, 0.0);     // normal frag is over half
Run Code Online (Sandbox Code Playgroud)

为了避免动态纹理查找(感谢Brad Larson),我将这些偏移移动到顶点着色器并将它们保留在片段着色器之外.

但我的问题是:减少着色器中使用的纹理采样器的数量是否重要?或者我最好在这里使用4种不同的较小纹理?

我遇到的一个问题是在不同的地图之间流血.由于线性纹理映射,1.0的texcoord在一些蓝色正常像素中进行平均.这在接缝附近的物体上添加了蓝色边缘.为了避免这种情况,我不得不将我的UV贴图更改为不太靠近边缘.对很多物体来说,这是一种痛苦.

方法3是组合方法1和2.并且在一侧具有base.rgb + emission.a而在另一侧具有normal.rgb + specular.a.但我仍然有这个问题获得一个独立的alpha保存在文件中.

也许我可以将它们保存为两个文件,但在加载过程中将它们组合起来然后再发送到openGL.我得尝试一下. …

shader objective-c texture-mapping ios opengl-es-2.0

6
推荐指数
1
解决办法
644
查看次数

在Python中将纹理映射到模型上

提出这个问题:我在3D渲染方面是一个完全的初学者,我想让自己的脚湿透.

我的目标是创建一个命令行脚本(理想情况下是Python),它采用某种3d模型文件(例如球体),将纹理映射到它上面,并将结果输出为图像文件.也就是说,我希望我的程序基本上能够"执行"以下操作:

在此输入图像描述

从我的阅读,这似乎被称为"紫外线映射",但几乎所有我在这个主题上找到的关于如何使用Blender这样做的事情,我宁愿避免这种情况:在2d类比中,似乎我认为Blender就像Photoshop,我正在寻找像ImageMagick这样的东西.除此之外,我找不到多少.

我发现的最接近的是另一个stackoverflow问题: uv映射在低分辨率上工作不好(警告:很多图像)

但我不太清楚那里发生了什么,因为它根本不会导入三维模型 - 我的[也许是错误的]了解EXR是一种二维图像格式.

任何有关如何入门的指导将不胜感激!

python render texture-mapping

6
推荐指数
0
解决办法
735
查看次数

如何在BufferGeometry面上添加纹理?

我创建了一个bufferGeometry,它由5个平面组成,(100x25)每个平面带有两个三角形。

在此处输入图片说明


function createGeometry() {
  var geometry = new THREE.PlaneGeometry(100, 25, 1);
  return geometry;
}

function createScene() {

    var bufferGeometry = new THREE.BufferGeometry();
    var radius = 125;
    var count = 5;

    var positions = [];
    var normals = [];
    var colors = [];

    var vector = new THREE.Vector3();
    var color = new THREE.Color( 0xffffff );
    var heartGeometry = createGeometry();
    var geometry = new THREE.Geometry();

    var step = 0;
    for ( var i = 1, l = count; …
Run Code Online (Sandbox Code Playgroud)

javascript texture-mapping three.js

6
推荐指数
1
解决办法
231
查看次数