• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: 其他
  • 标签: Opengl  

资源简介

有光照的球体 添加纹理背景 可以直接运行

资源截图

代码片段和文件信息

#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


评论

共有 条评论