标签: textures

球体上的纹理错误

我有一些球形经度/纬度坐标,用于我需要可视化的球体上的点.为此,我将点转换为笛卡尔坐标并构建了一个三角形网格,我可以使用VTK进行渲染.到目前为止工作.

现在我想为球体模型使用纹理.因此,我将球面坐标转换为纹理坐标,并将它们分配给每个点.这适用于球体的大多数表面三角形,结果看起来可以接受.

但是,对于纹理包裹的本初子午线的另一侧的三角形,三角形的纹理不正确:不是重复纹理和"在纹理边界上"的映射,整个纹理被挤压到单个三角形上.

这是一张它的样子:

球纹理

zick-zack线显然是错误的,蓝线应该是可见的.整个纹理映射在三角形上,产生红色和白色条纹.这是有道理的,因为对于所讨论的三角形,纹理坐标跨越整个纹理空间.

为了说明这个问题,这不是特定于球体而是所有封闭的物体,我创建了下图:

纹理缝

在上部矩形中,我们看到一个三角形跨越纹理边界,带有计算纹理坐标A,B和C.由于纹理可以平铺,这就是我想要渲染三角形的方式.

下三角显示当前如何解释纹理坐标.边A,B和C的坐标是相同的,但这次,大部分纹理用于三角形,而不是在边界处平铺纹理.

我确信我犯了一个很常见的错误,但我还没有找到任何帮助我的东西.对我有任何暗示吗?

3d geometry textures vtk

4
推荐指数
1
解决办法
2557
查看次数

在OpenGL中将纹理映射到VBO的问题

我无法使用OpenGL正确地将纹理映射到几何体上.事实上,我似乎甚至打破了以前工作正常的颜色插值.我在C99中创建了一个使用SDL,GLee和SOIL的测试用例.

#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#include <SDL/SDL.h>
#include <GL/GLee.h>
#include <SOIL/SOIL.h>

static const char *vertex_source = " \
uniform mat4 projection; \
uniform mat4 view_model; \
 \
attribute vec2 vertex; \
attribute vec2 texcoord; \
attribute vec4 colour; \
 \
varying vec2 _texcoord; \
 \
void main() \
{ \
    gl_Position = gl_ModelViewProjectionMatrix * vec4(vertex, 0, 1); \
    _texcoord = texcoord; \
    gl_FrontColor = colour; \
} ";

static const char *fragment_source = " …
Run Code Online (Sandbox Code Playgroud)

opengl shader textures vbo

4
推荐指数
1
解决办法
5807
查看次数

OpenGL版本&gt; = 2.0是否要求纹理尺寸为4像素的倍数?

我正在使用使用OpenGL纹理的Mac应用程序,该纹理是使用glTexImage2D从磁盘上的图像文件加载的。

根据文档,对于OpenGL版本> = 2.0,纹理可以是任意大小。(对于版本<2.0,x和y尺寸都必须为2的幂。)

但是,如果我的图像尺寸不是4的偶数倍,则纹理会变差。我已经进行了搜索和搜索,但是找不到有关此要求的任何文档。实际上,“红皮书”明确指出,纹理尺寸可以是> = 2.0版本的任何值。

我想念什么?

而且,将纹理转换为下一个最大的2幂次方是否有性能优势?我的应用程序需要Mac OS 10.6.6或更高版本,该操作系统应可在任何Intel Mac上运行。某些早期的Intel macs具有非常“不起眼”的图形硬件。

任何帮助将不胜感激。

opengl macos textures glteximage2d

4
推荐指数
1
解决办法
1283
查看次数

动态修改Texture数组的内容

我想定期修改cuda数组的内容,我在设备代码中有一个纹理参考.请注意,阵列上的更新将在主机代码中完成.我的问题是:我们可以同时执行此操作,即设备内核仅被调用一次,并且数组内容会定期更改并反映在设备内存中.

textures cuda

4
推荐指数
1
解决办法
841
查看次数

是否可以"手动"为OpenGL纹理使用创建图像数据?

我正在学习OpenGL环境中的纹理.我发现在将实际图像数据传递给视频内存之前,没有传统的方法可以获取实际图像数据.

