标签: texture-mapping

大型几何体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
查看次数

在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
查看次数

OpenGL纹理映射

嘿伙计们,我是游戏编程和图形编程的新手.但是,我急切地希望学习,所以我已经开始用OpenGL构建游戏引擎.我已经实现了所有基本的图形功能,现在我想为我的三角形网格添加纹理支持.

我能找到的纹理映射的唯一教程是针对单个多边形 - 如何定义包裹整个网格的纹理?

我使用lib3ds(http://code.google.com/p/lib3ds/)从.3ds文件加载网格..3ds文件带有一些纹理坐标数据吗?

谢谢!

c++ opengl 3ds texture-mapping uv-mapping

5
推荐指数
1
解决办法
2416
查看次数

Opengl几何着色器整数纹理提取失败

我正在尝试从GeForce 330m上运行的几何着色器中采样整数纹理.它似乎返回其他值而不是我加载到纹理中.我使用这个代码(基本上)来创建和加载纹理:

glGenTextures( 1, &textureId );
glBindTexture( GL_TEXTURE_2D, textureId );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture( GL_TEXTURE_2D, 0);
glBindTexture( GL_TEXTURE_2D, textureId );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_INT, <some 0-initialized large enough buffer>);
glBindTexture( GL_TEXTURE_2D, 0);
glBindTexture( GL_TEXTURE_2D, textureId );
    int data[] = { 3, 0, 36, 400 };
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 3, 1, 1, GL_RGBA, GL_INT, data);
glBindTexture( GL_TEXTURE_2D, 0);
Run Code Online (Sandbox Code Playgroud)

想法是将特定的一个像素设置为具有400的w值.然后我在几何着色器中使用它:

#version 330 …
Run Code Online (Sandbox Code Playgroud)

opengl integer texture-mapping geometry-shader opengl-3

5
推荐指数
1
解决办法
964
查看次数

正确的glsl仿射纹理映射

我正在尝试在GLSL中编码正确的2D仿射纹理映射.

说明:

...没有这个图像对我的目的是正确的.右(标记为正确)具有我不想要的透视校正.所以这个:了解Q纹理坐标解决方案(没有进一步的改进)并不是我想要的.

我想简单地在四边形内"拉伸"纹理,如下所示:

在此输入图像描述

但是由两个三角形组成.有什么建议(GLSL)好吗?

opengl math glsl texture-mapping

5
推荐指数
2
解决办法
6294
查看次数

Assimp 模型有纹理但没有纹理坐标

我正在使用 Assimp 将 3D 模型加载到我的程序中。到目前为止,一切都很顺利,除了我遇到了一个似乎没有意义的 Lightwave 对象。当然它在 Lightwave 中渲染得很好,但在 Assimp 中没有纹理坐标,没有 UV 坐标,但最终会加载纹理。但这无济于事 - 它们只是坐在内存中并且永远不会被使用,因为 - 你猜对了 - 没有纹理坐标。

到目前为止,我还没有找到任何有用的 Assimp 页面。其他模型加载良好并正确贴图。这是 Assimp 的问题吗?

3d texture-mapping 3d-modelling assimp

5
推荐指数
1
解决办法
3936
查看次数

如何将彩色点云转换为纹理网格?

我有一个 .ply 文件,其中包含彩色点云:

青蛙点云

我需要将其转换为纹理网格。我可以创建一个空白网格:

过滤器 -> 点集 -> 曲面重建:泊松

但结果是白色的网格

青蛙网

似乎所有有关颜色的信息都丢失了。有什么建议吗?谢谢

mesh texture-mapping point-clouds meshlab

5
推荐指数
1
解决办法
7109
查看次数

如何插入 UV 坐标?

我正在尝试将纹理应用于我的 .md2 模型。我使用 Gouraud 着色给它上色(底部/顶部平面三角形的标准算法),我必须使用类似的代码来处理纹理坐标 U 和 V。但我真的不明白如何对它们进行插值。从我的尝试来看,我的代码似乎只在边缘插入,而不是在它们之间插入。我错过了什么?谢谢你。 在此处输入图片说明

这里的颜色由 u 为红色,v 为绿色,255 为蓝色(仅用于底部扁平三角形): 在此处输入图片说明

 void Rasteriser::TfillBottomFlatTriangle(Vertex vertex1, Vertex vertex2, Vertex vertex3, COLORREF c1, COLORREF c2, COLORREF c3, HDC hdc)
    {
        float slope1 = (vertex2.GetX() - vertex1.GetX()) / (vertex2.GetY() - vertex1.GetY());
        float slope2 = (vertex3.GetX() - vertex1.GetX()) / (vertex3.GetY() - vertex1.GetY());

    //U and V
    float slope1U = (vertex2.GetU() - vertex1.GetU()) / (vertex2.GetY() - vertex1.GetY());
    float slope2U = (vertex3.GetU() - vertex1.GetU()) / (vertex3.GetY() - vertex1.GetY());

    float slope1V = (vertex2.GetV() - vertex1.GetV()) / (vertex2.GetY() …
Run Code Online (Sandbox Code Playgroud)

c++ interpolation texture-mapping

5
推荐指数
1
解决办法
304
查看次数