GL_TEXTURE0(插槽0上的纹理)之后的每个纹理都是黑色.
片段着色器(通过更改权重来检查不同纹理的示例代码):
#version 330
uniform sampler2D g_ColorTex;
uniform sampler2D g_DepthTex;
uniform sampler2D g_DofNearBlurTex;
uniform sampler2D g_DofDownBlurTex;
in vec4 g_VertexPosition;
in vec2 g_ScreenCoords;
layout (location = 0) out vec4 FragColor;
void main()
{
// Changing weights to check textures
FragColor = 1.00001f * vec4(texture(g_ColorTex , g_ScreenCoords).rgb, 1.0f);
FragColor += 0.00001f * vec4(texture(g_DepthTex , g_ScreenCoords).rgb, 1.0f);
FragColor += 0.00001f * vec4(texture(g_DofNearBlurTex, g_ScreenCoords).rgb, 1.0f);
FragColor += 0.00001f * vec4(texture(g_DofDownBlurTex, g_ScreenCoords).rgb, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)
我上传这样的纹理(摘录!):
::glUseProgram(ShaderHandle);
unsigned int TextureIndex;
TextureIndex = ::glGetUniformLocation(ShaderHandle, "g_ColorTex");
::glUniform1i(TextureIndex, 0); …Run Code Online (Sandbox Code Playgroud) 我看到了许多与我看到的源代码不同的参数.是否可以在某处找到详细描述这些参数的描述?
如何关闭多个纹理单元,因为它们会影响其他渲染部件.我激活他们:
glActiveTexture(GL_TEXTURE0 + index);
glBindTexture(GL_TEXTURE_2D,
((MaterialSampler2D)specular).texture.getTOB());
shader.setTexture2(index);
Run Code Online (Sandbox Code Playgroud)
有没有类似glDeactivateTexture的东西?
我已经开始一个新项目,我想在其中使用多重纹理。我之前已经进行了多重拉伸,并且受我的OpenGL版本支持
在标题中,我有:
GLuint m_TerrainTexture[3];//heightmap, texture map and detail map
GLuint m_SkyboxTexture[5]; //left, front, right, back and top textures
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
PFNGLACTIVETEXTUREARBPROC glActiveTexture;
Run Code Online (Sandbox Code Playgroud)
在构造函数中,我有:
glActiveTexture = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress((LPCSTR)"glActiveTextureARB");
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress((LPCSTR)"glMultiTexCoord2fARB");
if(!glActiveTexture || !glMultiTexCoord2fARB)
{
MessageBox(NULL, "multitexturing failed", "OGL_D3D Error", MB_OK);
}
glActiveTexture( GL_TEXTURE0_ARB );
...
Run Code Online (Sandbox Code Playgroud)
这将显示消息框“多纹理处理失败”,并且glActiveTexture的内容为0x00000000
当它到达glActiveTexture(GL_TEXTURE0_ARB); 我收到访问冲突错误
我正在实现MVC图,所以这一切都在我的Terrain View类中
我需要使用多纹理渲染对象,但两个纹理对同一个对象都有不同的uv坐标.一个是法线贴图,另一个是光贴图.
请提供有关此的任何有用的材料.
我已经成功绘制了一个多纹理多边形,但不幸的是,只有整个纹理区域使用了重叠纹理的第一个像素.
这是纹理(GL_TEXTURE0和GL_TEXTURE1):

结果是这样的:

仅使用顶部的红色像素.我试过在顶部只有一个1x1蓝色像素,我得到了与蓝色叠加相同的结果.
我的代码:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisableClientState(GL_COLOR_ARRAY);
const CGPoint vertices[] = {
ccp(0,0),
ccp(100,0),
ccp(0,100),
ccp(100,100),
};
// This will flip the image for us as well
const CGPoint coordinates[] = {
ccp(0,1),
ccp(1,1),
ccp(0,0),
ccp(1,0),
};
// Config multitextures
glClientActiveTexture(GL_TEXTURE0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, icon.name);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexCoordPointer(2, GL_FLOAT, 0, coordinates);
glEnable(GL_TEXTURE_2D);
glClientActiveTexture(GL_TEXTURE1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, overlay.name);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexCoordPointer(2, GL_FLOAT, 0, coordinates);
glEnable(GL_TEXTURE_2D);
GLubyte points = 4;
// Draw the square
glVertexPointer(2, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, …Run Code Online (Sandbox Code Playgroud) 我不完全理解在GPU上访问纹理数据的方式.如果可能的话 - 有人能解释一下吗?
当纹理单元的数量有限时,这是否会限制我可以使用生成的纹理数量glGenTextures()并使用上传到GPU glTexImage2D()?或者它只限制可以绑定的纹理单元的数量glBindTexture()?
我真正想做的是能够将我的所有纹理上传到GPU - 即使有超过可用纹理单元的数量.当需要纹理时,我只需使用它将其绑定到纹理单元glBindTexture().这可能吗?
我很高兴使用LibGDX Framework的SpriteBatch类.我的目标是通过着色器修改精灵的表示.
batch = new SpriteBatch(2, shaderProgram);
Run Code Online (Sandbox Code Playgroud)
我从SpriteBatch类中复制了默认着色器,并添加了另一个统一的Sampler 2d
+ "uniform sampler2D u_Texture2;\n"//
Run Code Online (Sandbox Code Playgroud)
是否有一种工作方式将纹理赋予着色器.这样做,总是在ClearColor屏幕中结束.
batch.begin();
texture2.bind(1);
shaderProgram.setUniformi("u_Texture2", 1);
batch.draw(spriteTexture,positions[0].x,positions[0].y);
batch.draw(spriteTexture,positions[1].x,positions[1].y);
batch.end();
Run Code Online (Sandbox Code Playgroud)
每个纹理都在工作.在Mesh类的帮助下手动绘制按预期工作.那么我该怎么做才能使用SpriteBatch的便利呢?
THX寻求帮助
快速OpenGL新手问题.我在片段着色器中有这一行:
uniform sampler2D mytexture;
Run Code Online (Sandbox Code Playgroud)
我深入研究了我正在使用的示例代码,我找不到任何引用mytexture; 只发现调用激活纹理单元并将纹理绑定到之前复制到GPU的纹理.
我的问题是,片段着色器如何知道我使用的唯一纹理必须通过mytexture?
我会想到的
glBindTextureToUniform(texture_id, "mytexture");
Run Code Online (Sandbox Code Playgroud)
或类似的必须被称为.