openGL基础

OpenGL使用入门笔记(一) OpenGL使用入门笔记(一)1 几个基本函数和概念了解1.1一个入门的OpenGL程序1.2一个进阶的绘图程序解释一下函数什么意思1.3 GLUT函数及解释1.4 走样与反走样啥意思2 绘制几何模型2.1 画点2.2 画线2.2.1 线段2.2.2 线段序列2.2.3 封闭线段2.3 画三角形2.3.1 三角形2.3.2 三角形序列2.4 画四边形2.4.1 四边形2.4.1 四边形条带2.5 ... 阅读详情

 1. 保持模式与立即模式:
  通常情况下我们编写3D图形时可使用两种不同的方法:
  一种方法我们称之为保持模式。在保持模式中,我们可以向编写的API或是工具箱提供物体及场景的描述,然后图形包就会在屏幕上创建这个图像,我们需要做的就是提供命令去改变照相机或场景中其他物体的位置和观察方向。对于我们开发者而言,我们创建的能够对物体及场景的描述称为场景图,场景图是什么呢?大家可能对这个名称比较熟悉但却不能说出它的准确含义。在通常情况下,场景图是个有向无环图的数据结构,它包含了场景中的所有物体以及这些物体之间相互的关系,实现了对物体及场景的描述。据了解,现在许多的游戏引擎及高层工具箱都使用了这种方法。这使得我们开发人员不需要对其渲染过程进行特别精细的控制,它只需要向图形函数库提供一个模型或是场景,图形函数库就会负责进行渲染,大大减轻了我们开发人员的工作量。

       另一种方法我们称之为立即模式。在立即模式中,我们不需要像保持模式一样去提供一个模型或是场景,而是向图形处理器发送命令,图形处理器就会根据它的状态及发送的命令产生立即的效果。查询图形学书籍得知,大多数保持模式中的API或场景图在其内部使用一个立即模式的API执行实际的渲染任务。

 

  2. OpenGL是什么?

  OpenGL是一套应用程序编程接口(API),借助这个API我们开发人员就可以开发出对图形硬件具有访问的能力的程序。我们可以使用OpenGL开发出运行效率较高的图形程序或游戏,因为OpenGL非常接近底层硬件并且OpenGL使得我们不必去关注图形硬件的细节。既然我们开发人员不必关注图形硬件的细节,那么我们需要关注什么呢?我们需要关注OpenGL如何绘制,按照专业术语就是根据物体的规格参数及相关属性,借助虚拟照相机和光照生成一幅该物体的图像。OpenGL程序与平台是无关的,所以OpenGL API中不包含任何输入函数或窗口函数,原因是因为这两种函数都要依赖于特定的平台,例如Windows,Linux或是其他系统。

 

  OpenGL API是过程性的,不是描述性的,即OpenGL不是面向对象的,所以OpenGL无法利用面向对象的特性,例如重载,继承等,但是我们可以使用面向对象的程序与OpenGL的实现进行链接就可以了。作为开发人员来说,我们不需要去描述场景的性质和外观,而是去确定一些操作步骤,为些操作步骤是为实现一定图形或图像所服务的。我们在实现这些步骤时可以调用OpenGL中的一些命令,可以利用这些命令绘制点、直线、多边形或是其它图形,还可以调用这些命令实现光照、着色,动画等各种效果。

 

  OpenGL的实现可以是软件实现,也可以是硬件实现。软件实现是对OpengGL函数调用时作出的响应并创建二维或三维图像的函数库,那么硬件实现则是通过设置能够绘制图形或图像的图形卡驱动程序。一般来说,硬件实现要比软件实现快得多。我们都应该熟悉,在Windows上,是由图形设备接口将图形或图像显示在屏幕上或是其他显示设备上的。OpenGL的实现就软件实现来说,在Windows上会根据程序命令的要求,生成相应的图形或图像,然后会将这个图形或图像移交给图形设备接口,由图形设备接口将图形或是图像显示在我们的屏幕上或是其他显示设备。这样一说,我们可能会明白一点OpengGL原来是在应用程序和图形设备接口之间运作,但我感觉还不能准确地这样说。

  OpenGL的硬件实现与软件实现稍微有些不同,硬件实现是将OpenGL的调用传递给硬件驱动程序,而硬件驱动程序不会将生成的图形或图像传递给图形设备接口,而是直接与显示设备通信,直接将图形或图像结果传递给显示器或其他显示设备。如下图所示:

  

  

  OpenGL在绘制图形时是基于一个被称为流水线模型的模式。也就是说其中的几何图形在程序中通过描述空间位置或顶点来指定其形状并由程序生成,这些顶点在流经一系列模块时,每个模块在图形的基本组成部分(在这里称为图元)经过时对其实施一种或多种操作。模块负责对流经的图元实施一种或多种操作变换,例如:旋转、平移、缩放及对摄像机进行定位等。

 

 3. OpenGL的组成

  OpenGL中包含许多对图形图像处理的函数,主要包括以下几种:

  图元函数:指定要生成图形或图像的图元。主要有两种类型,一种是绘制二维或三维的几何图元,如点,线,多边形等;另一种是离散型的实体,例如:位图。

  属性函数:属性函数主要是控制图元的外观及样式,例如:对图元的颜色、线型、光照及纹理等效果处理。

  观察函数:观察函数主要是对摄像机属性的操作。我们可以操作摄像机显示图形或图像近距或是远距效果。

  控制函数:能够让我们启用或是彬各种OpenGL的特性。

  查询函数:可以让我们查询OpenGL状态变量的值。

  输入与窗口控制函数:这个本身不属于OpenGL,但是由于我们会经常在程序中输入输出或是窗口控制操作,所以,这些函数还是比较重要的。

 OpenGL函数库一般包含在两个库中,分别称为GL或GLU。GL是OpenGL的核心库,包含必需的OpenGL函数。GLU是OpenGL的实用库,包含许多的新函数。下面的代码显示了许多的Windows程序包含的典型头文件:

