是否可以禁用纹理颜色,并仅使用白色作为颜色?它仍然会读取纹理,所以我不能使用glDisable(GL_TEXTURE_2D),因为我也想渲染alpha通道.
我现在能够想到的是制作新的纹理,其中所有颜色数据都是白色的,保持原样的alpha.
我需要在没有着色器的情况下这样做,所以这甚至可能吗?
编辑:澄清:我想使用两种纹理:白色和普通颜色.
编辑:显然这是不可能的
我不明白显示精灵映射到OpenGL三角形的概念.
如果OpenGL ES只绘制三角形和点,那么如何显示/绘制非三角形?
为什么映射到三角形的形状不会失真?
解释:
在我看来,将一个马里奥的精灵映射到一个三角形会产生一个扭曲或裁剪的马里奥.在这种情况下,头部会被挤压或看不见.
我想要完成的是:在我的场景顶部绘制我的场景的深度图(以便更近的物体更暗,更远的物体更亮)
问题:我似乎不明白如何将正确的纹理坐标从我的顶点着色器传递到我的片段着色器。
所以我创建了我的 FBO,以及深度贴图被绘制到的纹理......不是我完全确定我在做什么,但无论如何,它有效。我测试使用固定功能管道绘制纹理,它看起来就像它应该的(深度图)。
但是试图在我的着色器中使用它是行不通的......
这是我的渲染方法中绑定纹理的部分:
glActiveTexture(GL_TEXTURE7);
glBindTexture(GL_TEXTURE_2D, depthTextureId);
glUniform1i(depthMapUniform, 7);
glUseProgram(shaderProgram);
look(); //updates my viewing matrix
box.render(); //renders box VBO
Run Code Online (Sandbox Code Playgroud)
所以……我觉得这样对吗?也许?不知道为什么纹理 7,这只是我正在检查的教程中的内容...
这是我的顶点着色器中的重要内容:
out vec4 ShadowCoord;
void main() {
gl_Position = PMatrix * (VMatrix * MMatrix) * gl_Vertex; //projection, view and model matrices
ShadowCoord = gl_MultiTexCoord0; //something I kept seeing in examples, was hoping it would work.
}
Run Code Online (Sandbox Code Playgroud)
Aaand,片段着色器:
in vec4 ShadowCoord;
in vec3 Color; //passed from vertex shader, didn't include the code for it though. Just the vertex …Run Code Online (Sandbox Code Playgroud) 我[x,y]=meshgrid(1:N,1:M)在常规2D N x M网格上定义了一组点.我有另一组点[u,v]是原始网格的一些变形,即[u,v]=f(x,y)'(但是我没有实际f导致变形的点).如何将纹理映射到由" u,v?"定义的"变形"网格?即,如果给出具有宽高比的图像,N/M我该如何将其映射到变形网格?
我想绘制一个带有纹理贴图的表面,但条件不是"理想"的.
首先让我解释一下我的情况.
我有一组点(~7000),它们是网格中的图像坐标.这一点不能定义完美的正方形. 这不是一个MESHGRID.为了这个问题,我们假设我们有9分.让我们用图像说明我们所拥有的东西:
X=[310,270,330,430,410,400,480,500,520]
Y=[300,400,500,300,400,500,300,400,500]
Run Code Online (Sandbox Code Playgroud)
让我们说我们可以得到网格的"结构",所以
size1=3;
size2=3;
points=zeros(size1,size2,2)
X=[310,270,330;
430,410,400;
480,500,520]
Y=[300,400,500;
300,400,500;
300,400,500]
points(:,:,1)=X;
points(:,:,2)=Y;
Run Code Online (Sandbox Code Playgroud)
现在我们假设我们有第三个维度Z.
编辑:如果信息忘了添加一块.我对图像中的点进行三角测量并获得3D对应关系,因此当在表面中显示时,它们没有图像的X和Y坐标,为了简化给定数据,可以说X = X/2 Y = Y/3
我们有:
points=zeros(size1,size2,3)
Z=[300,330,340;
300,310,330;
290,300,300]
surf(points(:,:,1)/2,points(:,:,2)/3,points(:,:,3))
Run Code Online (Sandbox Code Playgroud)

我想要的是用图像纹理在3D中绘制表面.每个元素都应该具有第一个图像中的纹理片段.
这需要适用于大型数据表.我并不特别需要快速.
相关帖子(但我有一个网格网格作为初始点集):2D网格的纹理贴图
PD:如果需要,我可以发布原始图像+真实数据,只是发布了这个因为我认为使用小数据更容易.
我正在尝试在立方体上绘制纹理,该立方体基本上是一个带有8个顶点和14个指示的三角形条带:
static const GLfloat vertices[8] =
{
-1.f,-1.f,-1.f,
-1.f,-1.f, 1.f,
-1.f, 1.f,-1.f,
-1.f, 1.f, 1.f,
1.f,-1.f,-1.f,
1.f,-1.f, 1.f,
1.f, 1.f,-1.f,
1.f, 1.f, 1.f
};
static const GLubyte indices[14] =
{
2, 0, 6, 4, 5, 0, 1, 2, 3, 6, 7, 5, 3, 1
};
Run Code Online (Sandbox Code Playgroud)
你可以看到它开始用4个索引绘制后面2, 0, 6, 4,然后底部有3个索引5, 0, 1然后从三角形开始只是1, 2, 3左边3, 6, 7的一个三角形,顶部是一个三角形,依此类推......
我有点迷失了如何在这个立方体上绘制纹理.这是我的纹理(你明白了):

