专栏中心

EEPW首页 > 专栏 > OpenGL学习笔记——04

OpenGL学习笔记——04

发布人:0750long 时间:2009-07-15 来源:工程师 发布文章
OpenGL学习笔记——04

 

点击开大图

第1行第1列,只有漫反射,没有环境光反射和镜面反射
第1行第2列,有漫反射和镜面反射,低光泽度,无环境光反射
第1行第3列,有漫反射和镜面反射,高光泽度,无环境光反射
第1行第4列,有漫反射和发射光,无环境光反射和镜面反射

第2行第1列,有环境光反射和漫反射,无镜面反射
第2行第2列,有环境光反射、漫反射、镜面反射,低光泽度
第2行第3列,有环境光反射、漫反射、镜面反射,高光泽度
第2行第4列,有环境光反射、漫反射、发射光,无镜面反射

第3行第1列,有环境光反射和漫反射,无镜面反射
第3行第2列,有环境光反射、漫反射、镜面反射,低光泽度
第3行第3列,有环境光反射、漫反射、镜面反射,高光泽度
第3行第4列,有环境光反射、漫反射、发射光,无镜面反射

源代码如下:
#include <GL/glut.h>
#include <stdlib.h>
void init()
{
GLfloat ambient[]={0.0, 0.0, 0.0, 1.0};
GLfloat diffuse[]={1.0, 1.0, 1.0, 1.0};
GLfloat specular[]={1.0, 1.0, 1.0, 1.0};
GLfloat position[]={0.0, 3.0, 2.0, 0.0};
GLfloat lmodel_ambient[]={0.4, 0.4, 0.4, 1.0};
GLfloat local_view[]={0.0};

glClearColor(0.0, 0.1, 0.1, 0.0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
void display(void)
{
GLfloat no_mat[]={0.0, 0.0, 0.0, 1.0};
GLfloat mat_ambient[]={0.7, 0.7, 0.7, 1.0};
GLfloat mat_ambient_color[]={0.8, 0.8, 0.2, 1.0};
GLfloat mat_diffuse[]={0.1, 0.5, 0.8, 1.0};
GLfloat mat_specular[]={1.0, 1.0, 1.0, 1.0};
GLfloat no_shininess[]={0.0};
GLfloat low_shininess[]={5.0};
GLfloat high_shininess[]={100.0};
GLfloat mat_emission[]={0.3, 0.2, 0.2, 0.0};
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
  glTranslatef(-3.75, 3.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(-1.25, 3.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(1.25, 3.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(3.75, 3.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(-3.75, 0.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(-1.25, 0.0, 0.0);
  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, low_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(1.25, 0.0, 0.0);
  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, high_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(3.75, 0.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(-3.75, -3.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(-1.25, -3.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(1.25, -3.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glPushMatrix();
  glTranslatef(3.75, -3.0, 0.0);
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
  glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
  glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
  glutSolidSphere(1.0, 64, 64);
glPopMatrix();
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w <= (h*2))
  glOrtho(-6.0, 6.0, -3.0*((GLfloat)h*2)/(GLfloat)w, 3.0*((GLfloat)w/(GLfloat)h*2), -10.0, 10.0);
else
  glOrtho(-6.0*(GLfloat)w/((GLfloat)h*2), 6.0*(GLfloat)w/((GLfloat)h*2), -3.0, 3.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL Test");
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

英特尔与SambaNova达成多年战略合作,携手基于至强处理器打造AI推理解决方案

P89LPC924 925 Flash单片机数据手册-03

P89LPC924 925 Flash单片机数据手册-03 (英)

七载坚守:以智能数据引擎促万业智变

P89LPC930 931 Flash单片机使用指南

魅族手机业务已经实质性停摆,或将于3月正式退市

2026-02-26

嵌入式实时操作系统VxWorks介绍 上

视频 2009-10-27

P89LPC930 931 Flash单片机数据手册-05 (英)

嵌入式实时操作系统VxWorks介绍 中

视频 2009-10-27

单季营收681亿美元,净利429亿!英伟达财报再次炸裂,黄仁勋

智能计算 2026-02-26

ROHM全面启动新型SiC塑封型模块的网售!

ENNOVI《2024年可持续发展报告》:创建可持续发展的未来

嵌入式Linux方案概览 上

视频 2009-10-27

BOE(京东方)蓝鲸显示大模型上线行业最强问答系统

锂市场供应端再生突变

2026-02-26

P89LPC930 931 Flash单片机使用指南 (英)

高通推出第五代骁龙8至尊版for Galaxy,为Galaxy S26系列带来卓越性能表现

对抗AI世界中的“互联网已死”困局

嵌入式实时操作系统VxWorks介绍 下

视频 2009-10-27

WindowsCE系统开发及bootloader移植 下

视频 2009-10-27
更多 培训课堂
更多 焦点
更多 视频

技术专区