OpenGL图像纹理和和函数纹理

OpenGL纹理贴图 OpenGL纹理1. 基本概念2. 纹理环绕方式3. 纹理过滤3.1 GL_NEAREST3.2 GL_LINEAR3.3 多级渐远纹理 (Mipmap)4. 纹理加载与创建4.1 纹理加载4.2 纹理创建4.3 纹理的使用 1. 基本概念 纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来表示物体的细节特征,希望绘制一个有足够多细节的物体,当然可以用足够多的顶点颜色来描述,但是无疑也增加了许多额外的开销;另一种办法就是使用纹理。 学习之前先展示一张实现的纹理图以更好理解纹理! 还是这张图为了将纹 阅读详情

在三维空间中,实现物体表面纹理的绘制,通过菜单完成:

  1. 图像纹理
  2. 函数纹理
  3. 退出

#include <iostream>
#include <cmath>
#include<windows.h>
#include<stdlib.h>
#include<gl/glut.h>
#include<stdio.h>
#include<math.h> //X86
#include<glaux.h>
#pragma comment(lib, "glaux")

#define Width 32
#define Height 32
GLubyte texImage[Height][Width][3];

float rot = 0;
GLuint texture[6];
GLuint texture2[1];
int yourselect;

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);//开启纹理
}

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 LoadGLTextures()
{
	AUX_RGBImageRec* someImage[6];//几幅图
	memset(someImage, 0, sizeof(void*) * 6);
	someImage[0] = auxDIBImageLoad("picture_of_bmp\\bzh.bmp");
	someImage[1] = auxDIBImageLoad("picture_of_bmp\\bzhs.bmp");
	someImage[2] = auxDIBImageLoad("picture_of_bmp\\bzhh.bmp");
	someImage[3] = auxDIBImageLoad("picture_of_bmp\\bzhc.bmp");
	someImage[4] = auxDIBImageLoad("picture_of_bmp\\bzhc.bmp");
	someImage[5] = auxDIBImageLoad("picture_of_bmp\\bzhh.bmp");
	/*for (int i = 0; i < 6; i++) {
		someImage[i] = auxDIBImageLoad("picture_of_bmp\\bzhbzh.bmp");
	}*/
	
	for (int i = 0; i < 6; i++) {
		if (someImage[i])                         //纹理是否存在********
		{
			/*printf("times of for :%d\n",i);///ttt
			printf("2\n");///ttttt*/
			glGenTextures(1, &texture[i]);           //创建纹理
			glBindTexture(GL_TEXTURE_2D, texture[i]); //绑定纹理
			glTexImage2D(GL_TEXTURE_2D, 0, 3, someImage[i]->sizeX, someImage[i]->sizeY, 0,GL_RGB, GL_UNSIGNED_BYTE, someImage[i]->data);//GL_TEXTURE_2D用于渲染2D图像或贴图到3D模型上。//纹理对象的类型,分辨率级别,3代表rgb,长,款,边框,数据格式和数据类型,一个指向内存中图像数据的指针。
			
			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);//设置纹理参数//纹理对象的类型,纹理参数的名称,
			free(someImage[i]); //someImage[i] = NULL;//释放图像结构变量占用的内存
		}//glGenTextures函数创建纹理对象,然后使用glBindTexture函数将纹理对象绑定到当前的纹理单元上。接着使用glTexImage2D函数将图像数据传递给纹理对象,其中包括图像的分辨率、格式和数据。//最后使用glTexParameteri函数设置纹理参数,例如纹理过滤器和纹理环绕方式。最后使用free函数释放图像结构变量占用的内存。
		else {
			printf("不存在");
		}
	}
}

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 myDisplay()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glLoadIdentity();
	glRotatef(rot, 1, 0, 0);
	glRotatef(rot, 0, 1, 0);
	glRotatef(rot, 0, 0, 1);

	glutWireCube(200);

	if (yourselect == 1) {
		LoadGLTextures();
		glBindTexture(GL_TEXTURE_2D, texture[0]);//front
		glBegin(GL_QUADS);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-100, -100, 100);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(100, -100, 100);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(100, 100, 100);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-100, 100, 100);
		glEnd();

		glBindTexture(GL_TEXTURE_2D, texture[1]);//back
		glBegin(GL_QUADS);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-100, -100, -100);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-100, 100, -100);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(100, 100, -100);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(100, -100, -100);
		glEnd();

		glBindTexture(GL_TEXTURE_2D, texture[2]);//top
		glBegin(GL_QUADS);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-100, 100, -100);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-100, 100, 100);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(100, 100, 100);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(100, 100, -100);
		glEnd();

		glBindTexture(GL_TEXTURE_2D, texture[3]);//bottom
		glBegin(GL_QUADS);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-100, -100, -100);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(100, -100, -100);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(100, -100, 100);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-100, -100, 100);
		glEnd();

		glBindTexture(GL_TEXTURE_2D, texture[4]);//right
		glBegin(GL_QUADS);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(100, -100, -100);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(100, 100, -100);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(100, 100, 100);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(100, -100, 100);
		glEnd();

		glBindTexture(GL_TEXTURE_2D, texture[5]);//left
		glBegin(GL_QUADS);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-100, -100, -100);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-100, -100, 100);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-100, 100, 100);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-100, 100, -100);
		glEnd();
		glFlush();
		glutSwapBuffers();
	//glutWireSphere(100, 16, 16);
		//LoadGLTextures();
		//for (int i = 0; i < 6; i++) {
		//	glClear(GL_COLOR_BUFFER_BIT);
		//	//printf("5\n");
		//	if (i <= 1) {
		//		printf("6\n");
		//		glBindTexture(GL_TEXTURE_2D, texture[i]);//绑定
		//		glBegin(GL_QUADS);//平面四边形
		//		glTexCoord2f(0, 0);//z=+-100的面
		//		glVertex3f(-100, -100, pow(-1, i) * 100);
		//		glTexCoord2f(1, 0);
		//		glVertex3f(100, -100, pow(-1, i) * 100);
		//		glTexCoord2f(1, 1);
		//		glVertex3f(100, 100, pow(-1, i) * 100);
		//		glTexCoord2f(0, 1);
		//		glVertex3f(-100, 100, pow(-1, i) * 100);
		//		glEnd();
		//		//glFlush();
		//		//glutSwapBuffers();//在双缓冲窗口系统中交换前缓冲区和后缓冲区
		//	}
		//	else if (i > 1 && i <= 3) {
		//		glBindTexture(GL_TEXTURE_2D, texture[i]);
		//		printf("7\n");
		//		glBegin(GL_QUADS);//平面四边形
		//		glTexCoord2f(1, 0);//x=100的面
		//		glVertex3f(pow(-1, i) * 100, -100, 100);
		//		glTexCoord2f(0, 0);//
		//		glVertex3f(pow(-1, i) * 100, -100, -100);
		//		glTexCoord2f(1, 1);
		//		glVertex3f(pow(-1, i) * 100, 100, -100);
		//		glTexCoord2f(0, 1);
		//		glVertex3f(pow(-1, i) * 100, 100, 100);

		//		glEnd();
		//		//glFlush();
		//		//glutSwapBuffers();//在双缓冲窗口系统中交换前缓冲区和后缓冲区
		//	}
		//	else if (i > 3 && i <= 5) {
		//		glBindTexture(GL_TEXTURE_2D, texture[i]);
		//		printf("8\n");
		//		glBegin(GL_QUADS);//平面四边形
		//		glTexCoord2f(1, 0);//y=100的面
		//		glVertex3f(-100, 100, pow(-1, i) * 100);
		//		glTexCoord2f(0, 0);//
		//		glVertex3f(-100, -100, pow(-1, i) * 100);
		//		glTexCoord2f(1, 1);
		//		glVertex3f(100, -100, pow(-1, i) * 100);
		//		glTexCoord2f(0, 1);
		//		glVertex3f(100, 100, pow(-1, i) * 100);

		//		glEnd();
		//		//glFlush();
		//		//glutSwapBuffers();//在双缓冲窗口系统中交换前缓冲区和后缓冲区
		//	}
		//	//在双缓冲窗口系统中交换前缓冲区和后缓冲区
		//}
		//glFlush();
		//glutSwapBuffers();
	}
	else if (yourselect == 2) {
		//glClear(GL_COLOR_BUFFER_BIT);
		
		Loadfunctt();//函数纹理
		glutSolidTeapot(200);
		//glutWireCube(200);
		
		glutSwapBuffers();
	}
	else if (yourselect == 3) {
		exit('End');
		
	}