#include <GL/gl.h>
#include <GL/glu.h>
#include <windows.h>

 

  但是为了实现和窗口系统的交互,一般使用如下代码引用头文件:

#include <GL/glut.h>

 

  GLUT表示OpenGL工具箱,体现了现代窗口系统所共有的功能函数库。GLUT的目的就是隐藏平台的细节,glut.h已经包含了gl.h和glu.h。使用GLUT是因为OpenGL没有包含输入和窗口命令,而输入和窗口命令是由平台所决定的,与平台的相关性较大。但是前面说过,OpenGL是与平台无关的,也就是说OpenGL是跨平台的。这样设计人员就需要专门设计一个需要和窗口系统进行交互的函数库。

 

  为了能使OpenGL代码更易于从一个平台移植到另一个平台,OpenGL定义了它自己的数据类型,这些数据类型都可以映射到相应的C语言数据类型中。下图显示其映射关系:

 

  

 4. 开发语言与编程约定

  我们开发OpenGL目前最流行的做法是OpenGL的C语言绑定,当然也可以使用其它平台或语言,例如.NET、JAVA、Python、Perl等。我会在下一篇文章中介绍如何配置相应的环境。

 

  我们以后会见到OpenGL的函数多是以gl开头,因为OpenGL的函数遵循一定的命名约定,它可以告诉我们这个函数来自哪个函数库,并且还可以告诉我们这个函数的参数个数和类型。

  OpenGL的函数是采用以下的书写格式:

  <函数库前缀><根命令><可选的参数数量><可选的参数类型>

 

  以下是一个函数标注图:

  

 5. 坐标系与变换

  在开发OpenGL程序时,需要用到两个坐标系。一个称为对象坐标系,另一个称为世界坐标系。

  第一个坐标系是我们在开发中使用的坐标系;第二个坐标系又称为窗口坐标系或屏幕坐标系,在这个坐标系中的单位是像素。

  在绘制的过程中,OpenGL会自动实现从对象到窗口坐标系的转换,所需要的信息是屏幕中显示窗口的尺寸和用户希望显示对象空间的大小。OpenGL中所需要的坐标系变换由两个矩阵决定,即模型视图矩阵和投影矩阵,这些矩阵是OpenGL的状态的一部分。设置这两种矩阵的典型步骤包括以下三个步骤:

  (1) 指定我们希望修改的矩阵。

  (2) 将矩阵设为单位矩阵。

  (3) 修改当前矩阵为用户期望的矩阵。

 

  以上三个步骤分别对应以下代码:

glMatrixMode(GL_PROJECTION)
glLoadIdentity();
gluortho2D(-1.0,1.0,-1.0,1.0)

 

  6. 图元及属性

  图元是图形系统中常用的基本实体,主要是指:点,线,直线,多边形,位图和像素,我们的2D或3D图形都可由这几个基本的图元来绘制。前面四个称为几何图元,主要是构建几何图形;后面二个称为非几何图元。OpenGL在处理几何图元和非几何图元的方式差别比较大。

  每个图元都有自己的属性,属性决定了由OpenGL显示的方式。比如多边形的颜色,形状,线条的粗细等。

  我们在绘制基本的图形时,总是以glBegin()函数开始,而以glEnd()函数结束,针对不同的图形,glBegin()函数中的参数不一样。如下所示是绘制两条直线段:

