我是靠谱客的博主 幽默朋友,最近开发中收集的这篇文章主要介绍使用OpenGL,在窗口中绘制两个立体图形,位置分别为窗口的左侧和右侧,添加光照,两个图形分别绕x轴和y轴旋转。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

总体思路:

第一步,使用viewpoint函数来建立两个分割的窗口

第二步,在两个视口分别绘制带光照效果的立体图形

第三步,使用进栈出栈函数Rotatef函数实现两图像各自的旋转

关于glPushMatrix();和glPopMatrix();

OpenGL中图形变换实现的原理是通过矩阵进行操作的。在每次变换后,opengl都将会呈现一种新的状态。如果在经过一些变换后我们想回到原来的状态,opengl就帮我们提供了两个函数:glPushMatrix()和glPopMatrix();

具体代码如下:


#include "stdafx.h"
#include <GL/glut.h>
GLint b;
void display(void)
{
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 glViewport(0, 0, 400, 400);
 glBegin(GL_LINES);
 glVertex2f(0.0, -1.0);
 glVertex2f(0.0, 1.0);
 glEnd();
//左侧
 glPushMatrix();//进栈
 glViewport(0, 0, 200, 400);
 glColor3f(1.0,0.0,0.0);
 glRotatef(b,1,0,0);
 glutSolidTeapot(0.5);
 glPopMatrix();//出栈
 //右侧

 glViewport(200, 0, 200, 400);
 glColor3f(0.0,0.0,1.0);
 glRotatef(b,0,1,0);
 glutSolidTeapot(0.5);
 glFlush();	
}
void time(int value)
{
	b+=2;
	//为防止b的数据溢出 对b进行一个判断
	if(b>=360)
		b=b-360;
	glutPostRedisplay();
	glutTimerFunc(30,time,1);
}
void reshape(int w,int h)
{
	glViewport(0,0,(GLsizei)w,(GLsizei)h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	if(w<h)
	glOrtho(-1.5,1.5, -1.5,1.5 * (GLfloat)h / (GLfloat)w, -10, 10 );
	else
		glOrtho(-1.5 * (GLfloat)w / (GLfloat)h, 1.5, -1.5 ,1.5, -10,10 );
		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();
}
void init ()
{
glClearColor(1.0,1.0,1.0,0.0);
//glColor3f(1.0,0.0,0.0);
GLfloat light0_diffuse[]= { 1.0, 1.0, 1, 1.0};
GLfloat light0_position[] = { 1.0, 1.0, 1.0, 0.0 };
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION,light0_position);
glShadeModel(GL_SMOOTH);//光滑着色,过渡色效果
glEnable(GL_LIGHTING);//启动光照,总开关
glEnable(GL_LIGHT0);//打开0号光源
glEnable(GL_DEPTH_TEST);//打开深度缓冲区,3D时候用
glEnable(GL_COLOR_MATERIAL);

}
int main(int argc, char* argv[])
{
	glutInit(&argc,argv);
	glutInitWindowPosition(200,200);
    glutInitWindowSize(500,500);
	glutCreateWindow("1");
	init();
	glutTimerFunc(30,time,1);
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutMainLoop();
	return 0;
}

结果如下:

(动态的结果,我只截取里其中的一个状态)

 

最后

以上就是幽默朋友为你收集整理的使用OpenGL,在窗口中绘制两个立体图形,位置分别为窗口的左侧和右侧,添加光照,两个图形分别绕x轴和y轴旋转。的全部内容,希望文章能够帮你解决使用OpenGL,在窗口中绘制两个立体图形,位置分别为窗口的左侧和右侧,添加光照,两个图形分别绕x轴和y轴旋转。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部