opengl项目一实验报告
Opengl项目一学院1 计算机班计:0421002日期:10-31学号2010212010姓名计计烽
成计
一、计目分析
利用OpenGL计制一计计的计景个
–网数 包含球、正方形、格据
– 交互操作,平移、计放、旋计
–灯 可以使用不同的光
• 计目1作计上交容 计目作 交容内内
– 代计
– 计告
• 计要介计计目的计计情况
• 计景介计~不同的计景要有不同的计支持• 操作介计~不同的操作要有操作后的计支持• 光介计~不同的光要有不同光下的计支持灯灯灯
计 GL的理解
二、计景介计
计始,
开灯:
旋:开开
移:开开
放大:
开小:
三、代计
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
#include
#include
float m_xRotation;
float m_yRotation;
float m_xTranslation;
float m_yTranslation;
float m_zTranslation;
float m_xScaling;
float m_yScaling;
float m_zScaling;
static int cpt1=45; //定自角度开开开开开
static int cpt2=45; //定公的开开开开?度
BOOL bColorMaterial = FALSE;//开色跟踪Á模式void InitGeometry()
{
m_xRotation=0.0;//初始不旋也不平移除了沿也开开开开开开开开开开开开开开放
m_yRotation=0.0;
m_xTranslation=3.0;
m_yTranslation=4.0;
m_zTranslation=-1.0;
m_xScaling=1.0;
m_yScaling=1.0;
m_zScaling=1.0;
}
void SetupRC(void)
{
//全局光照系数
GLfloat globel_ambient[] = { 0.1 , 0.1, 0.2 , 0.0 };
//打全局光照开开开开开?
glLightModelfv(GL_LIGHT_MODEL_AMBIENT , globel_ambient);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);}
void ChangeSize(GLsizei w, GLsizei h)
{
if(h == 0)h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w, -10.0,
10.0);
else
glOrtho (-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0,
10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
// 重置坐系使投影位开开开开开开开开开开?
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//定景前开开开开开开3个参数
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示点的空位置中个参数表示参考点的空位置最后开开开开开开开开开开开开开开开开开开开开开开开开
//个参数表示向上向量的方向
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
void RenderScene(void)
{
float i;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glLoadIdentity();
glPushMatrix();
glTranslatef(0.0,0.0,0.0);
glRotatef ((GLfloat) cpt1, -1.0, 1.0, 1.0); //ball自的偏角度开开开开开开开
glutSolidSphere(0.6,40,40);
glPopMatrix();
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);glRectf(-1.0,-1.0,1.0,1.0);//正方形
for(i=-100.0f;i<=100.0f;i=i+0.2f)
{
glBegin(GL_LINES);
glVertex2f(i,-100.0f);
glVertex2f(i,100.0f);
glEnd();
glBegin(GL_LINES);
glVertex2f(-100.0f,i);
glVertex2f(100.0f,i);
glEnd();
}
//开启双面光照?
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
glutSwapBuffers(); // 刷新命令冲区开开开
glFlush();
}
void display(int value)
{
switch (value)
{
case 1:{
GLfloat mat_ambient[]= { 0.2f, 0.2f, 0.2f, 1.0f };GLfloat mat_diffuse[]= { 1.0f, 0.6f, 1.0f, 1.0f };GLfloat mat_specular[] = { 0.8f, 1.0f, 1.0f, 1.0f };GLfloat mat_shininess[] = { 50.0f };
GLfloat mat_emission[]={0.3f, 0.2f, 0.1f, 0.0f};GLfloat light0_diffuse[]= { 0.8f, 0.1f, 0.4f, 1.0f};GLfloat light0_position[] = { 1.0f, 0.8f, 0.5f, 0.0f };GLfloat light0_ambient[]= { 0.2f, 0.2f, 0.2f, 1.0f };GLfloat light0_specular[] = { 1.0f, 0.6f, 0.6f, 1.0f };GLfloat light1_ambient[]= { 0.2f, 0.5f, 0.2f, 1.0f };GLfloat light1_specular[] = { 1.0f, 0.6f, 0.6f, 1.0f };GLfloat light1_diffuse[]= { 0.3f, 1.0f, 0.1f, 1.0f };GLfloat light1_position[] = { -3.0f, -3.0f, 3.0f, 1.0f };GLfloat spot_direction[]={ 1.0f, 1.0f, -2.0f};//定材属性开开开开开?
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS,mat_shininess);
glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);//light0开漫反射的READ色点光源
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);glLightfv(GL_LIGHT0, GL_POSITION,light0_position);glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);glLightfv(GL_LIGHT0, GL_SPECULAR,light0_specular);//light1开BLUE聚光光源
glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);glLightfv(GL_LIGHT1, GL_SPECULAR,light1_specular);glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);glLightfv(GL_LIGHT1, GL_POSITION,light1_position);glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 30.0);glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION,spot_direction);glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_DEPTH_TEST);
break;}
//开灯
case 2:{
glEnable(GL_LIGHTING);
glDisable(GL_LIGHT0);
glDisable(GL_LIGHT1);
glEnable(GL_DEPTH_TEST);
break;}
//开灯
case 3:{
glTranslatef(2.0,1.0, 1.0);
break;
//移开
}
case 4:{
glScalef(2.0,2.0,2.0);
break;
}
//放大
case 5:{
glScalef(0.1,0.1,0.1);
break;
}
//开小
}
}
void right_menu(int id)
{
switch(id)
{
case 1:
display(1);
break;
case 2:
display(2);
break;
case 3:
display(3);
break;
case 4:
display(4);
break;
case 5:
display(5);
break;
default:
break;
}
glutPostRedisplay();
}
void main(void)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(600,400);
glutInitWindowPosition(300,300);
glutCreateWindow("opengl开目一");
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
glutCreateMenu(right_menu);
glutAddMenuEntry("开灯",1);
glutAddMenuEntry("灯",2);
glutAddMenuEntry("移开",3);
glutAddMenuEntry("放大",4);
glutAddMenuEntry("开小",5);
glutAttachMenu(GLUT_RIGHT_BUTTON);
SetupRC();
glutMainLoop();
}
四、计GL的理解
通计计段计计计OPENGL的计~我计计计然学GL不需要太计计的计言~不计想要正真学
好计是非常不容易的。它
OpenGL;全写Open Graphics Library,是定计了一跨计程计言、跨平台个个的计程接口的计格~用于三计计象;二计的亦可,。它OpenGL是计计的计形程序接个口~是一功能强大~计用方便的底计计形计。个