OpenGL光照纹理

opengl纹理,光照,glColor4f(),混合 glColor4f()与光照是平级的,且两者互斥,水火不容,有我没你.对于纹理图片中的某个像素P(r,g,b,1): (1)如果有光照L(Lr,Lg,Lb,x),则glColor4f(Cr,Cg,cb,Calpha)无用,像素P应该只乘以光照L,则像素P的实际颜色P1=P*L=(r*Lr,g*Lg,b*Lb,1);(注:P1的alpha恒为1,无须乘以光照的alpha值,即光照的alpha值在此 阅读详情

绘制多光源、多实体的三维光照模型;

#include<windows.h>
#include <iostream>
#include <cmath>
#include<stdlib.h>
#include<gl/glut.h>
#include<stdio.h>
#include<math.h> //X86
#include<glaux.h>
#pragma comment(lib, "glaux")
using namespace std;
#define Width 32
#define Height 32
GLubyte texImage[Height][Width][3];

float rot = 0;
GLuint texture2[1];
int yourselect;
GLint dx = 0;
GLint dy = 0;

//void Init();
//void Reshape(int w, int h);
//void LoadGLTextures();
//void Loadfunctt();
//void makeTexture();
//void myDisplay();
//void idle();
//void menu(int menultem);

void Init()
{
	glClearColor(0.0f, 0.0f, 0.1f, 0);//清除颜色函数。会清除(即绘制)的背景色。
	//glCullFace(GL_BACK);//背面不可见
	//glEnable(GL_CULL_FACE);//裁剪
	//glEnable(GL_TEXTURE_2D);//开启纹理

	glDepthFunc(GL_LEQUAL);
	glEnable(GL_DEPTH_TEST);
	glShadeModel(GL_SMOOTH);
}

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 makeTexture() {
//	int c;
//	for (int i = 0; i < Height; i++)
//	{
//		for (int j = 0; j < Width; j++) {
//			c = (((i & 0x32) == 0) ^ ((j & 0x32)) == 0) * 255;//^异或运算
//			texImage[i][j][0] = (GLubyte)c;
//			texImage[i][j][1] = (GLubyte)c;
//			texImage[i][j][2] = (GLubyte)c;
//		}
//	}
//}
//void Loadfunctt() {  //函数纹理
//	makeTexture();
//	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);//像素传输
//	glGenTextures(1, &texture2[0]);
//	glBindTexture(GL_TEXTURE_2D, texture2[0]); //绑定纹理
//	glTexImage2D(GL_TEXTURE_2D, 0, 3, Width, Height, 0, GL_RGB, GL_UNSIGNED_BYTE, texImage);//贴图
//	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
//	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
//	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
//	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//
//	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
//}
void InitMaterial() {//设置物体表面属性
	//cout<< "InitMaterial"<<endl;
	float mat_ambient[] = { 0.135000, 0.222500, 0.157500, 0.95000};
	float mat_diffuse[] = { 0.540000, 0.890000, 0.630000, 0.950000 };
	float mat_specular[] = { 0.316228, 0.316228, 0.316228, 0.950000 };
	float mat_shininess[] = { 12.800000};
	//face应用在哪个面,pname说明材质,param材质指针
	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);//环境光
	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);//漫反射
	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);//镜面反射率
	glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);//镜面反射指数
	//glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
}
void InitLight() {
	//cout << "InitLight" << endl;
	float lig_pstion0[] = { 600,0,0,0 };
	glLightfv(GL_LIGHT0, GL_POSITION,lig_pstion0);
	
	float lig_pstion1[] = { -600,0,0,0 };
	GLfloat lig_ambient[] = { 0.247250, 0.224500, 0.064500, 1.000000 };
	GLfloat lig_diffuse1[] = { 0.346150, 0.314300, 0.090300, 1.000000 };
	GLfloat lig_specular1[] = { 0.797357, 0.723991, 0.208006, 1.000000 };
	GLfloat lig_shininess[] = { 83.199997 };

	glLightfv(GL_LIGHT1, GL_POSITION, lig_pstion1);
	glLightfv(GL_LIGHT1, GL_DIFFUSE, lig_diffuse1);
	glLightfv(GL_LIGHT1, GL_SPECULAR, lig_specular1);
	glLightfv(GL_LIGHT1, GL_AMBIENT, lig_ambient);
	glLightfv(GL_LIGHT1, GL_SHININESS, lig_shininess);
	
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
	glEnable(GL_LIGHT1);
}
void myDisplay()
{
	//glClear(GL_COLOR_BUFFER_BIT);
	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
	
	
	//glutSolidSphere(100, 64, 64);
	glLoadIdentity();
	glRotatef(rot, 1, 0, 0);
	glRotatef(rot, 0, 1, 0);
	glRotatef(rot, 0, 0, 1);
	Sleep(10);
	if (yourselect == 1) {

		//函数纹理
		InitLight();
		InitMaterial();
		//Loadfunctt();
		glutSolidTeapot(200);

		glutSwapBuffers();
	}
	else if (yourselect == 2){
		exit('End');
	}
	glFlush();
	
}
void idle()
{
	rot += 1;
	glutPostRedisplay();//
	Sleep(50);
}
//void mouse(GLint button,GLint state,GLint x,GLint y) {
//	if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
//		dx = x;
//		dy = 600 - y;
//		glutPostRedisplay();
//	}
//}
//void keyboard(unsigned char key, int x=0, int y=0) {
//	save = countf;
//	switch (key) {
//	case'S':
//	case's':
//		x += dx;
//		break;
//	case'Z':
//	case'z':
//		break;
//	case'X':
//	case'x':
//		break;
//	}
//	glutPostRedisplay();
//}
void menu(int menultem) {
	yourselect = menultem;
	glutPostRedisplay();
}
int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH);     
	//glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
	//glutInitDisplayMode(AUX_SINGLE | AUX_RGBA|AUX_DEPTH);//设置窗口的显示模式,单缓冲模式,rgb颜色模式,深度缓存模式
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(600, 600);
	glutCreateWindow("Light");

	//glutMouseFunc(mouse);//鼠标
	//glutKeyboardFunc(keyboard);

	int menuld = glutCreateMenu(menu);//菜单
	glutAddMenuEntry("动感茶壶", 1);
	//glutAddMenuEntry("functon_grain", 2);
	glutAddMenuEntry("End",2);
	glutAttachMenu(GLUT_RIGHT_BUTTON);

	Init();
	/*InitMaterial();
	InitLight();*/
	//glutIdleFunc(RenderScene);
	glutDisplayFunc(myDisplay);
	glutReshapeFunc(Reshape);
	glutIdleFunc(idle);
	glutMainLoop();//

	return 0;
}