//		glScalef(1.5*k, 1.5*k, 1.5*k);
//		glutWireSphere(100, 16, 16);
//		glRotatef(10*k, 0.0, 0.0, 1.0);
		
	//printf("9\n");

}
void idle()
{
	rot += 1;
	glutPostRedisplay();//
	Sleep(50);
}
void menu(int menultem) {
	yourselect = menultem;
	glutPostRedisplay();
}

int main(int argc, char* argv[])
{
	glutInit(&argc, argv);

	// 在这里设置双缓冲区。        
	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(600, 600);
	glutCreateWindow("TEXTURE");
	//glutMouseFunc(myMouse);
	Init();
	int menuld = glutCreateMenu(menu);
	glutAddMenuEntry("picture_grain", 1);
	glutAddMenuEntry("functon_grain", 2);
	glutAddMenuEntry("End", 3);
	glutAttachMenu(GLUT_RIGHT_BUTTON);
	
	
	//glutIdleFunc(RenderScene);
	glutDisplayFunc(myDisplay);
	glutReshapeFunc(Reshape);

	glutIdleFunc(idle);
	glutMainLoop();//
	return 0;
}

结果展示:

[OpenGL]OpenGl中的纹理 一、什么是纹理 据我的理解,纹理实际上就是一幅图像(一维二维or三维皆可),然后用此图像对另一个图元进行贴图(以某种规则铺上去,可能被缩放或扭曲)。 二、为什么要引入纹理 如果不引入纹理,描述一幅现实画面时,需要用基本图元(如三角面片)去仿真,这既不真实,效率又低。 三、OpenGL中如何进行纹理贴图 1. 创建纹理对象,并为它指定一个纹理 纹理对象实际上就是纹理图像,并有个纹理编号( 阅读详情

相关推荐

【OpenGL纹理】纹理贴图基础知识(01/4)

关于贴图问题,是OpenGL最复杂的系统了,本系列文挡将在整个流程上叙述纹理贴图的过程。在本文中,将涉及最一般朴素的若干操作,基本覆盖从读入图片,到生成纹理图像的过程。在整个过程的若干操作函数都给出一般常识性解释。

gongdiwudu的专栏 3342

openGL之纹理

opengl纹理相关介绍

lzz555517的博客 2398

使用 wxImage 为 OpenGL 加载纹理

在 C/C++ 编程中,如果我们想要在 OpenGL 中加载纹理,可以使用 wxImage 库来实现。wxImage 是一个基于 C++ 的图像处理库,它提供了加载、保存和处理图像的功能。结合 OpenGL,我们可以使用 wxImage 来加载纹理并将其用作 OpenGL 的纹理贴图。以上就是使用 wxImage 和 OpenGL 加载纹理的基本过程。函数中,我们清除缓冲区并加载纹理。中,我们指定了图像的格式、宽度、高度和数据类型。在上面的代码中,我们首先使用。创建一个纹理对象,并使用。

ByteBuster的博客 105

【(一)OpenGL入门】4.纹理

我们之前只画了一个三角形,而更加复杂的物体是更多的三角形组成的,并且我们通过为每个顶点添加颜色来增加物体的细节。如果我们想让物体更加真实,就得有足够多的顶点,且指定足够多的颜色,这样会产生很多额外开销,因为每个模型需要很多顶点,而每个顶点又需要颜色属性。为了方便且减少开销,我们更习惯使用纹理来绘制更多的模型,纹理就像一张2D的贴图,把它贴在图像或模型上来增加物体的细节。这样物体细节取决于设计师的美工,而程序员则不必指定更多的顶点。

m0_56712181的博客 2250

16. OPenGL加载纹理贴图

在OPenGL中,三维物体模型并非只能渲染单一颜色,还可以通过纹理贴图的方式进行渲染,增强物体模型的渲染效果,本篇文章简单讲解给一个矩形添加纹理图片效果。

山间点烟雨 1006

使用FreeImage和OpenGL进行图像处理

接下来,我们获取图像的宽度和高度,并创建一个OpenGL纹理对象。而OpenGL是一个跨平台的图形库,它提供了强大的图形渲染功能,可以用于实时渲染和图像处理。接下来,我们使用OpenGL的绘制函数绘制一个矩形,并在矩形的每个顶点上设置纹理坐标。接下来,我们将以一个简单的例子来演示如何使用FreeImage和OpenGL进行图像加载和显示。首先,我们需要包含FreeImage和OpenGL的头文件,并链接它们的库文件。最后,我们需要在主函数中初始化OpenGL和FreeImage,并启动渲染循环。

YkDjango的博客 779

OpenGL(四)——纹理

为每个顶点添加颜色可以增加图形的细节,但是更多的点会导致运行效率下降。使用纹理可以增加细节,又不用指定额外的顶点。纹理是一个2D图片(也有1D和3D纹理)。除了图像外纹理也可以用来存储大量的数据,这些数据可以发送给着色器。要想把纹理映射到三角形上,必须指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联一个纹理坐标(Texture Coordinate),表明该纹理图像的哪个片段采样,之后在图形的其它片段进行片段插值(Fragment interpolation)。

GZ的博客 3552

立方体函数纹理映射算法

图形学中关于纹理映射的一种方法,函数纹理映射. 算法的实例中被映射的物体是一个立方体,纹理是一个函数纹理图像,代码完成了把立方体的各个面映射为函数图像.编译环境是VC++ 6 .0 ,属MFC编程。

OpenGL入门(四)之纹理Texture

纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节!我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点,来减小开销!为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。

苦逼的程序猿☺ 3277

思必驰离线语音芯片:智能家居控制的核心引擎

思必驰离线语音芯片TH1520通过本地化语音识别技术,为智能家居带来革命性体验。该芯片具备200-600毫秒的快速响应、75分贝抗噪能力和双核异构设计,显著提升设备交互效率。支持自定义指令和10种音色选择,开发周期缩短至3天,BOM成本降低30%,是智能家居控制的核心引擎。

redis7keeper的博客 985

202505系分论文《论软件系统测试方法及应用》

本文以软件测试方法为切入点,重点论述分层协作、智能赋能、全流程三个维度下传统测试与自动化测试的融合应用。

pccai的博客 1693

OpenGL 纹理

纹理是什么,图片的坐标轴向在 OpenGL 中,纹理(Texture)是一种用于存储和管理二维图像数据的机制。它是一种非常重要的渲染技术,可以大大增强 3D 场景的细节和真实感。纹理的基本概念纹理图像纹理是由一个或多个二维图像组成的,也存在1D or 3D。这些图像包含了丰富的颜色和细节信息。纹理坐标纹理坐标是一个二维坐标系统,用于描述纹理图像上的某个位置。纹理坐标通常用 (s, t) 来表示,取值范围为 [0, 1]。还有r 和xyz相似。纹理映射将纹理图像映射到 3D 模型表面的过程叫做纹理映射。

weixin_50873490的博客 1398

[官方培训]22-UE资产优化 Epic 肖月 笔记

Nanite+Lumen目标:面向TA,美术,不影响视觉的前提下,优化运行和编辑效率引擎:UE5.1延迟管线平台:主流PC,Windows 10 with DX12。

Tcohneyn的博客 1574

OPENGL 加载纹理显示不正确

JPG图像 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); PNG图像 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 注意...

