使用 openGL ES 1.1 渲染 .h Blender 导出到 iPhone

发布于 2025-01-07 07:11:24 字数 2136 浏览 4 评论 0原文

我有一个使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只等公子 2025-01-14 07:11:24

您将步幅设置为 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文