glBegin(GL_LINES);
    glVertex2f(-0.5, -0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.5, -0.5);
glEnd();

 

  OpenGL在绘制图形时有很多功能,比如:光照、消隐、纹理映射等,每一种功能都将影响绘制处理的速度,在我们的程序中可单独的启用或是禁用某些功能,在不使用时要将其禁用掉以使我们的程序更加高效。以下是启用或是禁用某项功能的代码:

void glEnable(GLenum feature)
void glDisable(GLenum feature)

//启用点划模式
glEnable(GL_LINE-STIPPLE)

 

  7. 状态的保存

  OpenGL在内部就是一个状态机,函数调用会修改其内部的状态,OpenGL的状态决定了图元的行为和绘制方式。我们对图元的属性和其他状态变量所进行的全部修改,例如模型视图矩阵和投影矩阵,都会改变当前的状态。在OpenGL中提供了两种类型的堆栈,可将当前状态保存在堆栈中,以便以后使用。

 

  矩阵堆栈可用于保存投影矩阵和模型视图矩阵。每种类型的堆栈只能用来容纳相应类型的矩阵。所使用的矩阵由当前矩阵模式(GL_MODELVIEW或GL_PROJECTION)所决定的。可用函数glPushMatrix()和glPopMatrix()使矩阵入栈或出栈。

 

  矩阵堆栈的主要作用:一是在构建层次模型时,使用堆栈来遍历这些层次模型的树型数据结构;二是在进行绘制时可以回到先前的视图,而不需要我们重新计算绘制。我们会在开发过程中常看到以下代码:

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glPopMatrix();

 

  需要注意的是,入栈操作和出栈操作必须成对使用;一次出栈必须与一次入栈对应。在层次系统中,如果这对操作没有正确的成对出现的话,将使堆栈处于一种不可预知的状态。

  

  8. 单缓冲与双缓冲

  我们在构建图形窗口时经常也会经常看到以下的一行代码:

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); 

 

  这行代码告诉我们在创建时使用何种类型的显示模式。GLUT_SINGLE表示使用一个单缓冲的窗口;GLUT_RGBA表示使用RGBA颜色模式。

  单缓冲窗口意味着所有的绘图命令都是在被显示的窗口上执行的。另一种显示模式是双缓冲窗口,绘图命令实际上是在一个屏幕之外的缓冲区中执行的,然后快速反应的交换到窗口的视图上进行显示。我们经常用双缓冲模式开发具有动画效果的程序,这样会提高我们程序的执行效率。

 

  9. 一个简单的示例

  好了,上面说了那么多,有的人可能想知道OpenGL的程序到底是什么样的,主框架是什么?大家如果有C语言编程经验的一眼就能看出来它的结构。

  接下来让我们看一个运行VC++环境中的OpenGL示例,代码如下:

 

#include "StdAfx.h"
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>         /* glut.h 包含 gl.h和glu.h*/
#endif

void display(void)
{
    // 清除颜色缓冲区
    glClear(GL_COLOR_BUFFER_BIT); 

    // 绘制矩形
    glBegin(GL_POLYGON);
         glVertex2f(-0.5, -0.5);
         glVertex2f(-0.5, 0.5);
         glVertex2f(0.5, 0.5);
         glVertex2f(0.5, -0.5);
    glEnd();

    // 执行缓冲区
    glFlush(); 
}

int main(int argc, char** argv)
{
    // 初始化窗口
    glutInit(&argc,argv); 
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);  
    glutInitWindowSize(500,500);
    glutInitWindowPosition(0,0); 
    glutCreateWindow("绘制矩形"); 
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

 

  这是运行在VC6.0中的一个示例,在创建项目时需要注意创建的是控制台项目。

  怎么样?main函数中的代码你能看懂它的意思吗?我相信对大家不是难事。下面看来简单的解释。

 

  (1) glutCreateWindow("绘制矩形")是创建一个标题是"绘制矩形"的窗口。

  (2) glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB)函数在上面已经说过了。

  (3) glutDisplayFunc(display); 这行代码是将前面定义的display()函数确定为显示回调函数。也就是说在窗口需要被绘制时,GLUT将会调用这个函数。比如说,当窗口第一次显示或是窗口大小改变的时候,或是窗口从被覆盖的状态中恢复时,就会发生这个调用。这也是我们放置OpenGL渲染函数调用的地方。

  (4) glutInitWindowSize(500,500)和glutInitWindowPosition(0,0)则是分别设置窗口的大小和位置。

  (5) glutMainLoop() 这个函数很重要。这个函数启动了GLUT框架的运行。该函数一经调用便不再返回,直到程序的结束。所以,该函数在我们的程序中只调用一次,它能处理操作系统中特定的消息及击键等事件操作,直到我们的程序结束。

