opengl纹理,光照,glColor4f(),混合

OpenGL中glClear、glColor4f、glClearColor的简单说明 函数原型:     void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha); void glColor4f(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha); void glClear(GLbitfield mask); 阅读详情

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值在此处无用。下面的程序中可验证,无论x取何值,都对结果无影响)。

(2)如果无光照,则glColor4f(Cr,Cg,cb,Calpha)有效,则P1=P*C=( r*Cr,g*Cg,b*Cb,Calpha).如果还有混合的话,则P1再按alpha比例与以前的点混合.

总结:

(1)有光照时:像素点最终颜色P1的alpha恒为1,P1的RGB=像素RGB*光照RGB。

(2)无光照时:像素点最终颜色P1的alpha为glColor4f()的alpha值,P1的RGB=像素RGB*glColor4f()的RGB。

可以通过下面的程序来验证结果(可用QQ截图查看最终显示图的像素).

代码如下(摘自nehe的opengl教程-07-灯光,且可在DrawGLScene()函数内更改混合状态(glEnable(GL_BLEND) 或者glDisable(GL_BLEND)),程序运行后按大写的L可打开/关闭光源,且为了便于计算,我把纹理图片.bmp特意做成背景为白色,里面有几个红色,绿色,和像素为100的小方框):

其中,opengl默认背景glClearColor(0.6,0.6,0.6),光照值为(0.4,0.4,0.4,x),待检验的像素为100,即(100/255,100/255,100/255),设r=100/255,无光照时glColor4f(0.2,0.2,0.2,0.1)的alpha=0.1:

一、如果混合方式为glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA):

(1)无光源:则glColor4f(0.2,0.2,0.2,0.1)有效,所以像素P的实际颜色为

P1=背景色RGB*对应alpha+像素色RGB*glColor4f颜色RGB*对应alpha

=(0.6,0.6,0.6)*0.9+(100/255,100/255,100/255)*(0.2,0.2,0.2)*0.1

=(0.6*0.9,0.6*0.9,0.6*0.9)+(100/255 *0.2*0.1,100/255 *0.2*0.1,100/255 *0.2*0.1),各乘以255后为(140, 140, 140);

(2)有光源:则glColor4f()无效,所以像素P的实际颜色为

P1=背景色RGB*对应alpha +像素色RGB*光照颜色RGB*对应alpha

=(0.6,0.6,0.6)*0+(100/255,100/255,100/255)*( 0.4,0.4,0.4)*1

=(0.6*0,0.6*0,0.6*0)+(100/255 *0.4* 1,100/255 *0.4* 1,100/255 *0.4* 1),各乘以255后为(40, 40, 40)。

 

二、如果混合方式为glBlendFunc(GL_SRC_ALPHA, GL_ONE);即已画的(目标)不变,再加上要画的源):

(1)无光源:则glColor4f(0.2,0.2,0.2,0.1)有效,所以像素P的实际颜色为

P1=背景色RGB*对应alpha+像素色RGB*glColor4f颜色RGB*对应alpha

=(0.6,0.6,0.6)*1+(100/255,100/255,100/255)*(0.2,0.2,0.2)*0.1

=(0.6,0.6,0.6)+(100/255 *0.2*0.1,100/255 *0.2*0.1,100/255 *0.2*0.1),各乘以255后为(155, 155, 155);

(2)有光源:则glColor4f()无效,所以像素P的实际颜色为

P1=背景色RGB*对应alpha +像素色RGB*光照颜色RGB*对应alpha

=(0.6,0.6,0.6)*1+(100/255,100/255,100/255)*( 0.4,0.4,0.4)*1

=(0.6,0.6,0.6)+(100/255 *0.4* 1,100/255 *0.4* 1,100/255 *0.4* 1),各乘以255后为(193, 193, 193)。

 

三、如果混合方式为glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);则与glBlendFunc(GL_SRC_ALPHA, GL_ONE);的结果一样,这表示,帧缓存中像素的alpha值就是1。

 

四、而上面有无光照的2种情况,在无混合时,无需乘以对应的alpha:

(1)无光源:则glColor4f(0.2,0.2,0.2,0.1)有效,所以像素P的实际颜色为P1=像素色RGB*glColor4f颜色RGB=(100/255,100/255,100/255)*(0.2,0.2,0.2)

=(100/255* 0.2, 100/255* 0.2, 100/255* 0.2),各乘以255后为(20, 20, 20);

(2)有光源:则glColor4f()无效,所以像素像素P的实际颜色为P1=像素色RGB*光照颜色RGB= (100/255,100/255,100/255)*( 0.4,0.4,0.4)