出于好奇,是否可以创建我自己的像素数据矩阵并用任意信息填充它而不是实际读取位图或图像文件?

opengl textures

4
推荐指数
2
解决办法
9648
查看次数

挤出具有多个孔的多个多边形并对组合形状进行纹理化

这个问题与这个问题有关.的回答显示出非常好的方式挤出有洞的多边形(见优秀的活生生的例子).答案的主要学习是,three.js(r58)中的路径不能有多个moveTo命令,它必须位于路径的开头,这意味着路径必须被moveTos打破,以便moveTo启动总是一条新路.

挤出三个.js意味着使用可能的斜角将2D路径转换为3D形状.它适用于挤出文本以制作3D字母和单词,但也可用于挤出自定义路径.

现在出现了两个问题:

  • 如何处理具有多个孔多边形和多个非孔多边形的多边形?
  • 如何将纹理作为整体添加到生成的形状中?

我在http://jsbin.com/oqomuj/1/edit中作为SVG做了一个例子:

在此输入图像描述

使用此路径生成图像:

<path d="
 M57.11,271.77 L57.11,218.33 L41.99,218.63 L105.49,165.77 L138.41,193.18 L138.41,172.2 L152.53,172.2 L152.53,204.93 L168.99,218.63 L153.21,218.63 L153.21,271.77Z
 M74.14,264.13 L105.49,264.13 L105.49,232.8 L74.14,232.8Z
 M115.35,250.7 L135.96,250.7 L135.96,232.61 L115.35,232.61Z
 M56.11,145.77 L56.11,92.33 L40.99,92.63 L104.49,39.77 L137.41,67.18 L137.41,46.2 L151.53,46.2 L151.53,78.93 L152.53,79.76 L155.55,77.23 L159.5,74.52 L168.65,69.81 L176.46,66.93 L188.04,64.16 L200.63,62.7 L213.65,62.7 L226.05,64.09 L234.83,66.06 L245.65,69.73 L252.87,73.27 L259.12,77.34 L262.63,80.33 L265.6,83.47 L268.01,86.76 L269.83,90.17 L271.08,93.68 L271.76,99.08 L271.04,104.64 L269.75,108.2 L267.87,111.63 L265.42,114.91 L262.44,118.01 L258.95,120.92 L255.02,123.63 L245.86,128.34 L238.06,131.22 L226.48,133.99 L213.88,135.44 L200.63,135.44 L188.04,133.99 L176.46,131.22 L168.65,128.34 L159.5,123.63 L155.55,120.92 …

svg textures polygon three.js

4
推荐指数
1
解决办法
4620
查看次数

sf ::作为类成员的纹理不起作用?

嘿,我想在我的SFML应用程序中绘制一个精灵,但当我使用图像和类成员的纹理时,它的纹理总是白色的

班级成员:

sf::Sprite myimg;
sf::Image myimg_image;
sf::Texture myimg_texture;
Run Code Online (Sandbox Code Playgroud)

然后我在我的cpp文件中创建这样的精灵

// create image
myimg_image.create(icon.width, icon.height, icon.pixelData);

// create texture from image
myimg_texture.create(icon.width, icon.height);
myimg_texture.update(myimg_image);

// apply texture to sprite
myimg.setTexture(myimg_texture);
Run Code Online (Sandbox Code Playgroud)

当我用window.draw(myimg)绘制它时,它只绘制一个白色精灵

(图标是包含图像信息的结构..它只是我想用GIMP导出为C源的图像)

我进行了一些实验,并意识到当我创建上面提到的类成员不是作为类成员而是作为main函数中的局部变量时,图像被正确绘制...

但这对我没有帮助,因为我需要它们作为成员,因为我也希望从其他功能中访问它们

