资源简介
有光照的球体 添加纹理背景 可以直接运行
代码片段和文件信息
#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法向量计算
- GLUT库(glut.h、glut32.dll、glut32.lib)
- opengl的鼠标画线,圆,矩形,还有个
-
The Tao fr
amework 2.1.0 - OPENGL绘制三维地形图
- OpenGL实现对三维对象的旋转、平移和
- 在opengl里读取catia文件
- opengl二维图形转换为三维图形
- 三维模型文件中的OBJ格式在OpenGL中的
- opengl自行车动画实验报告
- OPENGL开发的茶壶光影、渲染、旋转、
- opengl 球体
- 基于OpenGL的场景迷宫漫游可以碰撞检
- opengl鼠标控制视角 不透明度改变 光照
- 3D 模型OpenGL显示,旋转、缩放,平移
- 利用OpenGL和ArcGIS处理得到的坐标数据
- QT绘制简单OpenGL图形
- opengl相机类
- glut.dll和glut32.dll
- opengl渲染到纹理技术
- 3d贪吃蛇游戏
- opengl头文件和库glut工具包
- 圆的扫描转换_计算机专业_OpenGL实验
- 用opengl编写的二十面体
- opengl 小球的碰撞和反弹模拟
- 3DS文件导入opengl程序
- 用OpenGL绘制汽车并控制
- GLSL 基础介绍OpenGLES 2.0
- 开源3D游戏引擎 HXEngine
- opengl光照、纹理映射和键盘控制
评论
共有 条评论