=(100/255* 0.4, 100/255* 0.4, 100/255* 0.4) ,各乘以255后为(40, 40, 40)。

 

验证时,为简化,可只检验一个颜色,如颜色(r,g,b)的r值。

 

下面这段代码可控制光源中只有全局环境光(为(0.4,0.4,0.4,0.7)),这样在计算某个点的光照,混合,纹理时可把光照值定下来(此处为(0.4,0.4,0.4, 0.7)),再确定其他操作(如混合)以像素产生的效果.

注:顶点光照值为:自发散光+全局环境光+光源环境光+散射光+镜面光=

Emission+ LIGHT_MODEL_AMBIENT+ Ambient+ Diffuse+ Specular

(此处只有全局环境光(0.4,0.4,0.4, 0.7))

且结果与全局环境光的alpha值0.7无关。即当前点的alpha值与光照的alpha值是无关的。

 

GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 };

GLfloat mat_diffuse[] = { 0.0, 0.0, 0.0, 1.0 };//无散射光

GLfloat mat_emission[] = { 0.0, 0.0, 0.0, 1.0 };//无自发散光

GLfloat mat_specular[] = { 0.4, 0.4, 0.4, 1.0 };//

GLfloat mat_shininess[] = { 2.0 };

 

GLfloat LightPosition[] = { 1.0, 1.0, 1.0, 1.0 };//点光源(位置性光源)

GLfloat LightAmbient[] = { 0.0, 0.0, 0.0, 1.0};//无光源的环境光

GLfloat LightDiffuse[] = {1.0, 1.0, 1.0, 1.0};

GLfloat light_specular[] ={ 0.0, 0.0, 0.0, 1.0};//无镜面光

GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 0.7};//只有全局环境光

 

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

 

glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);//点光源相对视点的位置始终不变,此处是(1,1,1)

glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);

glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);

glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);

 

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);//全局环境光

 

glEnable(GL_LIGHTING);                    // 启用光源

glEnable(GL_LIGHT0);                      // 启用0号光源

 

glClearColor( 0.6f, 0.6f, 0.6f, 0.3f);//背景色

 

前面(一)glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)对应的完整源代码如下:

#pragma comment( lib, "opengl32.lib" )          

#pragma comment( lib, "glu32.lib" )   

#pragma comment( lib, "glut32.lib")

#pragma comment( lib, "glew32.lib")

#pragma comment( lib, "glaux.lib")

#pragma comment( lib, "vfw32.lib" )   

/********************************************************************************************************************************/

 

#include <windows.h>     // Windows的头文件

#include "glew.h"        // 包含最新的gl.h,glu.h库

#include <stdio.h>          // 标准输入/输出库的头文件

#include "glaux.h"          // GLaux库的头文件

 

GLfloat       xrot;         // X 旋转量

GLfloat       yrot;         // Y 旋转量

GLfloat       zrot;         // Z 旋转量

/***********************************新添的代码***********************************************************************************/

GLfloat xspeed;                                      // X 旋转速度

GLfloat yspeed;                                      // Y 旋转速度

 

BOOL   light;                                    // 光源的开/关

BOOL   lp;                                       // L键按下了么?

BOOL   fp;                                       // F键按下了么?

 

GLfloat    z=-5.0f;                                   // 深入屏幕的距离

 

GLuint filter;                                       // 滤波类型

GLuint texture[3];                                   // 3种纹理的储存空间

 

GLfloat spot1_direction[] = { 0.0f, 0,-1.0f};                  // light1的聚光方向,沿相机视线方向

GLfloat angle_Light1 = 30.370f;                                   //聚光源light1的截止角

 

 

GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 };

//GLfloat mat_diffuse[] = { 0.4, 0.4, 0.4, 1.0 };

GLfloat mat_diffuse[] = { 0.0, 0.0, 0.0, 1.0 };//无散射光

GLfloat mat_emission[] = { 0.0, 0.0, 0.0, 1.0 };//无自发散光

GLfloat mat_specular[] = { 0.4, 0.4, 0.4, 1.0 };

GLfloat mat_shininess[] = { 2.0 };

 

GLfloat LightPosition[] = { 1.0, 1.0, 1.0, 1.0 };//点光源(位置性光源)

GLfloat LightAmbient[] = { 0.0, 0.0, 0.0, 1.0};//无光源的环境光

GLfloat LightDiffuse[] = {1.0, 1.0, 1.0, 1.0};

GLfloat light_specular[] ={ 0.0, 0.0, 0.0 /*1.0, 1.0, 1.0*/, 1.0};//无镜面光

GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 0.7/*1.0*/};//只有全局环境光

//GLfloat lmodel_ambient[] = { 0.0, 0.0, 0.0, 1.0};

/********************************************************************************************************************************/

 HDC          hDC=NULL;     // 窗口着色描述表句柄

HGLRC      hRC=NULL;     // OpenGL渲染描述表句柄

HWND       hWnd=NULL;    // 保存我们的窗口句柄

HINSTANCE  hInstance;    // 保存程序的实例

 

bool   keys[256];        // 保存键盘按键的数组

bool   active=TRUE;      // 窗口的活动标志,缺省为TRUE

bool   fullscreen=TRUE;  // 全屏标志缺省,缺省设定成全屏模式

 

LRESULT    CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // WndProc的定义

AUX_RGBImageRec *LoadBMP(CHAR *Filename)             // 载入位图图象

{

    FILE *File=NULL;                              // 文件句柄

    if (!Filename)                                  //确保文件名已提供

    {

       return NULL;                             //如果没提供,返回NULL

    }

    File=fopen(Filename,"r");                       //尝试打开文件

    if (File)                                    //文件存在么?

    {

       fclose(File);                             // 关闭句柄

       return auxDIBImageLoadA(Filename);           //载入位图并返回指针

    }

    return NULL;                                 //如果载入失败,返回NULL

}

 

int LoadGLTextures()                            //载入位图(调用上面的代码)并转换成纹理