Android OpenGL ES学习笔记之常用API 上一篇文章Android OpenGL ES学习笔记之绘制点涉及到了一些API,在这篇文章配合一些实例给大家详细的讲解下。 缓冲区 在OpenGL ES 中存在着三种缓冲区 - 颜色缓冲区 ————包含了颜色索引或者RGBA颜色数据 - 深度缓冲区 ————存储每个像素的深度值,当启动深度测试时,片段像素深度值和深度缓冲区深度值进行比较,决定片段哪些像素点数据可以替换到颜色缓冲区中 阅读详情

相关推荐

OpenGL开发-第1章-创建环境

说明: 本系列在Windows10系统下进行,IDE主要用Clion(可以使用Qt、Visual Studio等任何IDE),组织代码用CMake,依赖下载用vcpkg。如果是Linux系统,可不用vcpkg,直接用系统自带的安装包管理就可以,如Ubuntu/Linux mint 用apt,CentOS/Fedora用dnf。OpenGL的版本为 3.3。 1.下载安装软件 安装Visual Studio,安装时注意要勾选C++开发套件,因为要用到它的C/C++编译工具。 安装Git。 安装CMake。 安

weixin_58040686的博客 1642

OpenGL glutDisplayFunc()函数

glutDisplayFunc()的使用方式是glutDisplayFunc(&amp;display); void display(void)函数为绘图函数。 glutDisplayFunc()是glut中很重要的函数,使用非常简单。 重点是对这个函数的理解: glutDisplayFunc(&amp;display)在程序运行时是自动调用的,即程序会自动调用display函数重绘窗口 ...

waveplot 2万+

OpenGL基础教程

OpenGL基础教程

qq_33934427的博客 1万+

OpenGL开发之旅基础知识介绍

  最近由于手机项目中需要用到OpenGL ES的知识,所以这段时间正在研究OpenGL的相关知识。因为OpenGL ES是OpenGL的剪裁版本,所以我直接从OpenGL入手,然后再去看OpenGL ES就很容易上手。从此篇开始,我将发表一系列文章来逐步深入介绍OpenGL的相关知识,开发我们可以使用VC6.0或.NET。     那么今天我要介绍的是OpenGL开发之旅基础知识介绍,这很重...

weixin_33717117的博客 456

Opengl入门基础-基础知识

opengl入门基础知识,包括:视口创建,着色器编写,光栅化解释等等内容,本文对opengl整体流程进行了简单介绍,通过代码来描述,并具体解释了opengl的相关图形知识,便于初学者对opengl整体上有大概印象,后面的opengl知识会在此基础中进行深度和广度的扩展。

qq_40779012的博客 1万+

OpenGL绘图基础

OpenGl绘图基础

千人斩的博客 628

OpenGL 入门(一)—— OpenGL 基础

OpenGL(Open Graphics Library)是图形领域的工业标准,是一套跨编程语言、跨平台、专业的图形编程(软件)接口。它用于二维、三维图像,是一个功能强大,调用方便的底层图形库。它与硬件无关,可以在不同的平台如 Windows、Linux、Mac、Android、IOS 之间进行移植。因此,支持 OpenGL 的软件具有很好的移植性,可以获得非常广泛的应用(比如 PS 在部分功能和操作中使用 OpenGL 加速,以提高图像处理和渲染的性能)。对于 Android 系统而言,它支持的是 Ope

tmacfrank 1万+

OpenGL + OpenGL ES +Metal 系列文章汇总