C++ OpenGL 纹理过滤和光照示例源码及解析 在上述代码中,我们首先初始化 GLFW 和 GLEW,并创建一个窗口。在函数内部,我们首先生成一个纹理 ID,然后绑定该纹理。接下来,我们设置纹理的各种参数,如纹理坐标的包裹方式和纹理过滤器的设置。在本文中,我们将探讨使用 C++ 和 OpenGL 实现纹理过滤和光照效果的示例源代码。最后,我们释放图像数据的内存,并返回纹理的 ID。函数表示渲染场景的代码,你可以根据自己的需求在该函数中实现具体的渲染逻辑。例如,你可以在其中设置光照效果。这是一个简单的示例,你可以根据自己的需求进行更复杂的光照计算和渲染。 阅读详情

相关推荐

OPENGL 画地球 真实感超强-纹理贴图 光照 动画

OPENGL 画地球-纹理贴图 光照 动画 VS2005工程,需要gl glu glut glaux支持。 有任何问题可留言。

openGL结合光照与纹理

展示的面片着色的环面是通过在顶点着色器和片段着色器中,将“flat”插值限 定符添加到相应的法向量属性声明中得到的。这样会使得光栅器不对所限定的变量进行插 值,而是直接将相同的值赋给每个片段(在默认情况下,它会选择三角形第一个顶点上的 值)。在Phong 着色示例代码中,可以通过如下修改实现面片着色:

aoxuestudy的专栏 2361

opengl 一个有光照效果带纹理会旋转的立体茶壶以及相关配置环境

