glvertexpointer std::vector,结构内存 opengl
Posted
技术标签:
【中文标题】glvertexpointer std::vector,结构内存 opengl【英文标题】:glvertexpointer std::vector, struct memory opengl 【发布时间】:2013-07-17 14:48:57 【问题描述】:我使用结构
struct Vertex
float pos[3];
float tex[2] = 0, 0;
float norm[3] = 0, 0, 0;
int index_mtl;
;
我使用矢量
std::vector<Vertex> verts;
如何为我的结构向量使用“glvertexpointer”。
我想用那个功能画画。最后我没有成功。
void Obj_render::DrawObject()
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, verts.data()->pos);
glDrawArrays(GL_TRIANGLES,0,3);
// deactivate vertex arrays after drawing
glDisableClientState(GL_VERTEX_ARRAY);
【问题讨论】:
那些struct
成员初始化器是 C99/C++11 的特性吗? VS2010 似乎让他们窒息。
【参考方案1】:
如果您使用struct
这样您的顶点不再紧密排列,您需要指定步幅:
glEnableClientState( GL_VERTEX_ARRAY );
glVertexPointer( 3, GL_FLOAT, sizeof( Vertex ), &verts[0].pos );
glDrawArrays( GL_TRIANGLES, 0, 3 );
glDisableClientState(GL_VERTEX_ARRAY);
像这样:
#include <GL/glut.h>
#include <vector>
struct Vertex
float pos[3];
float tex[2];
float norm[3];
int index_mtl;
;
std::vector< Vertex > verts;
void display()
glClear( GL_COLOR_BUFFER_BIT );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -2, 2, -2, 2, -1, 1 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glColor3ub( 255, 0, 0 );
glEnableClientState( GL_VERTEX_ARRAY );
glVertexPointer( 3, GL_FLOAT, sizeof( Vertex ), &verts[0].pos );
glDrawArrays( GL_TRIANGLES, 0, 3 );
glDisableClientState(GL_VERTEX_ARRAY);
glutSwapBuffers();
int main( int argc, char **argv )
Vertex tmp;
tmp.pos[0] = 0;
tmp.pos[1] = 0;
tmp.pos[2] = 0;
verts.push_back( tmp );
tmp.pos[0] = 1;
tmp.pos[1] = 0;
tmp.pos[2] = 0;
verts.push_back( tmp );
tmp.pos[0] = 1;
tmp.pos[1] = 1;
tmp.pos[2] = 0;
verts.push_back( tmp );
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutInitWindowSize( 640, 480 );
glutCreateWindow( "GLUT" );
glutDisplayFunc( display );
glutMainLoop();
return 0;
【讨论】:
以上是关于glvertexpointer std::vector,结构内存 opengl的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 glDrawArrays 和 glVertexPointer?
openGL之API学习(一八八)glVertexAttribPointer和glVertexPointer
NDK OpenGL 未定义对 glVertexPointer 的引用