实用指南:实验十三 Z-buffer算法实验

news/2025/11/30 13:12:33/文章来源:https://www.cnblogs.com/tlnshuju/p/19289118

实用指南:实验十三 Z-buffer算法实验

2025-11-30 13:11  tlnshuju  阅读(0)  评论(0)    收藏  举报

一、实验内容

运用opengl,做完Z-buffer算法实验。

二、实验目的

掌握Z-buffer算法实验相关内容。

三、实验代码

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <GL/glut.h>

// 定义场景中的立方体数量

#define CUBE_COUNT 5

// 定义窗口大小

#define WINDOW_WIDTH 800

#define WINDOW_HEIGHT 600

// 立方体顶点坐标

GLfloat cubeVertices[8][3] = {

{-1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {1.0, 1.0, -1.0}, {1.0, -1.0, -1.0},

{-1.0, -1.0, 1.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}

};

// 立方体面的顶点索引

GLint cubeFaces[6][4] = {

{0, 1, 2, 3}, // 前面

{1, 5, 6, 2}, // 右面

{5, 4, 7, 6}, // 后面

{4, 0, 3, 7}, // 左面

{3, 2, 6, 7}, // 底面

{4, 5, 1, 0} // 顶面

};

// 立方体各面的颜色

GLfloat cubeFaceColors[6][3] = {

{1.0, 0.0, 0.0}, // 前面红色

{1.0, 1.0, 0.0}, // 右面黄色

{0.0, 1.0, 0.0}, // 后面绿色

{0.0, 0.0, 1.0}, // 左面蓝色

{1.0, 0.5, 0.0}, // 底面橙色

{0.0, 1.0, 1.0} // 顶面青色

};

// 立方体结构体

typedef struct {

GLfloat position[3]; // 位置

GLfloat rotation[3]; // 旋转角度

GLfloat scale; // 缩放比例

} Cube;

Cube cubes[CUBE_COUNT]; // 立方体数组

// 初始化立方体

void initCubes() {

for (int i = 0; i < CUBE_COUNT; i++) {

// 随机位置,分布在不同深度

cubes[i].position[0] = (float)(rand() % 200 - 100) / 50.0;

cubes[i].position[1] = (float)(rand() % 200 - 100) / 50.0;

cubes[i].position[2] = (float)(rand() % 200 - 100) / 50.0 - 5.0;

// 初始旋转角度

cubes[i].rotation[0] = 0.0;

cubes[i].rotation[1] = 0.0;

cubes[i].rotation[2] = 0.0;

// 随机缩放比例

cubes[i].scale = (float)(rand() % 50 + 50) / 100.0;

}

}

// 绘制一个立方体

void drawCube(Cube cube) {

glPushMatrix();

// 应用变换

glTranslatef(cube.position[0], cube.position[1], cube.position[2]);

glRotatef(cube.rotation[0], 1.0, 0.0, 0.0);

glRotatef(cube.rotation[1], 0.0, 1.0, 0.0);

glRotatef(cube.rotation[2], 0.0, 0.0, 1.0);

glScalef(cube.scale, cube.scale, cube.scale);

// 绘制立方体的每个面

for (int i = 0; i < 6; i++) {

glBegin(GL_QUADS);

glColor3fv(cubeFaceColors[i]);

for (int j = 0; j < 4; j++) {

glVertex3fv(cubeVertices[cubeFaces[i][j]]);

}

glEnd();

}

glPopMatrix();

}

void init() {

glClearColor(0.0, 0.0, 0.0, 1.0);

glEnable(GL_DEPTH_TEST);

glDepthFunc(GL_LESS);

glEnable(GL_CULL_FACE);

glCullFace(GL_BACK);

}

void display() {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

// 绘制所有立方体

for (int i = 0; i < CUBE_COUNT; i++) {

drawCube(cubes[i]);

}

glutSwapBuffers(); // 交换缓冲区

}

// 重置视图

void reshape(int width, int height) {

glViewport(0, 0, (GLsizei)width, (GLsizei)height);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(45.0, (GLfloat)width / (GLfloat)height, 0.1, 100.0); // 设置透视投影

}

// 动画更新函数

void update(int value) {

// 更新立方体的旋转角度

for (int i = 0; i < CUBE_COUNT; i++) {

cubes[i].rotation[0] += 1.0;

cubes[i].rotation[1] += 2.0;

cubes[i].rotation[2] += 1.5;

}

glutPostRedisplay(); // 标记窗口需要重新绘制

glutTimerFunc(33, update, 0); // 设置下一次更新时间

}

int main(int argc, char** argv) {

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // 启用双缓冲和深度缓冲

glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);

glutInitWindowPosition(100, 100);

glutCreateWindow("Z-buffer算法实验");

init();

initCubes();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutTimerFunc(33, update, 0);

glutMainLoop();

return 0;

}

四、实验结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/981849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

升鲜宝供应链管理系统源代码---仓储式超市门店管理系统设计(一)