我设法得到背面纹理,不知何故可以在前面添加一些东西,但其他4个面部完全搞砸了,我有点困惑着色器如何处理关于纹理坐标的三角形.
我能做到的最好的是:

你可以清楚地看到两侧的三角形.这些是我的纹理坐标:
static const GLfloat texCoords[] = {
0.5, 0.5,
1.0, 0.5,
0.5, 1.0,
1.0, …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的程序,将虚拟红色纹理映射到四边形.
这是C++中的纹理定义:
struct DummyRGB8Texture2d
{
uint8_t data[3*4];
int width;
int height;
};
DummyRGB8Texture2d myTexture
{
{
255,0,0,
255,0,0,
255,0,0,
255,0,0
},
2u,
2u
};
Run Code Online (Sandbox Code Playgroud)
这就是我设置纹理的方法:
void SetupTexture()
{
// allocate a texture on the default texture unit (GL_TEXTURE0):
GL_CHECK(glCreateTextures(GL_TEXTURE_2D, 1, &m_texture));
// allocate texture:
GL_CHECK(glTextureStorage2D(m_texture, 1, GL_RGB8, myTexture.width, myTexture.height));
GL_CHECK(glTextureParameteri(m_texture, GL_TEXTURE_WRAP_S, GL_REPEAT));
GL_CHECK(glTextureParameteri(m_texture, GL_TEXTURE_WRAP_T, GL_REPEAT));
GL_CHECK(glTextureParameteri(m_texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
GL_CHECK(glTextureParameteri(m_texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
// tell the shader that the sampler2d uniform uses the default texture unit (GL_TEXTURE0)
GL_CHECK(glProgramUniform1i(m_program->Id(), /* location in shader …Run Code Online (Sandbox Code Playgroud) 好的,所以我需要创建自己的纹理/图像数据,然后将其显示在 OpenGL 中的四边形上。我让四边形工作,我可以用我自己的纹理加载器在它上面显示一个 TGA 文件,它完美地映射到四边形。
但是如何创建自己的“自制图像”,即每个像素 1000x1000 和 3 个通道(RGB 值)?纹理数组的格式是什么,例如如何将像素(100,100)设置为黑色?
这就是我对完全白色图像/纹理的想象:
#DEFINE SCREEN_WIDTH 1000
#DEFINE SCREEN_HEIGHT 1000
unsigned int* texdata = new unsigned int[SCREEN_HEIGHT * SCREEN_WIDTH * 3];
for(int i=0; i<SCREEN_HEIGHT * SCREEN_WIDTH * 3; i++)
texdata[i] = 255;
GLuint t = 0;
glEnable(GL_TEXTURE_2D);
glGenTextures( 1, &t );
glBindTexture(GL_TEXTURE_2D, t);
// Set parameters to determine how the texture is resized
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR_MIPMAP_LINEAR );
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR );
// Set parameters …Run Code Online (Sandbox Code Playgroud) 假设我正在制作一个 VkSampler,或者可能是一组 VkSampler,我打算将它与多个纹理一起使用。每个纹理都有多个 mip 级别,并且 mip 级别的数量因纹理而异。我希望所有纹理的所有采样器选项都相同,但maxLod.
我实际上不想maxLod阻止使用任何特定的 mip 级别;我只希望以一种普通的、正确的方式使用每个纹理的所有级别。那么我是否可以只抛出一个高得离谱的上限并对所有纹理使用相同的采样器:
VkSamplerCreateInfo samplerCreateInfo;
Run Code Online (Sandbox Code Playgroud)
...
samplerCreateInfo.minLod = 0;
samplerCreateInfo.maxLod = 1048576;
Run Code Online (Sandbox Code Playgroud)
...或者我是否需要为每个纹理创建不同的采样器maxLod并将采样器设置为该纹理的唯一最大 mip 索引?
我认为答案可能是,即使我的采样器maxLod非常高,我也可以指望发生合理的钳位——即使我textureLod在着色器中明确地传递了一个无用的高值——但我不完全确定我是否正确解释了Vulkan 和 GLSL 规范中的相关部分。
我现在正在构建一个体素游戏。一开始,我使用一个存储所有体素纹理的纹理图集,它工作正常。之后,我决定在我的游戏中使用 Greedy Meshing,因此纹理图集不再有用。我读了一些文章,说应该改用纹理数组。然后我尝试阅读并使用纹理数组技术进行纹理化。然而,我得到的结果在我的游戏中全黑。那么我错过了什么?
这是我的纹理图集 (600 x 600)
这是我的 Texture2DArray,我使用这个类来读取和保存一个纹理数组
Texture2DArray::Texture2DArray() : Internal_Format(GL_RGBA8), Image_Format(GL_RGBA), Wrap_S(GL_REPEAT), Wrap_T(GL_REPEAT), Wrap_R(GL_REPEAT), Filter_Min(GL_NEAREST), Filter_Max(GL_NEAREST), Width(0), Height(0)
{
glGenTextures(1, &this->ID);
}
void Texture2DArray::Generate(GLuint width, GLuint height, unsigned char* data)
{
this->Width = width;
this->Height = height;
glBindTexture(GL_TEXTURE_2D_ARRAY, this->ID);
// I cannot decide what the texture array layer (depth) should be (I put here is 1 for layer number)
//Can anyone explain to me how to decide the texture layer here?
glTexImage3D(GL_TEXTURE_2D_ARRAY, 1, this->Internal_Format, this->Width, this->Height, 0, …Run Code Online (Sandbox Code Playgroud)