相关疑难解决方法(0)

像素空间中的OpenGL纹理坐标

我正在开发一款使用OpenGL ES 2进行绘图的iPhone应用程序.我知道通常纹理坐标是在0-1范围内定义的,但理想情况下我想将它们从0-1023(我的TextureAtlas的大小)映射出来以便于阅读.我已经看到了以这种方式定义坐标的示例代码,但是无法确定以前允许这样做的调用.glMatrixMode(GL_TEXTURE)好像它可能涉及,但我不太确定如何实现它.

我的最终目标是完成这样的事情,我在地图册中使用的纹理位于左上角48px的正方形中:

GLshort texcoords[]={
  48,48,
  0,48,
  48,0,
  0,0,
};
glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_SHORT, 0, 0, texcoords);
glEnableVertexAttribArray(ATTRIB_TEXTUREPOSITON);
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch opengl-es objective-c

15
推荐指数
3
解决办法
2万
查看次数

在texel中心进行采样并没有给出正确的结果,OpenGL,C++

不久前我在显示纹理方面遇到了问题,因为我使用纹素的边缘作为纹理坐标而不是纹素的中心.这与线性混合相结合,给出了平滑的颜色效果,而不是纹理给出的纯色.

感谢我在这里给出的建议,我认为我的问题解决了,因为我开始使用纹素中心作为坐标,但它只在一个案例中工作,我不知道为什么只在那一个案例中.

我再次展示一些照片.

这是我正在使用的纹理(32x32像素),边框为2像素:

在此输入图像描述

我绘制的整个对象由9个四边形组成,但它们只使用一个纹理(我展示的那个).其中一个将作为我的问题的解释:

在此输入图像描述

我认为很明显,四边形的颜色没有根据纹理正确设置.

它看起来像混合的问题,但是为了设置纹理坐标,我使用了纹素的中心,如下所示:

glBegin(GL_QUADS);
    // Bottom left
    glTexCoord2f(0.0 + texelCentersOffset, maxTexCoordBorderY + texelCentersOffset);
    glVertex2i(pos.x, pos.y + height - m_borderWidth);

    // Top left
    glTexCoord2f(0.0 + texelCentersOffset, (GLfloat)1.0 - maxTexCoordBorderY - texelCentersOffset);
    glVertex2i(pos.x, pos.y + m_borderWidth);

    // Top right
    glTexCoord2f(maxTexCoordBorderX - texelCentersOffset, (GLfloat)1.0 - maxTexCoordBorderY - texelCentersOffset);  
    glVertex2i(pos.x + m_borderWidth, pos.y + m_borderWidth);

    // Bottom right
    glTexCoord2f(maxTexCoordBorderX - texelCentersOffset, maxTexCoordBorderY + texelCentersOffset);
    glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
glEnd();
Run Code Online (Sandbox Code Playgroud)

为了澄清:

m_borderWidth = 2

maxTexCoordBorderX= maxTexCoordBorderY …

c++ opengl graphics textures

9
推荐指数
1
解决办法
944
查看次数

GL_TEXTURE_RECTANGLE_ARB

我尝试使用GL_TEXTURE_RECTANGLE_ARB使用数据原始纹理:

void Display::tex(){

GLubyte Texture[16] =
{    
0,0,0,0, 0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF, 0,0,0,0
};
GLuint Nom;
glLoadIdentity();//load identity matrix
glTranslatef(0.0f,0.0f,-4.0f);//move forward 4 units

glEnable(GL_DEPTH_TEST);    //Active le depth test
glDisable( GL_CULL_FACE );

glEnable (GL_TEXTURE_RECTANGLE_ARB);

glPixelStorei(GL_UNPACK_ROW_LENGTH, 2);

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

glGenTextures(1, &Nom);

glBindTexture(GL_TEXTURE_RECTANGLE_ARB, Nom);

glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,

                GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, 2, 2,

                0, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV, Texture);
angle  = 0.01 * glutGet ( GLUT_ELAPSED_TIME );
glRotatef(angle,0,1,1);

glBegin(GL_QUADS);  //Et c'est parti pour le cube !

glTexCoord2i(0,0);glVertex3i(-1,-1,-1);
glTexCoord2i(1,0);glVertex3i(+1,-1,-1);
glTexCoord2i(1,1);glVertex3i(+1,+1,-1);
glTexCoord2i(0,1);glVertex3i(-1,+1,-1);

//1 face

glTexCoord2i(0,0);glVertex3i(-1,-1,+1);
glTexCoord2i(1,0);glVertex3i(+1,-1,+1);
glTexCoord2i(1,1);glVertex3i(+1,+1,+1);
glTexCoord2i(0,1);glVertex3i(-1,+1,+1);

//2 faces …
Run Code Online (Sandbox Code Playgroud)

opengl textures

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

标签 统计

opengl ×2

textures ×2

c++ ×1

cocoa-touch ×1

graphics ×1

iphone ×1

objective-c ×1

opengl-es ×1