a553455的博客 3864

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南

本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。

weixin_29278805的博客 619

MATLAB点云处理(八):为点云添加高斯噪声

本文对如何借助MATLAB,为点云添加高斯噪声做出了说明,并给出实现代码。

孙悟空 2844

OpenGL纹理操作--glGenTextures

一.glGenTexture函数简介 glGenTextures(GLsizei n, GLuint *textures)函数说明 n:用来生成纹理的数量 textures:存储纹理索引的 glGenTextures函数根据纹理参数返回n个纹理索引。纹理名称集合不必是一个连续的整数集合。 (glGenTextures就是用来产生你要操作的纹理对象的索引的,比如你告诉OpenGL,我需要5个纹理对象,它会从没有用到的整数里返回5个给你) glBindTexture实际上是改变了OpenGL...

积累点滴,保持自我 1839

一个服务如何被找到、被调用、被看见:注册中心、发布注册、发现调用与服务监控的治理闭环

服务数量一多,“对方在哪儿”就成了时刻变化的变量。本文沿发布、注册、发现、调用、监控的治理闭环展开:注册中心的数据模型、健康检查与AP/CP取舍,自我保护、推空保护与本地快照三道自保机制;服务发布的启动器、动态代理、发布管理器、协议服务器与登记顺序;消费端的服务目录、请求ID配对、六种集群容错与三种发现模式;日志、指标、链路三支柱与熔断舱壁。配套五个Java演示程序实测:默认参数下宕机实例平均240秒才被摘除,优雅下线可降至45秒,统计窗口长于租约会让自我保护失效,尾部采样可捕获全部慢请求。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