OpenGL 文章汇总 基础知识 一、了解 OpenGL 常见专有名词 二、屏幕卡顿 及 iOS中的渲染流程解析 三、OpenGL 渲染架构分析 四、深入剖析【离屏渲染】原理 五、OpenGL 渲染技巧:正背面剔除 六、OpenGL 渲染技巧:深度测试、多边形偏移、 混合 七、OpenGL中观察方式与矩阵的关系 八、了解OpenGL中的向量、矩阵 九、OpenGL 基础变化与矩阵堆栈 十、OpenGL 纹理相关API 十一、理解纹理坐标 OpenGL案例 案例 01、OpenGL入门–绘制三角形 案

lin1109221208的博客 2153

OpenGL 和 OpenGL ES基础知识

OpenGL是一个开放标准的图形API,最初由Silicon Graphics公司开发,并于1992年发布。OpenGL的目标是提供一种通用的、可扩展的、跨平台和高性能的图像渲染解决方案,使得程序员可以轻松地创建复杂的3D场景并进行交互式操作。OpenGL针对不同的平台、操作系统和硬件进行了优化,因此它非常适合于开发具有高级3D图形要求的程序,例如CAD、虚拟现实、游戏等。OpenGL ES最初是为嵌入式设备而提出的,这些设备包括智能手机、平板电脑、掌上游戏机等。

每一个不曾起舞的日子,都是对生命的辜负 2983

OpenGL ES与OpenGL 的区别

OpenGL ES 概述 本文对 OpenGL ES 做了综合性的介绍,包括 OpenGL ES 的由来、主要版本及其特点、OpenGL ES 与 OpenGL 的主要区别等等。   简介2 OpenGL_ES是khronos协会从OpenGL裁剪定制而来的,专为手机,游戏机等嵌入式设备而设计。它的接口其实和 Open GL很类似。 OpenGL_ES有几

把握自己。 1万+

OpenGL基础代码总结

OpenGL基础代码归纳总结 工具类头文件 着色器管理类 #include "GLShaderManager" GLTools函数 #include "GLTools.h" freeglut静态库 在Mac 系统下,#include<glut/glut.h> 在Windows 和 Linux上,我们使⽤用freeglut的静 态库版本并且需要添加⼀一个宏 #include <math.h> #ifdef __APPLE__ #include <glut/glu

lin1109221208的博客 999

旧版OpenGL 与 新版OpenGL

分割线:OpenGL3.0。 3.0之前,所有OpenGL版本都与早期版本完全向后兼容。针对OpenGL 1.1编写的代码可以在OpenGL 2.1实现中很好地执行。 3.0,引入了废弃functionality的想法。许多OpenGL函数被声明为已弃用,这意味着用户应避免使用它们,因为它们可能会从更高版本的API中删除。 3.1,OpenGL 3.1删除了OpenGL 3.0中几乎弃用的所有功能。这包括固定功能管道。 但是,由于许多实现仍然支持那些不推荐使用和已删除的功能,因此...

竹林的茅草小屋 5758

OpenGL与3D开发 - OpenGL与OpenGL ES

OpenGL与OpenGL ES 文章目录OpenGL与OpenGL ES1、3D图像引擎简介2、OpenGL3、OpenGL ES3.1 OpenGL ES版本分类4、OpenGL ES中基本概念4.1、渲染管线5、OpenGL 坐标系理解5.1、2D笛卡尔坐标5.2、3D笛卡尔坐标系5.3、左手坐标系和右手坐标系5.4、左手旋转规则、右手旋转规则5.5、对我们来说比较重要的总共有5个不同的坐标系统 1、3D图像引擎简介 现今较为知名的3D图形引擎有OpenGL、DirectX Ø DirectX

麦兜响当当的博客 1595

OpenGL基础56:OpenGL简单调试

图形编程想要调试并不是一件容易的事,有的时候渲染出全黑的结果基本上只能凭经验来查错,特别是对于着色器,断点日志都是无效的,因此想办法掌握一些调试方法还是有必要的,不然找错误的源头可能真的会非常困难 一、glGetError() 可以在程序的任意地方调用glGetError方法,它会返回之前所有的错误标记,常见的错误如下: 标记 代码 描述 GL_NO_ERROR 0 自上次调用glGetError以来没有错误 GL_INVALID_ENUM 1280 ...

加载中... 2980

银河麒麟系统V10 sp1,安装wine 9.0

银河麒麟系统V10 sp1 x86_64,安装wine 9.0

daqinzl的专栏 1万+

几率大的网络安全面试题(含答案)

