【WebGL】茶壶和光照

一、实验目的和要求

 

在OpenGL观察实验的基础上,通过实现实验内容,掌握OpenGL中消隐和光照的设置,并验证课程中消隐和光照的内容。

 

二、实验内容和原理

 

使用WebGL完成已有代码,达到如下的效果(示意图是以GLUT完成)

模型尺寸参见WebGL观察实验。要求修改代码达到以下要求:

  1. 利用Three.js绘制桌子,读取teapot.obj并绘制茶壶
  2. 通过设置参数使得桌面和四条腿的颜色各不相同,分别为:(1, 0, 0), (0, 1, 0), (1, 1, 0), (0, 1, 1), (0, 0, 1);
  3. 通过设置参数使得茶壶为金黄色;
  4. 添加按键处理,移动场景中的光源,并能改变光源的颜色;
  5. 修改茶壶的镜面反射系数,使之对光源呈现高光;
  6. 在场景中添加一个聚光光源,其照射区域正好覆盖茶壶,并能调整改聚光光源的照射角度和朝向。

 

三、主要仪器设备

 

WebGL

Three.js

浏览器

模板工程

 

四、操作方法和实验步骤

 

1、查看老师提供的three.js的版本,在github上下载这个版本的所有文件、文档等供备用。

2、根据老师给的框架进行修改、调整,最终完成后的代码如下:

<!--

Project Name: 实验五

Author:

Student ID:

Description: 实验5WebGL

Date: 2017.12.09

-->

<!DOCTYPE html>

<html>

<head>

<metacharset="UTF-8">

<title>WebGL实验5</title>

<scriptsrc="js/three.min.js"></script>

<scriptsrc="js/DDSLoader.js"></script>

<scriptsrc="js/MTLLoader.js"></script>

<scriptsrc="js/OBJMTLLoader.js"></script>

<scriptsrc="js/Detector.js"></script>

<scriptsrc="js/stats.min.js"></script>

 

<styletype="text/css">

div#canvas-frame {

font-family: Monospace;

background-color: #000;

color: #fff;

width: 100%;

height: 600px;

margin: 0px;

overflow: hidden;

}

</style>

 

<script>

var renderer;

var container;

var legDist=45;//桌腿之间的距离

var directionalLight;//直射光

var directionalLightColor=0xffeedd;

var globalShininess=30;//指定高光的亮度

var isDirectionalLightChanged=true;//是否改变直射光

var isSpotLightOn=false;//开启聚光光源

var directionLightPos=[0,0,1];//平行光位置

var spotLightPos=[0,200,100];//聚光灯位置

var spotLightAngel;//聚光灯角度

var mouseX=0,mouseY=0;

var windowHalfX=window.innerWidth/2;

var windowHalfY=window.innerHeight/2;

 

//初始化Three绘制canvas

function initThree(){

width = document.getElementById('canvas-frame').clientWidth;

height = document.getElementById('canvas-frame').clientHeight;

renderer =new THREE.WebGLRenderer({

antialias :true

});

renderer.setSize(width, height);

document.getEleme

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在OpenGL中画茶壶并加入光照,您需要使用OpenGL的固定功能管线。下面是一个简单的茶壶例子: 首先,您需要包含OpenGL的头文件和GLUT库: ```c++ #include <GL/gl.h> #include <GL/glut.h> ``` 然后,定义一个全局变量表示茶壶的ID: ```c++ GLuint teapot; ``` 接下来,您需要在初始化函数中创建茶壶的显示列表: ```c++ void init() { // 创建茶壶的显示列表 teapot = glGenLists(1); glNewList(teapot, GL_COMPILE); glutSolidTeapot(0.5); glEndList(); // 启用深度测试和光照 glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); } ``` 接着,您需要在绘制函数中调用茶壶的显示列表,并设置光照参数: ```c++ void display() { // 清空颜色缓冲区和深度缓冲区 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 设置光照参数 GLfloat light_pos[] = { 1.0, 1.0, 1.0, 0.0 }; GLfloat light_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; GLfloat light_diffuse[] = { 0.8, 0.8, 0.8, 1.0 }; GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glEnable(GL_LIGHT0); // 绘制茶壶 glPushMatrix(); glTranslatef(0.0, -0.3, 0.0); glCallList(teapot); glPopMatrix(); // 刷新缓冲区 glutSwapBuffers(); } ``` 最后,您需要在main函数中启动OpenGL和GLUT,如下所示: ```c++ int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(400, 400); glutCreateWindow("Teapot with Lighting"); glutDisplayFunc(display); init(); glutMainLoop(); return 0; } ``` 这样,您就可以在OpenGL中画出带光照茶壶了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值