当前位置: 首页 > news >正文

C++OpenGL三维显示镜面反射光线漫反射实例

程序示例精选
C++OpenGL三维显示镜面反射光线漫反射实例
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《C++OpenGL三维显示镜面反射光线漫反射实例》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


运行结果


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. Python
       2. Pycharm

二、使用步骤

代码如下(示例):
void init() {glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(500, 500);glutCreateWindow("ObjLoader");glEnable(GL_DEPTH_TEST);//glDisable(GL_DEPTH_TEST);glShadeModel(GL_SMOOTH); setLightRes();glEnable(GL_DEPTH_TEST);// objModel.Init();glDepthFunc(GL_LEQUAL); // 设置深度测试函数
}void display() {glColor3f(1.0, 1.0, 1.0);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();// 应用平移和缩放glTranslatef(transX, transY, -270.0f); // 应用水平和垂直平移141.0fglScalef(zoomFactor, zoomFactor, zoomFactor); // 应用缩放setLightRes();glPushMatrix();// 更新gluLookAt以使用vertDegree进行垂直旋转float vertRad = c * vertDegree; // 将vertDegree转换为弧度gluLookAt(r * cos(c * degree) * cos(vertRad), r * sin(vertRad), r * sin(c * degree) * cos(vertRad),0.0f, 0.0f, 0.0f,0.0f, 1.0f, 0.0f);// 根据计算出的中心坐标平移模型glTranslatef(-objModel.center[0], -objModel.center[1], -objModel.center[2]);objModel.Draw();glPopMatrix();glutSwapBuffers();
}void reshape(int width, int height) {glViewport(0, 0, width, height);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0f, (GLdouble)width / (GLdouble)height, 1.0f, 200.0f);glMatrixMode(GL_MODELVIEW);
}// 在全局范围内定义一个变量来追踪当前鼠标操作
enum MouseAction { NONE, ROTATE, TRANSLATE };
MouseAction currentAction = NONE;void mouseButton(int button, int state, int x, int y) {if (state == GLUT_DOWN) {if (button == GLUT_LEFT_BUTTON) {currentAction = ROTATE;oldPosX = x;oldPosY = y;}else if (button == GLUT_RIGHT_BUTTON) {currentAction = TRANSLATE;oldRightPosX = x;oldRightPosY = y;}}else if (state == GLUT_UP) {currentAction = NONE;}
}void mouseMove(int x, int y) {if (currentAction == ROTATE) {int deltaX = x - oldPosX;int deltaY = y - oldPosY;degree += deltaX;vertDegree += deltaY;oldPosX = x;oldPosY = y;}else if (currentAction == TRANSLATE) {transX += (x - oldRightPosX) * 0.01f;transY -= (y - oldRightPosY) * 0.01f;oldRightPosX = x;oldRightPosY = y;}glutPostRedisplay();
}//滚轮没反应
void mouseWheel(int wheel, int direction, int x, int y) //
{cout << "test " << endl;cout << "Mouse wheel event detected. Direction: " << direction << endl;if (direction > 0) {zoomFactor += 0.1f; // 增加缩放因子}else {zoomFactor -= 0.1f; // 减小缩放因子}// 防止缩放因子小于等于0if (zoomFactor <= 0.1f) {zoomFactor = 0.1f;}glutPostRedisplay();
}void processNormalKeys(unsigned char key, int x, int y) {switch (key) {case 'w': // Pressing "w" key, zoom incout << "Zoom factor increased by 0.1\n"; zoomFactor += 0.1f;break;case 's': // Pressing "s" key, zoom outzoomFactor -= 0.1f;if (zoomFactor <= 0.1f) {zoomFactor = 0.1f; // Prevent zoomFactor from going below 0.1}break;case 27: // Pressing the Esc key (ASCII value 27) to exit the programexit(0);break;// Add more cases for handling other keys as needed}glutPostRedisplay();
}void specialKeys(int key, int x, int y) {switch (key) {case GLUT_KEY_UP:// 按下上方向键,进行相应操作break;case GLUT_KEY_DOWN:// 按下下方向键,进行相应操作break;}glutPostRedisplay();
}void myIdle() {glutPostRedisplay();
}int main(int argc, char* argv[]) {glutInit(&argc, argv);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMouseFunc(mouseButton);glutMotionFunc(mouseMove);glutMouseWheelFunc(mouseWheel);glutKeyboardFunc(processNormalKeys);     // 处理一般的键盘事件glutSpecialFunc(specialKeys);  // 处理特殊键盘事件glutIdleFunc(myIdle);// 在此处调用 CalculateCenter() 函数objModel.CalculateCenter();// 打印模型的中心坐标objModel.PrintCenter();// 计算并打印模型长宽高objModel.CalculateBoundingBox();objModel.PrintBoundingBox();glutMainLoop();return 0;
}
运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

相关文章:

C++OpenGL三维显示镜面反射光线漫反射实例

程序示例精选 COpenGL三维显示镜面反射光线漫反射实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《COpenGL三维显示镜面反射光线漫反射实例》编写代码&#xff0c;代码整洁&#xff0c;…...

【前端面试】从npm 升级到 pnpm的总结

pnpm优势 pnpm 和 npm 在性能上存在一些明显的差异,这也是一些开发者选择从 npm 切换到 pnpm 的原因。以下是一些关键的差异和原因: 1. 速度: pnpm 比 npm 快了近 2 倍,它通过优化的依赖管理,显著提高了安装速度 。 2. 磁盘空间效率: pnpm 使用基于内容寻址的文件系…...

同步外网YUM源-3

在企业实际应用场景中,仅仅靠光盘里面的RPM软件包是不能满足需要,我们可以把外网的YUM源中的所有软件包同步至本地,可以完善本地YUM源的软件包数量及完整性。 获取外网YUM源软件常见方法包括Rsync、Wget、Reposync,三种同步方法的区别Rsync方式需要外网YUM源支持RSYNC协议…...

Linux的oracle数据库导入其他用户导出的数据库文件

如果用户使用的是expdp的命令&#xff0c;导入就要使用impdp命令&#xff0c;本文以impdp为例进行介绍 1、查看当前创建的所有dmp导出目录 select * from dba_directories 2、为创建的目录赋权限 比如咱们将数据库导入到test用户&#xff0c; grant read,write on directo…...

FLUX.1 文生图模型微调指南

FLUX.1 是 Black Forest Labs 今年夏天发布的文本转图像模型系列。FLUX.1 模型为开源图像生成模型树立了新标准&#xff1a;它们可以生成逼真的手、清晰的文本&#xff0c;甚至可以生成搞笑表情包这样异常困难的任务。 现在&#xff0c;你可以使用 Ostris 的 Replicate 上的 A…...

JavaWeb基础:HTTP协议与Tomcat服务器

目录 1. HTTP协议简介 示例代码&#xff1a;创建HTTP GET请求 2. Tomcat服务器介绍 Tomcat的基本操作 示例代码&#xff1a;部署简单Servlet 3. 使用Servlet处理请求 示例代码&#xff1a;处理POST请求 在现代网络开发中&#xff0c;理解HTTP协议和如何使用Tomcat作为服…...

python井字棋游戏设计与实现

python实现井字棋游戏 游戏规则&#xff0c;有三个井字棋盘&#xff0c;看谁连成的直线棋盘多谁就获胜 棋盘的展现形式为 棋盘号ABC和位置数字1-9 输入A1 代表在A棋盘1号位数下棋 效果图如下 部分源码如下&#xff1a; 卫星工纵浩 白龙码程序设计&#xff0c;点 代码获取 …...

据说是可以和 Windows 一拼的 5个 Linux 发行版

现如今有数以千计的 Linux 发行版可供您使用&#xff0c;然而人们却无法选择一个完美的操作系统来替代 Windows。 使用 Windows 时&#xff0c;傻瓜都能操作自如&#xff0c;同样的方法却不适用于 Linux。在这里&#xff0c;您必须具备操作和使用操作系统的基本知识。因此人们经…...

PHP 常用函数

1. ksort&#xff08;&#xff09; 如果你有一个数组 array&#xff08;[11] > array(XX), [6] > array(YYY)&#xff09;&#xff0c;你想要返回按照key重新排序&#xff0c;并不改变键和值之间的关联&#xff0c;处理之后的结果为 array&#xff08;[6] > array(YY…...

如何将MySQL迁移到TiDB,完成无缝业务切换?

当 MySQL 数据库的单表数据量达到了亿级&#xff0c;会发生什么&#xff1f; 这个现象表示公司的业务上了一个台阶&#xff0c;随着数据量的增加&#xff0c;公司规模也进一步扩大了&#xff0c;是非常喜人的一个改变 &#xff0c;然而随之而来的其他变化&#xff0c;就没那么…...

【嵌入式烧录刷写文件】-2.10-为一个Intel Hex文件计算校验和Checksum

案例背景(共6页精讲): 有如下一段Intel Hex文件&#xff0c;为其创建Checksum校验和&#xff1a;CRC16&#xff0c;CRC32(CVN)&#xff0c;SHA-256 Hash算法…, 将Checksum Value填充到指定地址。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767…...

整体思想以及取模

前言&#xff1a;一开始由于失误&#xff0c;误以为分数相加取模不能&#xff0c;但是其实是可以取模的 这个题目如果按照一般方法&#xff0c;到达每个节点再进行概率统计&#xff0c;但是不知道为什么只过了百分之十五的测试集 题目地址 附上没过关的代码 #include<bits…...

RabbitMQ 消息可靠保障

RabbitMQ 消息可靠保障 消息的可靠性保证生产者重连生产者确认解决思路A-确认机制解决思路B-备份交换机 MQ 服务器宕机导致消息丢失消费端消息的可靠性保障 消费端限流给消息生成唯一id 消息的可靠性保证 实际项目中 MQ 的流程一般是&#xff1a;生产端把消息路由到交换机&…...

Redis 作为 PHP 的会话存储

使用 Redis 作为 PHP 的会话存储&#xff0c;可以实现多个服务器之间的会话共享&#xff0c;提高会话管理的效率&#xff0c;特别是在分布式系统中。这种方法将会话数据存储在 Redis 中&#xff0c;而不是使用默认的文件系统&#xff0c;从而使多个服务器可以访问相同的会话数据…...

基于伏图的数字心脏模拟仿真APP应用介绍

一、背景介绍 心脏是保证人体正常运转最重要的动力&#xff0c;人体内的血液循环通过心血管运输到各个部位&#xff0c;因此&#xff0c;心血管系统的稳定是人体健康的关键。心血管内科领域极具专业性&#xff0c;其理论研究与技术发展日新月异&#xff0c;心血管疾病患者往往…...

智云-一个抓取web流量的轻量级蜜罐docker一键启动

智云-一个抓取web流量的轻量级蜜罐docker安装教程 github地址 https://github.com/xiaoxiaoranxxx/POT-ZHIYUN docker快速启动(v1.4) git clone https://github.com/xiaoxiaoranxxx/POT-ZHIYUN.git cd POT-ZHIYUN docker-compose up -d默认映射到80和8080端口 mysql不对外开放…...

原生HTML5、CSS、JavaScript实现简易网易云音乐播放

1.效果图 2.源码 1.index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网易云音乐</title><link rel"stylesheet" href"../CSS/index.css"> </head>…...

网上商城小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品信息管理&#xff0c;商品类型管理&#xff0c;活动专区管理&#xff0c;新品上架管理&#xff0c;用户评价管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包…...

微分方程(Blanchard Differential Equations 4th)中文版Section2.2

动力系统的几何分析 捕食者-猎物系统的向量场 在第2.1节中&#xff0c;我们展示了两个不同捕食者-猎物系统的 R ( t ) R(t) R(t) 和 F ( t ) F(t) F(t) 图形&#xff0c;但没有描述我们是如何生成这些图形的。我们将在第2.5节中解决这个问题&#xff0c;采用欧拉方法推广到…...

Swift 环境搭建

Swift 环境搭建 Swift 是由苹果公司开发的一种强类型编程语言&#xff0c;用于iOS、macOS、watchOS和tvOS应用程序的开发。搭建Swift开发环境是开始使用Swift进行编程的第一步。本文将详细介绍如何在不同的操作系统上搭建Swift开发环境。 在macOS上搭建Swift环境 系统要求 …...

科技与出版

科技与出版 ISSN: 1005-0590 CN: 11-3209/G3 常设栏目&#xff1a;特别策划、产业观察、融媒之光、编辑实务、营销方略、学术探索、创作空间等。 稿件要求 (1)来稿应有创新性&#xff1b;立论科学&#xff0c;主题明确&#xff0c;推理严谨&#xff1b;词语准确&#xff0c;…...

5年前端面试之路

作者&#xff1a;星空海绵 顺便吆喝一声&#xff0c;技术大厂&#xff0c;内推捞人&#xff0c;前/后端or测试←感兴趣 --加班偶尔较多&#xff0c;但周末加班两倍工资。 --15-35K&#xff0c;工资一线城市属于一般&#xff0c;但二线城市很可以。 前言 由于公司要进行&#xf…...

产品运营(一)--产品运营是什么?

1.运营是什么&#xff1f; 通过一系列穿针引线式的行为和资源投入&#xff0c;让一件事能持续良性运转。 运营面向的主体不同&#xff0c;使用的运营手段也是不同的。作用&#xff1a;赋予产品闪耀的光芒。距离用户最近的人&#xff08;体验用户&#xff0c;成为用户?demo:k…...

学习大数据DAY41 Hive 分区表创建

目录 分区表 分区表应用场景 oracle 分区表种类 oracle 分区-范围分区 oracle 分区-列表分区 oracle 分区-散列分区 oracle 分区-组合分区 oracle 分区-分区表操作 hive 分区-创建分区表 hive 分区-分区表操作 hive 分区-动态分区表配置 上机练习 分区表 分区是将一…...

【三维目标检测模型】ImVoteNet

【版权声明】本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 参考书籍&#xff1a;《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章&#xff0c;专栏介绍地址“https://blog.csdn.net/suiyin…...

力扣 | 背包dp | 279. 完全平方数、518. 零钱兑换 II、474. 一和零、377. 组合总和 Ⅳ

文章目录 一、279. 完全平方数二、518. 零钱兑换 II三、474. 一和零四、377. 组合总和 Ⅳ 一、279. 完全平方数 LeetCode&#xff1a;279. 完全平方数 朴素想法&#xff1a; 这个题目最简单的想法是&#xff0c;可以用 O ( n n ) O(n\sqrt{}n) O(n ​n)的动态规划解决&#x…...

【ECMAScript性能优化的技巧与陷阱】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

Swift实时监听判断是否连接有网络WIFI和蜂窝数据

本章节讲解如何使用swift连接网络&#xff0c;实时的监听到网络的状态&#xff0c;在主界面中进行调用&#xff0c;网络包含Wi-Fi 和 蜂窝。 1.封装一个判断是否有网络的类 2.在封装类注册通知 3.主界面接收注册通知&#xff0c;并且调用封装的网络类 4.成功测试&#xff0c;有…...

(三)Flink Source 数据源

Flink 数据源主要分为内置数据源和第三方数据源。其中内置数据源包含文件、Socket 连接、集合类型数据等,不需要引入其它依赖库。第三方数据源定义了 Flink 和外部系统数据交互的逻辑,Flink 提供了非常丰富的数据源连接器,例如 Kafka、Elasticsearch、RabbitMQ、JDBC 等。 …...

第四届机电一体化、自动化与智能控制国际学术会议(MAIC 2024)

目录 大会官网 会议简介 组织机构 大会主席 程序委员会主席 主讲嘉宾 征稿主题 参会说明 大会官网 http://www.icmaic.org 会议简介 第四届机电一体化、自动化与智能控制国际学术会议&#xff08;MAIC 2024&#xff09;将于2024年9月27-29日在中国成都召开。MAIC 20…...

wordpress php版本更改/湖南官网网站推广软件

jQuery创建、删除、添加元素 1、创建元素 2、添加元素 内部添加&#xff1a; 外部添加&#xff1a; 3、删除元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&qu…...

什么网站做水果蔬菜批发/网络推广营销网

yolo&#xff08;You Only Look Once&#xff09;是一个高速的物体识别算法&#xff0c;在这里我不详细赘述论文的内容&#xff0c;记录一下我在环境中进行物体识别的整个过程。 YOLOv1的原文&#xff1a;https://arxiv.org/pdf/1506.02640.pdf YOLOv2原文&#xff1a;https://…...

杭州培训网站建设/上海官网seo

前言 区别于java设计模式&#xff0c;下面介绍的是在多线程场景下&#xff0c;如何设计出合理的思路。 不可变对象模式 场景 1. 对象的变化频率不高 每一次变化就是一次深拷贝&#xff0c;会影响cpu以及gc&#xff0c;如果频繁操作会影响性能 2. 作为hashmap的key key如果是可变…...

什么是可信网站认证/南京百度网站快速优化

本文为大家带来的是关于win8系统dns地址的查找和设置方法&#xff0c;网站地址可分为 URL 和 IP 地址&#xff0c;用户通过URL来找到网站&#xff0c;计算机则通过IP找到网站。DNS即实现将 URL转换为IP地址&#xff0c;让人们更方便的访问互联网。接下来小编就教您如何查找到wi…...

上海广告公司网站制作/百度云资源搜索网站

1、DES算法&#xff1a;Java代码 收藏代码/**加解密算法param data 加解密数据param key 秘钥param mode 模式return 加解密结果*/public static byte[] desCryt(byte[] data, byte[] key, int mode){byte[] result null ;try {SecureRandom sr new SecureRandom();SecretKey…...

网页设计 做网站的代码/seo技术快速网站排名

用python实现的抓取腾讯视频所有电影的爬虫 1. # -*- coding: utf-8 -*-2. import re3. import urllib24. from bs4 import BeautifulSoup5. import string, time6. import pymongo8. NUM 0 #全局变量,电影数量9. m_type u #全局变量,电影类型10. m_site uqq #全局…...