
opengl绘制一个球体的程序
#define GLUT_DISABLE_ATEXIT_HACK
#include <GL\glut.h>
#include <math.h>
#define x .52573
#define z .85965
void mydisplay(void){
static GLfloat vdata[12][3]={{-x,0.0,z},{x,0.0,z},{-x,0.0,-z},{x,0.0,-z},
{0.0,z,x},{0.0,z,-x},{0.0,-z,x},{0.0,-z,-x},
{z,x,0.0},{-z,x,0.0},{z,-x,0.0},{-z,-x,0.0}
};
static GLuint tindices[20][3]={{1,4,0},{4,9,0},{4,5,9},{8,5,4},{1,8,4},
{1,10,8},{10,3,8},{8,3,5},{3,2,5},{3,7,2},
{3,10,7},{10,6,7},{6,11,7},{6,0,11},{6,1,0},
{10,1,6},{11,0,9},{2,11,9},{5,2,9},{11,2,7}
};
int i;
glBegin(GL_TRIANGLES);
for(i=0;i<20;i++){
glVertex3fv(&vdata [&tindices[i][0][0]]);
glVertex3fv(&vdata [tindices[i][1][0]]);
glVertex3fv(&vdata [tindices[i][2][0]]);
}
glEnd();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&mydisplay);
glutMainLoop();
return 0;
} 展开
语法也有错误:glVertex3fv(&vdata [&tindices[i][0][0]]);
glVertex3fv(&vdata [tindices[i][1][0]]);
glVertex3fv(&vdata [tindices[i][2][0]]);
改为:
glVertex3fv(vdata [tindices[i][0]]);
glVertex3fv(vdata [tindices[i][1]]);
glVertex3fv(vdata [tindices[i][2]]);
我的运行环境是在QT IDE上运行的。4.7.0版。
如果你是在VC上运行应该也要加入opengl32,glut,glut32库(32位WIN上的),
另外,这个程序你是看不到一个球体的,因为你没有使用光照,只能看到一个轮廓。
我的Qt上我加入的库是:opengl32,glut,glee5(glee5是glee是自己编译的替换glut32库)
头加入了:windown.h,gl/glee.h(glee.h就是glee的头文件在网上可以下载,比gl.h要高级,因为WIN上的gl.h只支持到opengl32的1.1版)
源文件:
#include <windows.h>///////////////////////////////
#include <GL/glee.h>
////////////////////////////////
#include <GL\glut.h>
#include <math.h>
#define x .52573
#define z .85965
void mydisplay(void)
{
static GLfloat vdata[12][3]={{-x,0.0,z},
{x,0.0,z},
{-x,0.0,-z},
{x,0.0,-z},
{0.0,z,x},
{0.0,z,-x},
{0.0,-z,x},
{0.0,-z,-x},
{z,x,0.0},
{-z,x,0.0},
{z,-x,0.0},
{-z,-x,0.0}};
static GLuint tindices[20][3]={{1,4,0},
{4,9,0},
{4,5,9},
{8,5,4},
{1,8,4},
{1,10,8},
{10,3,8},
{8,3,5},
{3,2,5},
{3,7,2},
{3,10,7},
{10,6,7},
{6,11,7},
{6,0,11},
{6,1,0},
{10,1,6},
{11,0,9},
{2,11,9},
{5,2,9},
{11,2,7}};
int i;
glBegin(GL_TRIANGLES);
for(i=0;i<20;i++)
{
glVertex3fv(vdata [tindices[i][0]]);//////////////////////////////////////////////
glVertex3fv(vdata [tindices[i][1]]);/////////////////////////////////////////////
glVertex3fv(vdata [tindices[i][2]]);////////////////////////////////////////////
}
glEnd();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&mydisplay);
glutMainLoop();
return 0;
}
后面加了///////////////////////////////////是我修改了的。
我用的连接库是:
LIBS=-lopengl32 -lfreeglut -lglee5
谢谢你!那我要怎样才能让他看起来想一个球呢?或者实现它的旋转效果?
你现在这个只是一个多面体,实际上你现在画出来的只是一个X,Y两个轴上的,Z=0,只是一个二维物体。看不出来是一个“体”,就算你把Z也加上去,必须得增加光照,你学到光照那章之后就会画出一个真正的球体等物体。如果你想现在就用光照,就看一下那章吧。用到环境光,反射光,光源的位置,慢慢来,别心急。我不知道你用的是哪本书,我推荐你学OpenGL的蓝宝书,比较容易入门,就是《OpenGL超级宝典》——就是OpenGL的蓝宝书,另外还有一本《OpenGL编程指南》——OpenGL红宝书,有点难,最好是两本书结合一超看。各 有优点

2023-08-15 广告