其他篇章:Java校招极大几率出的面试题(含答案)----汇总 本文面试题汇总: 防范常见的 Web 攻击 重要协议分布层 arp协议的工作原理 rip协议是什么?rip的工作原理 什么是RARP?工作原理 OSPF协议?OSPF的工作原理 TCP与UDP区别总结 什么是三次握手四次挥手? tcp为什么要三次握手? dns是什么?dns的工作原理 一次完整的HTTP请求过程 Cookies和ses...

睶 6万+

OpenGL基础知识梳理——Windows上搭建OpenGL运行环境

0.前言 自去年开始做车载环视项目至今,接触和使用OpenGL已经一年多了。项目中个人更多参与的是环视中算法模块的开发(参数标定、图像校正与拼接、颜色校正、车体透明等),对OpenGL工作环境的创建没有仔细梳理学习,自觉不应如此。现在开始仔细梳理下相关的知识并记录为博客加深理解,so莱茨狗! 1.OpenGL介绍 官网:https://www.khronos.org/opengl/wiki/...

On my way 5005

Token验证绕过 靶场实战

实验介绍 1.漏洞简介 在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。 具有以下几点特性: 1)无状态、可扩展 2)支持移动设备 3)跨程序调用 4)安全 2.原理基于Token的验证原理 基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。 NoSession意味着你的程序可以根据需要去增减机器,而不用去担心用户是...

weixin_54771278的博客 2247

Learn OpenGL with Qt——OpenGL简述

OpenGL 在开始这段旅程之前我们先了解一下OpenGL到底是什么。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。 OpenGL规范严格规定了每个函数该如何...

ItaLink 2116

python电子学会三级的零碎笔记

‌示例‌:如果s = ['a', 'b', 'c'],则' '.join(s)+'\n'的结果是'a b c\n',写入文件时所有元素会在一行内显示,每个元素之间用空格分隔,末尾有一个换行符。(2) '\n'.join(s)‌:如果s = ['a', 'b', 'c'],则'\n'.join(s)的结果是'a\nb\nc',写入文件时每个元素会占据文件的一行。(1) ' '.join(s)+'\n'‌:这种方式首先将列表s中的每个元素通过空格连接成一个字符串,然后在字符串末尾添加一个换行符\n。

xzal12的博客 688

CRC_16---ModBus 计算方法及代码实现

1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器

1万+

OpenGL(二)——OpenGL图形绘制

上一篇我们介绍了什么是OpenGL,接下来,我们就开始用OpenGL实现简单的开发之旅吧。 大纲 今天将围绕以下几个环节,进行OpenGL的开发学习。 Xcode环境搭建 view的绘制之三角形绘制 好了,开始愉快的编程之旅吧,首先搭建开发环境。 一:Xcode环境搭建 GLFW编译: 1.下载GLFW的源码 —- GLWF用于创建OpenGL的Context,及创建显示窗口 2....

hirezy 4251

高分SCI讨论部分必学AI写作套路!仅需五步结合GPT‑5辅助,让你的SCI论文更有说服力(附实用AI提示词)

对于很多写SCI论文的学术人来说,其实“讨论部分”才是最致命的,网上虽然有大量的写作技巧和模板提供参考,但往往让人眼花缭乱,还是不知道如何下手。即便是下手了,也很难兼顾学术性与可读性,实际上讨论部分的难点并不在于写,而在于你能研究结果说清楚。今天七哥教你借助GPT-5,用五步法结合精心设计的AI提示词,让你能在科学逻辑与语言表达上一次性解决“讨论部分”的结构、内容、润色和翻译问题,轻松写出符合高分SCI期刊要求的讨论段落。

智能AI让学术科研更容易 1330

OpenGL基础2:OpenGL简介

其实看到这里,你应该也像我一样,装好了环境,并且成功打开了第一个窗口,又或者说已经可以开始绘制一些非常基础的单元了,但是刚入门你应该也一样,对着一堆方法一脸懵逼,看着讲解和教程似乎也能理解,但是脱离教程就会发现自己一行代码都弄不出来,还是需要不断地去参考。 小朋友你是否有很多问号,不知道为什么需要这么多复杂的方法,也不知道为什么要这么设计,更不知道仅仅显示一个点都那么复杂,后面3D游戏中的...

加载中... 912

【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库

在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1

寻道AI,探索AI无限可能! 2565

YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml

全网最详细的YOLOv5源码解读之配置文件yaml。逐行注释,逐句讲解,一文带你了解yaml。小白必看!

路人贾的博客 1万+
上一篇: LeetCode200
下一篇: 关于解决Python中requests模块在PyCharm工具中导入问题
LearnToStick
博客等级 码龄9年 11粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值