OpenGL消隐凸多面体

OpenGL和DirectX OpenGL 它用于三维图像(二维亦可),是一个功能强大,调用方便的底层图形库。 OpenGL是一个与硬件无关的软件接口,可以在不同的平台如Window、Unix、Linux、MacOS等之间进行移植。因此,支持OpenGl的软件具有很好的移植性。通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制作的DXF和3DS模型文件转换成OpenGL 阅读详情

利用外法线法,绘制任意一个消隐凸多面体,要求:

(1)视点由用户输入;

(2)消隐部分用虚线绘制。

#include <iostream>
#include <cmath>
#include<windows.h>
#include<stdlib.h>
#include<gl/glut.h>
#include<stdio.h>
#include<math.h> //X86
#include<glaux.h>
using namespace std;
void Init()
{
	glClearColor(0.0f, 0.0f, 0.1f, 0);//清除颜色函数。会清除(即绘制)的背景色。
	//glCullFace(GL_BACK);//背面不可见
	//glEnable(GL_CULL_FACE);//裁剪
	//glEnable(GL_TEXTURE_2D);//开启纹理
}void Reshape(int w, int h)
{
	glViewport(0, 0, w, h);
	glMatrixMode(GL_PROJECTION);
	//glMatrixMode设置接下来的矩阵操作为投影矩阵或模型视图矩阵
	//GL_PROJECTION参数用于设置接下来的操作为投影矩阵,GL_MODELVIEW参数则用于设置接下来的操作为模型视图矩阵。
	//投影矩阵定义了从视点到裁剪平面的映射,决定了哪些物体可以被渲染以及它们在窗口中的位置。
	//	模型视图矩阵则定义了物体在空间中的位置、旋转和缩放。
	glLoadIdentity();

	glOrtho(-w / 2, w / 2, -h / 2, h / 2, -300, 300);//设置一个二维的正交投影矩阵。void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}
void XYZ() {
	//gluLookAt(1, 1, 1, 0,0,0, 0, 1, 0);
	glLineWidth(1);
	//glColor3f(0.0, 0.0, 0.0);//坐标轴
	glColor3f(0.1, 0.1, 0.1);
	glBegin(GL_LINES);
	glColor3f(1.0, 0.0, 0.0);
	glVertex3i(-1000, 0,0);
	glVertex3i(1000, 0,0);
	glColor3f(0.0, 1.0, 0.0);
	glVertex3i(0, -1000,0);
	glVertex3i(0, 1000,0);
	glColor3f(0.0, 0.0, 1.0);
	glVertex3i(0,0, -1000);
	glVertex3i(0,0, 1000);
	glEnd();
	glFlush();
}
void mydisplay() {
	int x[10] = { 50,50,25,0,0,50,50,25,0,0 };
	int y[10] = { 0,40,60,40,0,0,40,60,40,0 };
	int z[10] = { 140,140,140,140,140,0,0,0,0,0 };
	int f[7] = { 0,1,2,3,4,5,6 };
	int p[7] = { 6,5,6,5,5,5,5 };
	int fp[7][6] = { {0,1,2,3,4,0},{0,5,6,1,0},{5,9,8,7,6,5},{9,4,3,8,9},
		{1,6,7,2,1 },{3,2,7,8,3},{0,4,9,5,0}
	};
	int SN;
	int p1, p2, p3, u1, u2, u3, v1, v2, v3;

	glClear(GL_COLOR_BUFFER_BIT);
	glLoadIdentity();

	cout << "请输入视角:" << endl;
	int vi1, vi2, vi3;
	cin>> vi1 >> vi2 >> vi3;

	gluLookAt(vi1, vi2, vi3, 0, 0, 0, 0, 1, 0);
	XYZ();
	glLineWidth(3);
	glColor3f(1.0, 1.0, 1.0);
	for (int i = 0; i < 7; i++) {
		p1 = fp[i][0];
		p2 = fp[i][1];
		p3 = fp[i][2];
		u1 = x[p2] - x[p1];
		u2 = y[p2] - y[p1];
		u3 = z[p2] - z[p1];
		v1 = x[p3] - x[p2];
		v2 = y[p3] - y[p2];
		v3 = z[p3] - z[p2];
		SN = vi1*(u2 * v3 - u3 * v2) + vi2*(u3 * v1 - u1 * v3) + vi3*(u1 * v2 - u2 * v1);//能不能看见
		if (SN <= 0) f[i] = -1;
	}
	
	for (int i = 0; i < 7; i++){
		if (f[i] == -1) {
			if (f[i] == -1) {
				glLineStipple(2, 0xf0f0);
				glEnable(GL_LINE_STIPPLE);
				glBegin(GL_LINE_STRIP);
				for (int j = 0; j < p[i]; j++) {
					int k = fp[i][j];
					glVertex3i(x[k], y[k], z[k]);
				}
				Sleep(100);
				glEnd();
				glFlush();
				glDisable(GL_LINE_STIPPLE);
			}
			//continue;
		}//看不见的
		else {
			glBegin(GL_LINE_STRIP);
			for (int j = 0; j < p[i]; j++) {
				int k = fp[i][j];
				glVertex3i(x[k], y[k], z[k]);		
			}
			Sleep(100);
			glEnd();
			glFlush();
		}
		
	}

}
int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(800, 800);
	glutCreateWindow("the forth plus menu");

	/*int menuld = glutCreateMenu(menu);
	glutAddMenuEntry("Hermiteth", 1);
	glutAddMenuEntry("Bezierth", 2);
	glutAddMenuEntry("Bspline", 3);
	glutAddMenuEntry("Bezierogee", 4);
	glutAddMenuEntry("improve", 5);
	glutAddMenuEntry("End", 6);
	glutAttachMenu(GLUT_RIGHT_BUTTON);*/

	Init();
	glutReshapeFunc(Reshape);
	glutDisplayFunc(mydisplay);
	glutMainLoop();
	return 0;
}