OpenGL学习二十:纹理函数

通过纹理函数(glTexEnv*())可以把纹理图像的颜色与物体表面的原先的颜色进行混合 当我们指定纹理数据时,其第三个参数internalformat可以简化为6种格式   基本内部格式 所提取的源颜色(R,G,B,A) GL_ALPHA (0,0,0,A) GL_LUMINANCE (L,L,L,1) GL_LUMINANCE_ALPHA (...

Star 397

金融领域必备:Python爬虫+AI量化分析,爬取股票数据并实现智能交易策略

本文通过Python爬虫+AI量化分析的组合,实现了从股票数据爬取到智能交易策略的全流程。免费获取全维度金融数据(行情、财务、舆情),替代付费终端;用LSTM模型捕捉股价的时间序列规律,提升预测精度;基于Backtrader实现策略回测与优化,保证策略的有效性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1371

(2-2-2)位置控制算法:常用的位置控制算法(2)

例如下面是一个使用滑模控制算法实现机器人位置控制的例子,在该例子中,假设机器人在一维空间中移动,目标是使机器人的位置迅速、鲁棒地达到设定的目标位置。自适应控制算法通过实时地调整控制器参数,可以适应系统的变化,从而提高系统的鲁棒性和性能。模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,通常应用于动态系统,以实现对系统状态的优化控制。(6)迭代优化:随着时间推移,MPC迭代执行上述步骤,持续优化控制输入,以适应系统动态和外部扰动,实现对系统状态的稳健控制。

码农三叔 1607

8.11 OpenGL纹理和采样器:纹理查询

大多数纹理状态变量的查询受到值的限制,以确定查询哪个服务器纹理状态向量。表23.12 表明在状态查询期间由限定的那些状态变量。

1561

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

8.7 OpenGL纹理和采样器:压缩纹理图像

纹理图像也可以使用已存储在已知压缩图像格式中的图像数据来指定或修改,这些格式包括附录D中定义的格式以及由扩展定义的任何额外格式。特定压缩内部格式施加的任何限制都是不变的,这意味着如果GL接受并以压缩形式存储纹理图像,在满足以下条件时,向。调用期间,对于这些具体压缩格式的压缩纹理图像中不与正在修改区域相交的任何4×4纹理单元块,其内容都会被保留。中描述的具体压缩格式之一,则纹理将以相应的纹理图像编码方式存储(参见附录D)。返回的图像,而且也适用于任何其他同样大小的正确编码的压缩纹理图像。标记的规范进行解码。

1402

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Learn OpenGL 04 纹理

GL_LINEAR(也叫线性过滤,(Bi)linear Filtering)它会基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。GL_NEAREST产生了颗粒状的图案,我们能够清晰看到组成纹理的像素,而GL_LINEAR能够产生更平滑的图案,很难看出单个的纹理像素。激活纹理单元之后,接下来的glBindTexture函数调用会绑定这个纹理到当前激活的纹理单元,纹理单元GL_TEXTURE0默认总是被激活,所以我们在前面的例子里当我们使用。那么这两种纹理过滤方式有怎样的视觉效果呢?

Mr_Dongzheng的博客 1111

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OpenGL纹理 常用API简介

#原始图像数据与内存包装 图像的存储空间= 图像的宽度 * 图像的高度 * 每个像素的字节数(系统决定) 内存对齐: 字长32位的计算机上,如果数据在内存中按照32位的边界对齐(地址为4字节的倍数),那么硬件提取数据的速度就会快得多,同样在64位计算机上,如数据地址按照8字节对齐,他对数据存取效率会非常高。 在许多硬件平台上,考虑到性能的原因位图和像素图的每一行的数据会从特殊的字节对齐地址开始。绝...

weixin_30472035的博客 291

OpenGL纹理

TEXTURE_1DTEXTURE_2DTEXTURE_3D。

技术学习 159
上一篇: OpenGL曲线绘制
下一篇: OpenGL消隐凸多面体
fqq3
博客等级 码龄4年 114粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值