OpenGlL---球形的绘制

                                                        球形的绘制

一、函数解释 

glClearDepth   深度函数,用于实现实心物体的遮挡。

glShadeModel   为上色模式。是使用GL_FLAT还是GL_SMOOTH

glEnable       启用了光照功能

glLightfv      创建光源函数(这里使用了多个光源)

glOrtho        屏幕截取函数.只是负责使用什么样的视景体来截取图像,并不负责使用某种规则把图像呈现在屏幕上。就是无论你怎样截取它都显示该有的样子--比如装不下那么就显示不部分.

glRotatef       将图形进行旋转的函数.第一个是参数为angle,第二个参数为x,第三个参数为y,第四个参数为z,这里是绕着y轴旋转.

glMaterialfv    决定了材料。其中第一个为使用于物体的正面还是反面。Pname 指的是材质的属性param为要设置的属性值指向了一个数组

glutSolidSphere    画个球,5.0代表着半径,30为以Z轴上线段为直径分布的圆周线的条数(将Z轴看成地球的地轴,类似于经线),30是围绕在Z轴周围的线的条数

二、代码实现

#include <windows.h>  
#include <gl/GL.h>  
#include <gl/glu.h>  
#include <gl/glut.h>  
#include <cstdlib>  
const GLfloat lightPosition[] = { 10.0, 10.0, 10.0, 0.0 };
const GLfloat whiteLight[] = { 0.8, 0.8, 0.8, 1.0 };
GLfloat matSpecular[] = { 0.3, 0.3, 0.3, 1.0 };
GLfloat matShininess[] = { 20.0 };
GLfloat matEmission[] = { 0.3, 0.3, 0.3, 1.0 };
GLfloat spin = 0;
void init()
{
	glClearColor(0.3, 0.3, 0.3, 1.0);
	glClearDepth(1.0);
	glShadeModel(GL_SMOOTH);
	glEnable(GL_LIGHTING);//启用光照功能
	glEnable(GL_LIGHT0);
	glEnable(GL_DEPTH_TEST);
	glMatrixMode(GL_MODELVIEW);


	glLoadIdentity();
	glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);//创建多个光源
	glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteLight);//
	glLightfv(GL_LIGHT0, GL_SPECULAR, whiteLight);
	
}
void display()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();;
	glOrtho(-10.0, 10.0, -10.0, 10.0, -10.0, 10.0); //glOrtho函数只是负责使用什么样的视景体来截取图像,并不负责使用某种规则把图像呈现在屏幕上。就是无论你怎样截取它都显示该有的样子--比如装不下那么就显示不部分
	glMatrixMode(GL_MODELVIEW);//初始化
	glPushMatrix();
	glRotatef(spin, 0.0, 1.0, 0.0);//旋转的函数,第一个是参数为angle,第二个参数为x,第三个参数为y,第四个参数为z,这里是绕着y轴旋转
	glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular);
	glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
	glMaterialfv(GL_FRONT, GL_EMISSION, matEmission);
	glutSolidSphere(5.0, 30, 30);//画个球,5.0代表着半径,30为以Z轴上线段为直径分布的圆周线的条数(将Z轴看成地球的地轴,类似于经线),30是围绕在Z轴周围的线的条数
	glPopMatrix(); //配对使用可以消除上一次的变换对本次变换的影响
	glFlush();
}
void reshape(int w, int h)
{
	glViewport(0.0, 0.0, (GLsizei)w, (GLsizei)h);
}
int main(int argc, char *argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
	glutInitWindowSize(450, 450);
	glutInitWindowPosition(150, 150);
	glutCreateWindow("rotate sphere");
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	init();
	glutMainLoop();
	return EXIT_SUCCESS;
}

三、实现结果

  

 

 

 

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值