opengl 消隐算法 OpenGL 实现消隐算法 通过控制键盘来实现图形的平移,可以上下左右移动 立即下载

相关推荐

opengl实现平移缩放旋转消隐纹理

可以交互实现光照颜色变化,交互控制物体位置,旋转,放缩。对比了有无消隐,增加了纹理。可选择多种加载的物体。

计算机图形学---Opengl 3D消隐

消隐 常见的消隐法:外法线法、深度缓冲器法、画家算法 数学知识,点乘法,没有方向 S•N = s1n1+s2n2+s3n3 观察方向S(s1,s2,s3) 法线N(n1,n2,n3) S•N >0时, 面可见 S•N <0时, 面不可见 而法线:根据向量判定,两条边的叉乘 即N=(n1=u2v3-u3v2,n2=u3v1-u1v3,n3=u1v2-u2v1) 步骤总结: 设置顶点表和面点表 消隐算法—外法线法 一、设置顶点表和面点表 面点表中顶点序规则:右手法则,大拇指沿法线指向面外,围

weixin_45774924的博客 3420

OpenGL消隐和光照

在OpenGL观察实验的基础上,通过实现实验内容,掌握OpenGL中消隐和光照的设置,并验证课程中消隐和光照的内容。 模型尺寸不做具体要求。要求修改代码达到以下要求: 1. 通过设置材料使得桌面和四条腿的颜色各不相同,分别为:(1, 0, 0), (0, 1, 0), (1, 1, 0), (0, 1, 1), (0, 0, 1); 2. 通过设置材料使得茶壶为金黄色; 3. 添加按键处理,移动场景中的光源,并能改变光源的颜色(在两种颜色间切换,颜色自己定义); 4. 修改茶壶的镜面反射系数,使之对光源呈现高光; 5. 在场景中添加一个聚光光源,其照射区域正好覆盖茶壶,并能调整改聚光光源的照射角度和朝向。

OpenGL之深度缓冲区与Z-Buffer消隐算法

opengl 图形流水线。

TxyITxs的博客 2689

OpenGL 建模及消隐实现

比较完整的实例,实现简单模型的建模,参数修改,位置的变换,物体的拖拽,及空间环境的文件保存及打开。

手把手教你用Ollama & AnythingLLM搭建AI知识库,无需编程,跟着做就行!

本地运行大模型耗资源,需要选择较小的模型作为基础模型。在终端中运行时可能会出现 CUDA 错误,表示显存不足,导致提供的端口失效。中文支持不够完善。\3. 文中提到的技术软件工具有:Ollama、Chatbox、Open WebUI、向量数据库、嵌入模型、本地模型 Gemma、AnythingLLM。

2401_86435672的博客 1万+

基于C++OpenGL实现的小桌茶壶图形绘制消隐和光照

在进行光照计算时,材料对环境光的反射率与每个进入光源的环境光结合。首先,根据实验的要求,我们要对桌子的材质进行适当的修改,以使得在光照条件下,桌子和茶壶可以呈现出我们理想的效果。其中桌面和桌腿的漫反射系数和镜面反射的颜色我决定都使用物体固有色,而对于茶壶,镜面反射系数为了呈现高光效果,通过不断调试来找一个合适的颜色与镜面反射系数,比如50。通过设置材料使得桌面和四条腿的颜色各不相同,分别为:(1, 0, 0), (0, 1, 0), (1, 1, 0), (0, 1, 1), (0, 0, 1);

毕业作品网站 2289

使用MeshLab高效对齐3D模型:从OBJ导入到坐标修正全流程

本文详细介绍了使用MeshLab高效对齐3D模型的全流程,涵盖从OBJ导入、坐标修正到最终导出的核心步骤。通过将模型中心归位至坐标原点,并利用主轴对齐功能快速摆正模型,为后续的3D打印、体素化等处理奠定精确的几何基础。

weixin_29313423的博客 92

3d图形消隐c语言,计算机图形学消隐算法分析与实现.doc

计算机图形学消隐算法分析与实现本 科 毕 业 设 计题目:计算机图形学消隐算法的分析与实现姓 名院 系 信息科学与工程学院专 业 计算机科学与技术年 级学 号指导教师2011 年 5月 10 日独 创 声 明本人郑重声明:所呈交的毕业论文(设计),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的...

