Opengl渲染第一个像素的颜色

时间:2013-05-23 07:13:21

标签: xcode macos opengl textures soil

我正在尝试将我的游戏引擎从win / linux移植到mac os x,所有工作都很好,除了纹理。我使用SOIL加载纹理和GLSL着色器进行渲染,所有这些都是用C ++完成的。

我相信我的着色器工作正常:

gl_FragColor = texture2D(BSTextureUnit,textureCoordinates)* BSTextureColor;

这是我如何加载纹理:

theTextureId = SOIL_load_OGL_texture
(
 nameChar,
 SOIL_LOAD_AUTO,
 SOIL_CREATE_NEW_ID,
 SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
 );

glBindTexture(GL_TEXTURE_2D, theTextureId);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

//glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
//glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

if(!theTextureId)
{
    std::cout<<"texture NOT loaded successfully: "<<name<<'\n';
}

它的作用是加载纹理,但不是渲染所有像素,而是为孔对象提供图像中第一个像素的颜色。

所以,如果纹理是这个:

enter image description here

它将呈现绿色块。

编辑: 纹理坐标:

dataToSet[0].texCoord.s = texLeft;
dataToSet[0].texCoord.t = texTop;
dataToSet[1].texCoord.s = texLeft;
dataToSet[1].texCoord.t = texBottom;
dataToSet[2].texCoord.s = texRight;
dataToSet[2].texCoord.t = texBottom;
dataToSet[3].texCoord.s = texRight;
dataToSet[3].texCoord.t = texTop;

其中:GLfloat texTop = 1,texBottom = 0,texLeft = 0,texRight = 1; 我也尝试使用纹理宽度和高度而不是0和1,我得到了相同的结果。在Windows上,它使用此纹理坐标正确渲染。

0 个答案:

没有答案