{

    int Status=FALSE;                            //状态指示器

    AUX_RGBImageRec *TextureImage[1];                // 创建纹理的存储空间

    memset(TextureImage,0,sizeof(void *)*1);        //将指针设为NULL

   

/***********************************新添的代码***********************************************************************************/

    // 载入位图,检查有错,或位图不存在的话退出

    if (TextureImage[0]=LoadBMP("Data/Crate.bmp"))

    {

       Status=TRUE;                       // 状态设为TRUE

       glGenTextures(3, &texture[0]);                // 创建纹理

       // 创建Nearest滤波贴图

       glBindTexture(GL_TEXTURE_2D, texture[0]);

       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

       glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

 

       // 创建线性滤波纹理

       glBindTexture(GL_TEXTURE_2D, texture[1]);

       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

       glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

 

       // 创建MipMapped纹理

       glBindTexture(GL_TEXTURE_2D, texture[2]);

       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);

       gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_

OpenGL入门学习一 基本图形绘制函数介绍 颜色设置 glColor3f(1.0,0.0,0.0) #设置颜色为红色 glColor4f(0.0,1.0,1.0,1.0)#设置颜色为青色,1.0表示不透明度 glColor3ub(0,0,255) #设置颜色为蓝色 glColor3fv([0.0,1.0,0.0]) #设置颜色为青色 设置顶点 glVertex2f(1.0,0.5) #xoy平面上的点,z=0... 阅读详情

相关推荐

OpenGL入门学习笔记

文章目录Lesson1:环境搭建Lesson2:绘制三角形,四边形,多边形Lesson3:光滑着色与平面着色Lesson4:旋转Lesson5:3D空间 Lesson1:环境搭建 OpenGL开发库文件 提取码:orx1 VC++6.0安装包 提取码:944c 将开发库中的.h文件拷贝到Visual C++ 6.0的\Include\GL目录中,若无GL目录,自己建一个 ...

YoungHD的博客 433

OpenGL 核心模式与立即模式:3 个关键差异与迁移路径解析

本文深入解析OpenGL核心模式与立即模式的3个关键差异,包括状态管理机制、着色器角色和性能架构的革新。通过对比代码示例和性能数据,提供从固定管线到现代可编程管线的迁移路径,帮助开发者掌握OpenGL核心模式的优化策略和最佳实践。

1180

OpenGL与Shader入门:从固定管线到可编程渲染的实战指南

在计算机图形学中,可编程渲染管线是实现复杂视觉效果的核心技术。其原理在于将渲染流程中的关键计算阶段(如顶点变换和像素着色)从固定的硬件功能中解放出来,允许开发者通过编写着色器程序进行自定义控制。这一技术的核心价值在于极大地提升了渲染的灵活性和表现力,使得实时生成逼真的光照、材质和特效成为可能。着色器本质上是运行在GPU上的微型并行程序,使用GLSL语言编写,通过顶点着色器和片段着色器等阶段协同工作。在工程实践中,掌握Uniform、顶点属性等数据传递机制,以及VBO、VAO等缓冲区管理,是构建高效渲染流程的

tang_zongyun的博客 858

OpenGL与GDI混合编程:Visual C++图形绘制实战解析

在Windows图形编程中,GDI与OpenGL分别代表了CPU软绘制与GPU硬件加速两条技术路径。GDI擅长线条、文字等基础2D绘制,而OpenGL通过渲染管线和着色器实现复杂3D场景与高效图形输出。理解二者在像素格式、渲染上下文、双缓冲交换等底层机制上的差异,是构建混合渲染架构的关键。实际桌面应用中,常以GDI实现HUD、坐标轴等覆盖层,用OpenGL承载主场景渲染,兼顾开发效率与性能表现。本文以“OpenGL-Drawing.rar”示例工程为切入点,从工程配置、固定管线代码拆解到glUniformM

weixin_34356555的博客 303

KUKA机器人 - 从开机到自动运行

注1:本文仅代表本人对机器人使用的一些建议,在使用机器人前,还请详细阅读库卡机器人官方资料,道路千万条,安全第一条!!! 注2:技术有限,欢迎各位大大在阅读过程中发现各类问题,并且批评指正!!! 目录 一、准备工作 1. 机器人上电完成 2. 电脑安装Workvisual 二、学习手动移动机器人 三、项目配置 1. 设置机器人IP地址 2.电脑和机器人通过网线连接 3.查找并打开项目 4. 通讯配置 5. 项目上传 6. 检验IO配置 四、编程 1.新建程序 2. 程序...

yilunyao的博客 1万+

Windows系统下Mamba环境配置实战:从零到编译成功

本文详细记录了在Windows系统下从零开始配置Mamba深度学习环境的完整实战过程。针对官方不直接支持Windows的难点,文章提供了关键解决方案,包括安装特定版本的Python、PyTorch与第三方Triton,以及修改源码以解决Windows编译器的兼容性问题,最终成功编译并运行Mamba-SSM。

weixin_28842269的博客 500

在 Kubernetes 上部署 Label Studio

Label Studio 是一款开源的数据标注工具,支持多种标注任务,如文本标注、图像标注、音频标注等。

啥都会一点 668

MaxKey+JeecgBoot单点登录实战:手把手教你从零配置到账户同步

本文提供MaxKey与JeecgBoot单点登录(SSO)的实战整合指南。详细讲解从MaxKey应用注册、JeecgBoot前后端改造,到最终实现账户同步的完整步骤,重点解决Shiro配置、令牌交换等关键问题,帮助企业构建统一、可扩展的身份管理体系。

weixin_29258297的博客 541

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 392

ICC2: 如何让CTS指定pin多长指定长度

这里create_clock不需要写到sdc里,在脚本里写就行,需要注意的是脚本里存在remove_clock_tree的话,add_buffer就要放remove_clock_tree后面,或者给guide buffer设don't touch也行。跟innovus的操作逻辑一样,如果要让tree上的某一点长长,要先考虑这个点后面的clock tree能正常balance。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?-5意味着长长5ns,相反正值意味着做短。

m0_61544122的博客 679

第6篇:ESP32连接无源喇叭播放音乐《涛声依旧》

相邻两个音之间的倍数是2^(1/12),约等于1.0594630943592952645618252949463)。这样一来,高八度的do频率是低八度do的两倍。我们把频率440赫兹作为中央C ,C调的歌就是把频率440赫兹当作do,乐谱中写作:1=C。一个八度分成12份,八个八度的十二平均音率对应的频率如下(从33Hz到7902Hz)。相邻的两个音之间的差一个半音,12345671之间的间隔分别是“全全半全全全半”。D调的歌就是把从440后面第二个音494赫兹当作do,乐谱中写作1=D。

Txwtech 1424

把 ABAP ALE Change Pointers 讲透:从 CDHDR/CDPOS 到 BDCP2,再到 RBDMIDOC 的自动分发链路

摘要:SAP ALE Change Pointers机制在系统集成中实现业务变更与数据分发的解耦。它记录业务对象变更(如SAP主数据修改),但不立即发送,而是由后续分发逻辑决定发送时机和方式。该机制包含两层:Change Documents记录审计级变更明细,Change Pointers标记需分发的关键变更。配置核心包括全局开关、消息类型激活和字段选择。典型应用如零售价格条件变更自动推送至POS系统,通过BDCP2表存储待处理队列,由RBDMIDOC程序定时评估生成IDoc。运维需关注定期清理和性能优化,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 209

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: opengl光照方程的计算验证
下一篇: osglight解析
tmljs1988
博客等级 码龄19年 134粉丝 107原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值