使用 openGL ES 1.1 渲染 .h Blender 导出到 iPhone
我有一个使用 Jeff LaMarche .h 导出脚本导出的搅拌机图像。我正在尝试让它在 OpenGL ES 1.1 中渲染。我认为我没有正确传递顶点、法线和纹理坐标。有人可以帮我吗。这是我所拥有的。
这是带有我的顶点等的 .h 文件。
struct vertexDataTextured
{
GLKVector3 vertex;
GLKVector3 normal;
GLKVector2 texCoord;
};
typedef struct vertexDataTextured vertexDataTextured;
typedef vertexDataTextured* vertexDataTexturedPtr;
static const vertexDataTextured MeshVertexData[] = {
{/*v:*/{0.351562, 0.828125, -0.242188}, /*n:*/{0.183599, 0.982971, 0.005310}, /*t:*/{0.199397, 0.671493}},
{/*v:*/{0.445312, 0.781250, -0.156250}, /*n:*/{0.715171, 0.222724, 0.662465}, /*t:*/{0.216226, 0.665719}},
{/*v:*/{0.476562, 0.773438, -0.242188}, /*n:*/{0.964446, 0.263863, 0.012665}, /*t:*/{0.216737, 0.679097}},
{/*v:*/{-0.476562, 0.773438, -0.242188}, /*n:*/{-0.964446, 0.263863, 0.012665}, /*t:*/{0.052251, 0.677297}},
{/*v:*/{-0.445312, 0.781250, -0.156250}, /*n:*/{-0.715171, 0.222724, 0.662465}, /*t:*/{0.053356, 0.663955}},
...
这是我的绘图代码
...
glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f,-0.3f,-0.5f);
glVertexPointer(3, GL_FLOAT, 0, MeshVertexData);
glEnableClientState(GL_VERTEX_ARRAY);
glNormalPointer(GL_FLOAT, 0 , MeshVertexData);
glEnableClientState(GL_NORMAL_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glTexCoordPointer(2, GL_FLOAT,0,MeshVertexData);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
//glTranslatef(0.0f,-1.0f,-1.5f);
glDrawArrays(GL_TRIANGLES, 0, sizeof(MeshVertexData)/ sizeof(vertexDataTextured));
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
基本上看起来我的屏幕到处都是三角形。非常感谢对此 N00B 的任何帮助。谢谢
I have a blender image exported using Jeff LaMarche .h export script. I am trying to get it to render in OpenGL ES 1.1. I don't think I am passing my vertices, normals, and texture coords right. Can someone help me out. Here is what I have.
This is the .h file with my vertices,etc.
struct vertexDataTextured
{
GLKVector3 vertex;
GLKVector3 normal;
GLKVector2 texCoord;
};
typedef struct vertexDataTextured vertexDataTextured;
typedef vertexDataTextured* vertexDataTexturedPtr;
static const vertexDataTextured MeshVertexData[] = {
{/*v:*/{0.351562, 0.828125, -0.242188}, /*n:*/{0.183599, 0.982971, 0.005310}, /*t:*/{0.199397, 0.671493}},
{/*v:*/{0.445312, 0.781250, -0.156250}, /*n:*/{0.715171, 0.222724, 0.662465}, /*t:*/{0.216226, 0.665719}},
{/*v:*/{0.476562, 0.773438, -0.242188}, /*n:*/{0.964446, 0.263863, 0.012665}, /*t:*/{0.216737, 0.679097}},
{/*v:*/{-0.476562, 0.773438, -0.242188}, /*n:*/{-0.964446, 0.263863, 0.012665}, /*t:*/{0.052251, 0.677297}},
{/*v:*/{-0.445312, 0.781250, -0.156250}, /*n:*/{-0.715171, 0.222724, 0.662465}, /*t:*/{0.053356, 0.663955}},
...
and here is my drawing code
...
glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f,-0.3f,-0.5f);
glVertexPointer(3, GL_FLOAT, 0, MeshVertexData);
glEnableClientState(GL_VERTEX_ARRAY);
glNormalPointer(GL_FLOAT, 0 , MeshVertexData);
glEnableClientState(GL_NORMAL_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glTexCoordPointer(2, GL_FLOAT,0,MeshVertexData);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
//glTranslatef(0.0f,-1.0f,-1.5f);
glDrawArrays(GL_TRIANGLES, 0, sizeof(MeshVertexData)/ sizeof(vertexDataTextured));
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
Basically it looks like my screen threw up triangles everywhere. Any help for this N00B is very appreciated. Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您将步幅设置为 0。它应该是
sizeof (vertexDataTextured)
。它告诉 OpenGL 一个顶点(或法线或纹理坐标)与下一个顶点之间有多少字节。You're setting your stride to 0. It should be
sizeof (vertexDataTextured)
. It tells OpenGL how many bytes there are between one vertex (or normal, or texture coord) and the next.