weixin_39988476的博客 607

从Protocol到硬件控制:揭秘高通UEFI中ABL与XBL的协作机制

本文深入解析了高通UEFI架构中ABL与XBL的协作机制,重点探讨了Protocol通信在硬件控制中的关键作用。通过对比传统GPIO控制方式,揭示了Protocol架构在安全性、可维护性和灵活性方面的优势,并提供了关机充电场景的实战案例分析及调试技巧。

weixin_29185199的博客 430

LightTools宏 vs Python API:光学仿真自动化方案选型指南

本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。

garlic的博客 940

三维物体消隐处理

3D渲染消隐算法项目## 项目简介本项目实现了三种3D渲染消隐算法:1. Z缓冲算法实现2. Roberts算法实现3. -综合消隐算法实现还包含一个Flask Web应用(`app.py`)用于展示这些算法效果。

Ray__Xin的博客 612

ONNC Open Neural Network Compiler 开源神经网络编译器 一个 开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)部署导入ONNX模型

ONNC是一个集合了开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)。ONNC从底层开始构建,旨在将ONNX中间表示(IR)翻译成专有DLA代码。其软件架构设计强调可移植性和可重用性,从而简化了开发新后端的工作。上图展示了ONNC软件栈的顶层框图。软件栈从导入ONNX计算图模型到输出相应的硬件二进制文件,展示了各个功能块。

万有文的博客 1992

OpenGL特点及功能

  刚毕业不久的时候参加过一个项目就是OpenGL相关的开发,自己在大学里面都不知道这玩意。刚接手非常郁闷,还好有高手带我们这种新兵蛋子。当时是用.net框架的C++开发,对于刚毕业没多久的人确实是一种好的锻炼,对面向对象的继承,重载,虚函数等等都有所理解,而不是仅仅只知道书本中面向对象的概念。由于当时是研究项目,开发团队自己构建数据模型,由于开发内容的数学概念比较浓厚,还有几个数学专业的研究生。

步行者的专栏 6202

TI MSPM0G3507 循迹小车强制寻黑线代码一

一个基于MSPM0微控制器的循迹小车控制系统。系统通过8路循迹传感器检测黑线位置偏差,使用PID算法计算电机控制量。主程序初始化中断、PWM等外设,在按键触发后进入循迹模式。传感器数据处理函数根据检测到的黑线位置返回偏差值(-7到7),PID控制器根据偏差调整左右电机速度。系统还包含限幅处理、中断服务等模块,实现稳定的自动循迹功能。代码结构清晰,展示了嵌入式系统中传感器数据处理、电机控制和PID算法的典型实现方式。

雾削木的优快云博客 1855

uniapp:实现圆盘/色盘取色器组件,圆环颜色选择器用户可拖拽选择颜色值实时更新用户选择的颜色数据,拖动丝滑流畅不卡顿(uniapp小程序/手机h5网页/安卓苹果app/nvue都能使用,详细源码)

uniapp项目中使用颜色选择器,uniapp实现简单圆形色盘、取色器、拾色器组件,Uniapp自定义颜色选择器取色器,圆形的颜色选择器,uniapp颜色拾取器,拾色器 取色器 颜色选择器,uniapp vue3圆形的色盘取色,uni-app如何封装一个取色器组件,用uniapp写调色板,uniapp颜色选择器插件,实现圆环颜色选择器,Uni-app在App端使用颜色选择器,uniapp微信小程序圆盘颜色选择,uniapp H5网页实现圆形的取色器,使用canvas实现的简单圆形色盘,可自定义相关大小,un

✅ 精选推荐文章 4534

openGL的特点及功能

OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能:   1.建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面

AMinfo的专栏 5221

【数据集实例】CMIP6气候模式数据下载-以河东地区为例

以河东地区为例,介绍CMIP6数据下载及处理

WW、forever的博客 4931

Java opengl openal_OpenCL、OpenGL、OpenAL

OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制...

weixin_29224347的博客 525

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

什么是显卡的OpenGL模式

OpenGL是近几年发展起来的一个性能卓越的三维图形标准。 OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统, 以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以 与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算 法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能: 1) 建模 OpenGL...

Windows SDK 3442

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OpenGL 简介

<br />     OpenGL是行业领域中最为广泛接纳的 2D/3D 图形 API. OpenGL 定义了一个跨编程语言、跨平台的编程接口的规格,是一个功能强大,调用方便的底层图形库。<br /> <br />     OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能: <b

CassieChen的专栏 602

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

opengl初识

OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家 世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通 用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、 HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL 为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Sof

3G-肖阳 1280

OpenGL是什么?

OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和

血色残阳的专栏 2249

OpenGL学习记录

关于OpenGL OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。 OpenGL具有七大功能: 建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数。 变换:Op...

anneCoder的博客 373
上一篇: OpenGL图像纹理和和函数纹理
下一篇: OpenGL光照纹理
fqq3
博客等级 码龄4年 114粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值