ios OpenGL ES纹理展示异常

健康弟弟 2016-10-24 04:56:05


纹理已经加载,主要展示代码如下:
- (void)draw
{
glClearColor(0.7, 0.7, 0.7, 1.0);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_ONE, GL_SRC_COLOR);

glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

CGFloat width = self.bounds.size.width;
CGFloat height = self.bounds.size.height;

glOrthof(-width / 2,
width / 2,
-height / 2,
height / 2,
-0.01,
10);
// glFrustumf(-width / 2,
// width / 2,
// -height / 2,
// height / 2,
// 1,
// 100);
glViewport(0, 0, width, height);


float POSITION[] = {0, 0, -1, 0};
glLightfv(GL_LIGHT0, GL_POSITION, POSITION);

float AMBIENT[] = {0, 0, 1, 1}; // 颜色配置无色(宇宙环境为无色)
glLightfv(GL_LIGHT0, GL_AMBIENT, AMBIENT);

float DIFFUSE[] = {1, 1, 1, 1}; // 漫反射颜色设为白色
glLightfv(GL_LIGHT0, GL_DIFFUSE, DIFFUSE);

float SPECULAR[] = {1, 1, 1, 1}; // 镜面反射设为白色
glLightfv(GL_LIGHT0, GL_SPECULAR, SPECULAR);

glEnable(GL_COLOR_MATERIAL);
glEnableClientState(GL_VERTEX_ARRAY);
// glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glVector3f A = glVector3fMake(-256, 256, -1);
glVector3f B = glVector3fMake(256, 256, -1);
glVector3f C = glVector3fMake(-256, -256, -1);
glVector3f D = glVector3fMake(256, -256, -1);

glVector3f points[] = {
A,
B,
C,
D
};

glVector3f texturePoints[] = {
glVector2fMake(0, 1),
glVector2fMake(1, 1),
glVector2fMake(0, 0),
glVector2fMake(1, 0)
};

GLbyte location[] = {
0, 1, 2, 3
};

// GLfloat colors[] = {
// 1, 0, 0, 1,
// 0, 1, 0, 1,
// 0, 0, 1, 1,
// 1, 1, 0, 1
// };


// ABC, BCD
glTriangle3v normals[] = {
glTriangle3vNormal(glTriangle3vMake(A, B, C)),
glTriangle3vNormal(glTriangle3vMake(B, C, D)),
};

glBindTexture(GL_TEXTURE_2D, self.textureId);
glVertexPointer(3, GL_FLOAT, 0, points);
// glColorPointer(4, GL_FLOAT, 0, colors);

glNormalPointer(GL_FLOAT, 0, normals);
glPointSize(10);
glTexCoordPointer(2, GL_FLOAT, 0, texturePoints);

// glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, location);

glDisableClientState(GL_VERTEX_ARRAY);
// glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

[_context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
...全文
313 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
健康弟弟 2016-10-25
  • 打赏
  • 举报
回复
将api切换到es2.0,目前是正常的。。
健康弟弟 2016-10-24
  • 打赏
  • 举报
回复
引用 2 楼 win_mary 的回复:
兄弟啊,改一下纹理坐标看看,01,11,10,00,我很久没接触openGl了,还是大学时候选修的,现在在做ios开发,记得纹理坐标不是顺时针就是逆时针,没有你这样的,自然可能效果不一样
纹理坐标对应顶点坐标,如下是opgl代码,展示是正常的, glTexCoord2f(0.0f, 0.0f); glVertex3f(-8.0f, -8.0f, 0.0f); glTexCoord2f(0.0f, 5.0f); glVertex3f(-8.0f, 8.0f, 0.0f); glTexCoord2f(5.0f, 5.0f); glVertex3f(8.0f, 8.0f, 0.0f); glTexCoord2f(5.0f, 0.0f); glVertex3f(8.0f, -8.0f, 0.0f);
dennis_ben 2016-10-24
  • 打赏
  • 举报
回复
有兴趣可以相互交流,自我感觉对openGl研究还可以,灯光,纹理,混合,lod地形,粒子系统,碰撞检测最基本的还是知道的,本来打算毕业做游戏的,结果被迫做了ios
dennis_ben 2016-10-24
  • 打赏
  • 举报
回复
兄弟啊,改一下纹理坐标看看,01,11,10,00,我很久没接触openGl了,还是大学时候选修的,现在在做ios开发,记得纹理坐标不是顺时针就是逆时针,没有你这样的,自然可能效果不一样
健康弟弟 2016-10-24
  • 打赏
  • 举报
回复
一些数据结构如下 typedef struct _glVector3f { GLfloat x, y, z; }glVector3f; typedef struct _glVector2f { GLfloat x, y; }glVector2f;

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