opengl 一个有光照效果带纹理会旋转的立体茶壶,用c写的,在窗口中绘制了一个漂亮的茶壶。适合初学者使用, 当作样例

OpenGL 学习实录6: 进阶光照(光照纹理 & 投光物)

OpenGL 学习实录6: 进阶光照(光照纹理 & 投光物) 文章目录OpenGL 学习实录6: 进阶光照(光照纹理 & 投光物)系列文章正文1. 材质纹理2. 多种光源2.1 定向光源2.2 点光源2.3 聚光源2.4 合成光线3. 布置场景 & 结果其他资源参考连接完整代码示例 系列文章 OpenGL 学习实录1: 基于 MacOS + Clion 配置 OpenGL 运行环境 OpenGL 学习实录2: 基础绘制初试 OpenGL 学习实录3: 深入着色器 - 纹理 Open

超悠閒的博客 702

OpenGL实验八犹他茶壶光照、阴影、纹理

OpenGL实验八犹他茶壶光照、阴影、纹理,光照效果源码、阴影效果源码、纹理效果源码,及实验截图、实验报告。

opengl有纹理有贴图有光照有影子的青花瓷茶壶

opengl有纹理有贴图有光照有影子的青花瓷茶壶,影子采用的是光照模型,存在BUG,不足之处多多谅解。

Shader中贴图知识汇总: 漫反射贴图、凹凸贴图、高光贴图、 AO贴图、环境贴图、 光照纹理及细节贴图

原文过于冗余,精读后做了部分简化与测试实践,原文地址:http://www.j2megame.com/html/xwzx/ty/2571.html 一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图,可见贴图在画面中所占的重要性。在这里我将列举一系列贴图,并且初步阐述其概念,理解原理的基础上制作贴图,也就顺手多了。 01漫反射贴图diffuse map  漫反射贴图

aquathinker的专栏 -- AquaMarine Animation 1万+

渗透测试自学日志之漏洞复现篇:漏洞列表

复现成功的漏洞列表,有复现方式,各位可以参考。 网络安全,人人有责,使用本文进行非法活动,与本人无关

maverickpig的博客 2174

OpenGL实验(三)桌子的纹理 光照

由上一篇继续对桌子表现的探索~ 纹理(显然)有非常多关于纹理的教程,可以任意选择进行了解。下面贴这个链接是因为它附了代码(没错就那么简单粗暴……) http://blog.163.com/liang_ce_521@126/blog/static/7092021520105233437124/ 我用这个跑出来的结果 库配置(VS2015)看起来……就是一个include 的事情……然后我折腾了很

Birdcage 3893

基于Multisim的智能交通灯控制系统仿真与实现(含动态闪烁功能)

本文详细介绍了基于Multisim的智能交通灯控制系统仿真与实现,重点解析了动态闪烁功能的电路设计。通过555定时器、74LS192计数器和JK触发器等核心模块,实现了主干道与支干道的交替通行及黄灯1Hz闪烁功能,为交通灯控制系统设计提供了完整的仿真方案。

weixin_29174013的博客 425

学习海康VisionMaster之表面缺陷滤波

本文介绍了VisionMaster中表面缺陷滤波技术的应用。该技术通过数学变换抑制背景干扰、增强缺陷特征,适用于电池铝壳、垫圈/螺丝等无纹理背景的表面缺陷检测(划痕、凹坑、异物等)。操作流程包括:图像导入、轮廓定位、位置修正、参数设置(重点讲解滤波核尺寸/数量/标准差等关键参数的调整策略)。文章通过案例演示了如何通过多方向滤波响应识别表面划伤,并指出需结合blob分析进一步优化检测结果。该技术对工业质检具有实用价值,参数设置需结合缺陷特征与背景特性灵活调整。

yuhouxiyang的专栏 2826

Qt下的OpenGL 编程(5)光照和纹理滤波

一、提要 今天在网上看到一个消息,芬兰IT服务公司Digia Oyj称,公司将会出资400万欧元购买诺基亚旗下QT软件业务 芬兰IT服务公司Digia Oyj称,公司将会出资400万欧元购买诺基亚旗下QT软件业务。 据我所了解,Qt算是一个非常优秀的团队,希望Qt离开Nokia之后能够发展得更好吧。 经过了上一篇的教程,我们对3D世界已经有

