标签:opengl
一 基本数据类型typedef struct { GLfloat x; GLfloat y; GLfloat z; } Vertex3D; static inline Vertex3D Vertex3DMake(CGFloat inX, CGFloat inY, CGFloat inZ) { Vertex3D ret; ret.x = inX; ret.y = inY; ret.z = inZ; return ret; } static inline GLfloat Vertex3DCalculateDistanceBetweenVertices (Vertex3D first, Vertex3D second) { GLfloat deltaX = second.x - first.x; GLfloat deltaY = second.y - first.y; GLfloat deltaZ = second.z - first.z; return sqrtf(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ ); };
Vertex3D vertex; vertex.x = 10.0; vertex.y = 23.75; vertex.z = -12.532;
typedef struct { Vertex3D v1; Vertex3D v2; Vertex3D v3; } Triangle3D; static inline Triangle3D Triangle3DMake(Vertex3D v1, Vertex3D v2, Vertex3D v3);
// 创建一个三角形 Vertex3D vertex1 = Vertex3DMake(0.0, 1.0, -3.0); Vertex3D vertex2 = Vertex3DMake(1.0, 0.0, -3.0); Vertex3D vertex3 = Vertex3DMake(-1.0, 0.0, -3.0); Triangle3D triangle = Triangle3DMake(vertex1, vertex2, vertex3); // 绘制三角形 glLoadIdentity();// 加载单位矩阵,清除虚拟世界中的一切旋转,移动或其他变化并将观察者置于原点 glClearColor(0.7, 0.7, 0.7, 1.0);// 设置背景色的RGBA glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 通知OpenGL清除以前的一切图形并将其设为clear颜色。 glEnableClientState(GL_VERTEX_ARRAY);// 启动OpenGL的vertex arrays(顶点数组)特性 glColor4f(1.0, 0.0, 0.0, 1.0);// 设置了绘图时所需的颜色RGBA glVertexPointer(3, GL_FLOAT, 0, &triangle);// 设置绘制路径 glDrawArrays(GL_TRIANGLES, 0, 9);// 绘制三角形 glDisableClientState(GL_VERTEX_ARRAY);// 禁止先前启动的顶点数组特效
Triangle3D triangle[2]; triangle[0].v1 = Vertex3DMake(0.0, 1.0, -3.0); triangle[0].v2 = Vertex3DMake(1.0, 0.0, -3.0); triangle[0].v3 = Vertex3DMake(-1.0, 0.0, -3.0); triangle[1].v1 = Vertex3DMake(-1.0, 0.0, -3.0); triangle[1].v2 = Vertex3DMake(1.0, 0.0, -3.0); triangle[1].v3 = Vertex3DMake(0.0, -1.0, -3.0); glLoadIdentity(); glClearColor(0.7, 0.7, 0.7, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnableClientState(GL_VERTEX_ARRAY); glColor4f(1.0, 0.0, 0.0, 1.0); glVertexPointer(3, GL_FLOAT, 0, &triangle); glDrawArrays(GL_TRIANGLES, 0, 18); glDisableClientState(GL_VERTEX_ARRAY);
static inline void Vertex3DSet(Vertex3D *vertex, CGFloat inX, CGFloat inY, CGFloat inZ) { vertex->x = inX; vertex->y = inY; vertex->z = inZ; }
Triangle3D *triangles = malloc(sizeof(Triangle3D) * 2); Vertex3DSet(&triangles[0].v1, 0.0, 1.0, -3.0); Vertex3DSet(&triangles[0].v2, 1.0, 0.0, -3.0); Vertex3DSet(&triangles[0].v3, -1.0, 0.0, -3.0); Vertex3DSet(&triangles[1].v1, -1.0, 0.0, -3.0); Vertex3DSet(&triangles[1].v2, 1.0, 0.0, -3.0); Vertex3DSet(&triangles[1].v3, 0.0, -1.0, -3.0); glLoadIdentity(); glClearColor(0.7, 0.7, 0.7, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnableClientState(GL_VERTEX_ARRAY); glColor4f(1.0, 0.0, 0.0, 1.0); glVertexPointer(3, GL_FLOAT, 0, triangles); glDrawArrays(GL_TRIANGLES, 0, 18); glDisableClientState(GL_VERTEX_ARRAY); if (triangles != NULL) free(triangles);
标签:opengl
原文地址:http://blog.csdn.net/xufeng0991/article/details/45148871