1.门店表(mall_shop) CREATE TABLE `mall_shop` (`id` bigint NOT NULL COMMENT 主键id,`shop_name` varchar(255) NOT NULL COMMENT 门店名称/客户名称,`shop_code` varchar(255) DEFAULT NULL COMMENT 门店编码,`sh…

RAG_查询重构与分发 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年全国信誉好的活动策划专业公司排行榜,售后完善、比较

为帮助企业高效锁定适配自身需求的活动策划合作伙伴,避免选型走弯路,我们从创意策划能力(如主题创新、流程设计)、执行落地水准(含设备搭建、现场控场)、全周期服务质量(覆盖前期调研到后期复盘)及真实客户口碑…

2025苯板雕刻加工厂TOP5权威推荐:苯板立体雕刻制造商哪

在建筑节能与装饰美学融合的趋势下,苯板雕刻作为兼具保温功能与艺术价值的关键材料,市场需求持续攀升。2024年数据显示,东北地区苯板雕刻市场规模同比增长32%,但35%的客户投诉集中在雕刻精度不足、交付延期、造型还…

java要记

ArrayList操作自定义对象进行removeAll()时,移除失效原因由于底层最用调用的是Object的equals()方法进行比较的,比较的是地址,两个对象地址当然是不同的了,移除自然会失败。解决方案:重写equals方法。【注意重写e…

关于python更换永久镜像源

在Python中更换永久镜像源主要有两种方式:pip镜像源和conda镜像源。以下是详细的配置方法: 1. pip镜像源配置 方法一:使用命令直接配置(推荐) # 清华镜像源 pip config set global.index-url https://pypi.tuna.t…

【C編程】多個.c文件聯編

W3C C tutorial將一個大型項目多個.c文件稱為模塊化編程。[1] 就是,多個.c文件互相調用。 方法是: 1)被調用方:定義.h和.c成對文件,.c要include .h文件 2) 調用方:include .h文件。 3) 聯合編譯:將兩個.c文件一…

2025年全国十大会议策划执行服务商排行榜,万贝上海文化传播

为助力企业高效匹配专业会议策划执行合作伙伴,避免选型踩坑,我们从创意策划能力、全流程落地执行力、资源整合覆盖度、客户口碑反馈及创新技术应用五大维度,对全国20+头部服务商展开深度评估,终筛选出2025年的十大…

2025年哈尔滨苯板雕刻来样定制公司排行榜,苯板雕刻品牌制造

为帮助建筑装饰、商业美陈、展会布景等领域客户精准锁定适配的苯板雕刻合作伙伴,避免因工艺不达标、交付延迟导致项目损失,我们从雕刻精度(毫米级误差控制)、定制响应速度(24小时需求反馈)、材料环保性(阻燃/防…

连接池的价值与风险——池化提升与资源枯竭的双刃剑,关键指标如何解读

连接池是现代应用架构中的基础设施,用好了是性能加速器,配置不当则成为系统崩溃的导火索在数据库应用系统中,连接管理是影响性能的关键因素之一。数据库连接池通过池化技术将昂贵的数据库连接进行复用,显著提升了系…

【大数据高并发核心场景实战】 数据持久化层 - 分表分库

我们在上一章讲到,查询分离的方案存在三大不足,其中一个就是:当主数据量越来越大时,写操作会越来越缓慢。这个问题该如何解决呢?可以考虑分表分库。今天我们会先介绍一下真实的业务场景,而后依次介绍拆分存储时如…

【机器学习13】异常检测优化、推荐框架、协同过滤

【机器学习13】异常检测优化、推荐框架、协同过滤2025-11-30 12:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

2025年电力在线监测系统推荐制造商:高性价比供应商与工厂深

在双碳目标驱动下,电力系统向数字化、智能化转型已成必然,电力在线监测系统作为电网安全运行的神经末梢,其稳定性、精准性直接关系到输电网络的可靠度。面对市场上鱼龙混杂的监测设备,如何选择电力在线监测系统推荐…

2025东北保温材料企业TOP5权威推荐:万嘉保温材料专业吗

建筑节能与装饰美化需求的双轮驱动下,保温材料及定制造型市场规模持续扩张。2024年东北区域相关市场规模突破60亿元,年增速达18%,但行业乱象频发:32%的客户投诉集中在保温材料性能不达标、定制造型精度差、交付延期…

102302134陈蔡裔数据采集第四次作业

第一题 核心代码和运行结果 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.edge.options import Options import time import sqlite3# 配置浏览器 edge_opti…

2025年国内防爆接地箱供应商推荐:接地箱定制靠谱企业有哪些

TOP1 推荐:无锡德刚精工机电设备有限公司 推荐指数:★★★★★ 口碑评分:国内防爆接地箱定制领域标杆企业 专业能力:无锡德刚精工机电设备有限公司深耕高压电力领域24年,是防爆接地箱定制的企业,拥有双研发中心及…

实用指南:攻防世界-cat_cat_new(任意文件读取、Linux敏感文件、flask-session伪造)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025简历撰写网站TOP5权威推荐:资质齐全信誉好的简历平

就业竞争白热化背景下,一份专业简历成为职场人敲开理想岗位的金钥匙。2024年数据显示,超68%的HR会因简历排版混乱、内容空洞直接淘汰候选人,而使用专业简历平台制作的简历,面试邀约率可提升55%。但市场上简历工具鱼…

2025年浙江寄宿制美术高中服务哪家好?性价比之选与口碑排名

在艺术升学竞争白热化的当下,文化+专业双优成为美术生家长的核心诉求——既要专业画室的艺考资源,又要扎实的文化课保障,还要省心的寄宿制管理。面对浙江、上海、江苏三地琳琅满目的美术高中,如何避开专业强文化弱…

2025年十大杭州泡沫雕塑服务商厂家排行榜,精选泡沫雕塑厂家

为帮企业高效锁定适配自身需求的泡沫雕塑合作伙伴,避免选型走弯路,我们从工艺技术实力(如材质耐用性、造型还原度)、定制服务能力(含创意落地效率、场景适配性)、全周期服务质量(覆盖设计到安装维护)及真实客户…