你能帮帮我吗我只是不知道该怎么做了:(

c++ textures image sprite sfml

4
推荐指数
1
解决办法
1197
查看次数

Three.js tile使用平面几何体具有多个纹理

所以我正在尝试建立一个由瓷砖组成的基于3D的世界.

我已经成功地使用平面几何和高度值等设法做到了这一点.但是现在我已经到了可能需要改变一切的地步.

问题是我想要一个瓷砖有多个纹理(使用着色器因为我想要混合它们).我能够全局地做到这一点(因此每个图块将具有相同的纹理+使用一些uv映射).

但是我无法理解我将如何指定哪个图块具有哪些纹理(并且我有大约100个纹理),因为平面几何图形只有1个着色器材质.而且我也不确定通过着色器发送100个纹理是否是一个好主意?

所以我的问题基本归结为:

有没有一种体面/高效的方式将平铺/顶点链接到纹理,所以我可以保持平面几何.

- 如果是的话:怎么样?

- 如果不是:我应该单独创建每个图块(因此是1x1的平面)并将它们合并在一起(性能/顶点混合?)因此它充当单个平面(在这种情况下,合并平面由许多1x1平面组成)和每块瓷砖使用着色器(1x1平面)?

这些事情一般如何完成?

编辑:

一些额外的信息,因为似乎我的问题不是很清楚:

我想要的是一个瓷砖(2个面)有多个"materialIndexes"来表示.目前我需要有1个图块才能有3个纹理,所以我可以使用特定算法将它们混合在着色器中.

例如,我想要一个心形(红色的心/黑色背景)作为纹理,而不是基于我想要混合/更改其他2个纹理的颜色,所以我可以得到例如木心和蓝色背景.或者例如,我应该能够在正方形上均匀地混合4个纹理,每个纹理占正方形的1/4.但这里的重点不是纹理必须做什么,而是我如何为我的面孔/瓷砖指定这样的3,4或更多纹理.

javascript textures tile three.js

4
推荐指数
1
解决办法
5987
查看次数

OpenGL GLSL纹理透明度

我想使用GLSL在我的32位位图纹理上实现透明度.我的片段着色器看起来像这样:

#version 120
uniform sampler2D myTexture;
varying vec2 TexCoord;

void main(void)
{
    if(texture2D(myTexture, TexCoord).a != 1.0f)
    {
        discard;
    }
    gl_FragColor = texture2D(myTexture, TexCoord);
}
Run Code Online (Sandbox Code Playgroud)

但这使得透明只有alpha等于0的像素,我想保持纹理的淡入淡出.例如,在此图片中,第一个图像是纹理,第二个是纹理蒙版,第三个是期望的结果:

例

纹理和纹理掩码位于一个32位位图中.

有谁知道,如何使用GLSL实现这一目标?

c++ opengl transparency textures glsl

4
推荐指数
1
解决办法
5878
查看次数

使用ShaderMaterial的自定义几何体的纹理加载在Three.js中不起作用

在这里,我有一个有四个顶点和4个面的几何(金字塔) -

var geom = new THREE.Geometry();
geom.vertices.push(new THREE.Vector3(0,100,0), new THREE.Vector3(-100,-100,100), new THREE.Vector3(0,-100,-100), new THREE.Vector3(100,-100,100));
geom.faces.push( new THREE.Face3( 0, 2, 1), new THREE.Face3( 0, 1, 3), new THREE.Face3( 0, 3, 2), new THREE.Face3( 1, 2, 3) );
geom.computeFaceNormals();
Run Code Online (Sandbox Code Playgroud)

这是我的RawShaderMaterial -

var geomMaterial = new THREE.RawShaderMaterial({
        vertexShader: [
            'precision highp float;',
            'precision highp int;',
            'uniform mat4 modelViewMatrix;',
            'uniform mat4 projectionMatrix;',
            'attribute vec3 position;',
            'attribute vec2 uv;',
            'varying vec2 interpolatedUV;',
            'void main() {',
            'interpolatedUV = uv;',
            'gl_Position = projectionMatrix * modelViewMatrix * …
Run Code Online (Sandbox Code Playgroud)

javascript textures three.js

4
推荐指数
1
解决办法
1287
查看次数

标签 统计

textures ×10

opengl ×4

three.js ×3

c++ ×2

javascript ×2

3d ×1

cuda ×1

geometry ×1

glsl ×1

glteximage2d ×1

image ×1

macos ×1

polygon ×1

sfml ×1

shader ×1

sprite ×1

svg ×1

tile ×1

transparency ×1

vbo ×1

vtk ×1