资源简介
有光照的球体 添加纹理背景 可以直接运行
代码片段和文件信息
#include
#include
#include
float Rlr=0.8;//lamber reflection red用于球体
float Rmr=0.2;//enveriment reflection red用于球体
float Rmb=0.1;//enveriment reflection blue/green用于墙
float Rlb=0.9;//lamber reflection blue/gree用于墙
void drawball(){
glClear(GL_COLOR_BUFFER_BIT);
GLfloat texArray[7][12];//纹理定义
for(int i=0;i<7;i++){
for(int j=0;j<=2;j+=2){
if(i%2==0){
texArray[i][3*j]=0.0;
texArray[i][3*j+1]=0.0;
texArray[i][3*j+2]=1.0;
}
else{
texArray[i][3*j]=0.0;
texArray[i][3*j+1]=1.0;
texArray[i][3*j+2]=1.0;
}
}
for(int k=1;k<=3;k+=2){
if(i%2==0){
texArray[i][3*k]=0.0;
texArray[i][3*k+1]=1.0;
texArray[i][3*k+2]=1.0;
}
else{
texArray[i][3*k]=0.0;
texArray[i][3*k+1]=0.0;
texArray[i][3*k+2]=1.0;
}
}
}//定义纹理为绿蓝相间的颜色
float redl=0.0;
float bluel=Rlb*0.6/sqrt(10);
int count1y=0;
for(float yw1=-20.0;yw1<=50.0;yw1+=0.1){
int count1x=0;
for(float xw1=-10.0;xw1<=40.0;xw1+=0.1){
glColor3f(Rmb*texArray[count1y][3*count1x]Rmb*texArray[count1y][3*count1x+1]Rmb*texArray[count1y][3*count1x+2]);
glBegin(GL_POINTS);
glVertex2f(xw1yw1);
glEnd();
if(xw1!=(-10.0)){
float b=(xw1+10.0)*10.0;
int a=int(b);
if(a%125==0)count1x++;
}
}
if(yw1!=-20.0&&(int((yw1+20.0)*10))%100==0)count1y++;
}//XY墙
int count2y=0;
for(float yw2=-20.0;yw2<=50.0;yw2+=0.1){
int count2x=0;
for(float xw2=-40.0;xw2<=-10.0;xw2+=0.1){
glColor3f((Rmb+bluel)*texArray[count2y][3*count2x](Rmb+bluel)*texArray[count2y][3*count2x+1](Rmb+bluel)*texArray[count2y][3*count2x+2]);
glBegin(GL_POINTS);
glVertex2f(xw2yw2);
glEnd();
float b=(xw2+40.0)*10.0;
int a=int(b);
if(a!=0&&a%75==0)count2x++;
}
if(yw2!=-20.0&&(int((yw2+20.0)*10))%100==0)count2y++;
}//斜墙
for(float y=-20.0;y<=20.0;y+=0.1){
for(float x=(-1)*sqrt(400-y*y);x<=sqrt(400-y*y);x+=0.1){
redl=(Rlr*(3*x+4*y)/100)>=0.0?(Rlr*(3*x+4*y)/100):0.0;//朗伯漫反射
float mirror=(3*x+4*y+5*sqrt(400-y*y-x*x))/(100*sqrt(2))>0.0?(3*x+4*y+5*sqrt(400-y*y-x*x))/(100*sqrt(2)):0.0;
float mirror13=mirror*mirror*mirror*mirror*mirror*mirror*mirror*mirror*mirror*mirror*mirror*mirror*mirror;
float mirror26=mirror13*mirror13;//镜面反射
glColor3f(redl+Rmr+0.9*mirror260.9*mirror260.9*mirror26);
glBegin(GL_POINTS);
glVertex2f(xy);
glEnd();
}
}
glFlush();
}//球体
void init(){
glClearColor(1.01.01.00.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-40.040.0-20.050.0);
}
void main(int argcchar** argv){
glutInit(&argcargv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(800700);
glutCreateWindow(“Real scene“);
init();
glutDisplayFunc(drawball);
glutMainLoop();
}属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2797 2008-01-21 01:32 real.cpp
----------- --------- ---------- ----- ----
3015 2
相关资源
- OpenGL参考手册
- Qt Creator opengl实现四元数鼠标控制轨迹
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- opengl室内场景的绘制,包括碰撞检测
川公网安备 51152502000135号
评论
共有 条评论