OpenGL “teapot” 光照模型

用 OpenGL 实现简单的光照效果。

功能要求:
  1. 显示默认的 Teapot 模型
  2. 为 Teapot 模型建立 Smooth Shading 效果,如图 1 所示。
实现提示:
  1. 利用 OpenGL 的 API 初始化 material property, light source, lighting model, depth buffer 等信息。
python OpengL实现
# 导入相关库
from OpenGL.GL import *
from OpenGL.GLUT import *


# 初始化OpenGL函数
def init():
    # 材质反光性设置
    mat_specular = [1.0, 1.0, 1.0, 1.0]   # 镜面反射参数
    mat_shininess = [50.0]                # 高光指数
    light_position = [1.0, 1.0, 1.0, 0.0]  # 光源位置
    white_light = [1.0, 1.0, 1.0, 1.0]    # 灯位置(1,1,1), 最后1-开关
    light_model_ambient = [0.2, 0.2, 0.2, 1.0]   # 环境光参数

    glClearColor(0.0, 0.0, 0.0, 0.0)  # 背景色
    glShadeModel(GL_SMOOTH)            # 填充模式

    # 材质属性 material property
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular) 
    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess) 

    # 灯光设置
    glLightfv(GL_LIGHT0, GL_POSITION, light_position) 
    glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light)    # 散射光属性
    glLightfv(GL_LIGHT0, GL_SPECULAR, white_light)   # 镜面反射光
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light_model_ambient)

    glEnable(GL_LIGHTING)    # 开关:使用光
    glEnable(GL_LIGHT0)      # 打开0#灯
    glEnable(GL_DEPTH_TEST)  # 打开深度测试


def display():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    glutSolidTeapot(0.5)  # 茶壶绘制
    glFlush()


def reshape(w, h):
    glViewport(0, 0, w, h)
    # 设置投影参数
    glMatrixMode(GL_PROJECTION) 
    glLoadIdentity() 
    # 正交投影
    if w <= h:
        glOrtho(-1.5, 1.5, -1.5*h / w, 1.5*h / w, -10.0, 10.0)
    else:
        glOrtho(-1.5*w / h, 1.5*w / h, -1.5, 1.5, -10.0, 10.0)
    # 设置模型参数--几何体参数
    glMatrixMode(GL_MODELVIEW) 
    glLoadIdentity()
    

if __name__ == "__main__":
    glutInit()
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH)
    glutInitWindowSize(400, 400)
    glutInitWindowPosition(100, 100) 
    glutCreateWindow("Teapot-Shading")

    init()
    glutDisplayFunc(display)
    glutReshapeFunc(reshape)
    glutMainLoop() 

运行结果
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值