爱冒险的技术宅 4958

DeepSeek API调用太复杂?OneAPI一站式聚合解决方案

本文介绍了OneAPI如何作为一站式聚合解决方案,简化DeepSeek API的调用流程。通过统一接口、智能路由和模型映射等核心功能,OneAPI大幅降低了多API适配的复杂性,提升开发效率。文章还提供了详细的部署指南和高阶使用技巧,帮助开发者快速实现API聚合管理。

weixin_27215337的博客 381

【亲测免费】 OpenGL实验八:犹他茶壶光照、阴影、纹理

OpenGL实验八:犹他茶壶光照、阴影、纹理 【下载地址】OpenGL实验八犹他茶壶光照阴影纹理 OpenGL实验八:犹他茶壶光照、阴影、纹理 项目地址: https://gitcode.com/open-source-toolk...

gitblog_09755的博客 899

人工智能之语言领域 自然语言处理 第六章 情感分析

情感分析(Sentiment Analysis),又称意见挖掘(Opinion Mining),旨在自动识别和提取文本中表达的主观情感、态度或情绪。从用户评论到社交媒体,从产品反馈到政治舆情,情感分析已成为企业决策、品牌监控和人机交互的关键技术。本章将深入介绍情感分析的层级结构、核心技术、主流模型,并通过社交媒体舆情实战案例完整演示分析与可视化流程。层级目标示例词级(Word-level)判断单个词的情感倾向“好” → 正面;“差” → 负面句级(Sentence-level)判断整个句子的情感极性。

咚咚王者的博客 856

YOLO26改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLO26-L !!! 最新的发文热点

Vision Clue Merge模块在Mamba - YOLO模型中同样重要,主要负责在模型的下采样过程中处理特征图,为后续的特征融合和目标检测任务提供更有效的信息。

Limiiiing的博客 472

OpenGL(十五)——Qt OpenGL三种不同的纹理滤波方式、光照、物体的移动

本篇分享 1、如何使用三种不同的纹理滤波方式。 2、如何使用键盘来移动场景中的对象, 3、如何在OpenGL场景中应用简单的光照。

ifeng12358的博客 4128

医学图像处理实战:利用OpenSlide解析病理SVS切片的完整解决方案

本文介绍了使用openslide处理病理SVS切片的完整流程,从基础安装到科研应用。主要内容包括:1)SVS切片特点及openslide工具简介;2)环境配置与软件安装;3)基础操作:读取切片、查看信息、可视化不同层级图像;4)进阶操作:坐标裁剪与批量处理;5)科研方向拓展:结合AI模型进行病理分割分类、量化分析及可视化报告。教程提供了完整的代码示例,帮助毕业设计学生快速掌握病理图像分析的核心技能。

m0_71589036的博客 309

OpenGL3D图形、旋转、纹理、键盘移动、光照、滤波、透明(完整)

#include <windows.h> // Windows的头文件#include <stdio.h>#include <gl\gl.h> // OpenGL32库的头文件#include <gl\glu.h> // GLu32库的头文件#include <gl\glaux.h> // GL...

weixin_33755649的博客 1220

基于STM32L4XX、HAL库的TESEO-LIV4FTR定位模块驱动程序设计

支持多星座系统:GPS、GLONASS、Galileo和北斗。支持NMEA 0183协议和ST专有协议。高灵敏度:-167dBm跟踪灵敏度。低功耗设计,适合物联网和便携设备。内置LNA和SAW滤波器。

zhusl6688的博客 237

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

NeHe+OpenGL教程 第七课 纹理过滤器、光照和键盘控制

在这节课中,我将教你如何使用三种不同的纹理过滤器。我将教你如何使用键盘来移动物体,如何在OpenGL场景中使用简单的光照。这一课包含了很多内容,如果你对前面的课程有疑问的话,先回头复习一下。在你学习下面的知识之前,对基础知识的熟练掌握很重要。 我们再次地修改第一节课中的代码。通

ygc87的专栏 2559

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: OpenGL消隐凸多面体
下一篇: Cisco Packet Tracer 里的路由器怎么在cli清空配置
fqq3
博客等级 码龄4年 114粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值