计算机图形学 | 实验一:绘制一个窗口

计算机图形学实验一 基本图形的生成算法 (8) 在CView.cpp文件中void CExp3View::DrawCircle_MB(CDC *pDC, CPoint p0, CPoint p1)函数中添加代码,实现圆的中点Bresenham生成算法。(8) 在CView.cpp文件中void CExp2View::DrawLine_MB(CDC *pDC, CPoint p0, CPoint p1)函数中添加代码,实现中点Bresenham直线生成算法。5、根据椭圆的中点Bresenham生成算法思想和椭圆的对称性, 完成椭圆的绘制。 阅读详情

华中科技大学《计算机图形学》课程

MOOC地址:计算机图形学(HUST)

计算机图形学 | 实验一:绘制一个窗口

在正式绘制窗口之前,我们先来介绍一下读完下面的部分你会了解些什么。

  • 如何使用GLAD
  • 渲染的过程包括最后的释放资源
  • 如何调整背景色

让我们先来试试能不能让GLFW正常工作。首先,新建一个.cpp文件,然后把下面的代码粘贴到该文件的最前面。

#include <glad/glad.h>
#include <GLFW/glfw3.h>

接下来我们创建main函数,在这个函数中我们将会实例化GLFW窗口:

#include "glad/glad.h"
#include "GLFW/glfw3.h"

int main()
{
	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
	//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
	return 0;
}

首先,我们在main函数中调用glfwInit函数来初始化GLFW,然后我们可以使用glfwWindowHint函数来配置GLFW。glfwWindowHint函数的第一个参数代表选项的名称,我们可以从很多以GLFW_开头的枚举值中选择;第二个参数接受一个整形,用来设置这个选项的值。如果你现在编译你的cpp文件会得到大量的 undefined reference (未定义的引用)错误,也就是说你并未顺利地链接GLFW库。

由于我们是基于OpenGL3.3来进行讨论的 ,我们将主版本号(Major)和次版本号(Minor)都设为3。我们同样明确告诉GLFW我们使用的是核心模式(Core-profile)。明确告诉GLFW我们需要使用核心模式意味着我们只能使用OpenGL功能的一个子集(没有我们已不再需要的向后兼容特性)。如果使用的是Mac OS X系统,你还需要加下面这行代码到你的初始化代码中这些配置才能起作用(将上面的代码解除注释):

glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

当然我们也可以看到GLFW当前使用的版本号,GLFW提供了很多函数可以让我们了解到当前使用的版本。

int Major, Minor, Rev;
glfwGetVersion(&Major, &Minor, &Rev);
printf("GLFW %d.%d.%d initialized\n", Major, Minor, Rev);

接下来我们创建一个窗口对象,这个窗口对象存放了所有和窗口相关的数据,而且会被GLFW的其他函数频繁地用到。

GLFWwindow* window = glfwCreateWindow(800, 600, "window", NULL, NULL);
if (window == NULL)
{
	std::cout << "Failed to create GLFW window" << std::endl;
	glfwTerminate();
	return -1;
}
glfwMakeContextCurrent(window);

glfwCreateWindow函数需要窗口的宽和高作为它的前两个参数。第三个参数表示这个窗口的名称(标题),这里我们使用"window",当然你也可以使用你喜欢的名称。最后两个参数我们暂时忽略。这个函数将会返回一个GLFWwindow对象,我们会在其它的GLFW操作中使用到。创建完窗口我们就可以通知GLFW将我们窗口的上下文设置为当前线程的主上下文了。

GLAD

在之前我们已经提到,GLAD是用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLAD。

if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
	std::cout << "Failed to initialize GLAD" << std::endl;
	return -1;
}

我们给GLAD传入了用来加载系统相关的OpenGL函数指针地址的函数。GLFW给我们的是glfwGetProcAddress,它根据我们编译的系统定义了正确的函数。

视口

在我们开始渲染之前还有一件重要的事情要做,我们必须告诉OpenGL渲染窗口的尺寸大小,即视口(Viewport),这样OpenGL才只能知道怎样根据窗口大小显示数据和坐标。我们可以通过调用glViewport函数来设置窗口的维度(Dimension):

glViewport(0, 0, 800, 600);

glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。

我们实际上也可以将视口的维度设置为比GLFW的维度小,这样子之后所有的OpenGL渲染将会在一个更小的窗口中显示,这样子的话我们也可以将一些其它元素显示在OpenGL视口之外。

然而,当用户改变窗口的大小的时候,视口也应该被调整。我们可以对窗口注册一个回调函数(Callback Function),它会在每次窗口大小被调整的时候被调用。这个回调函数的原型如下:

void framebuffer_size_callback(GLFWwindow* window, int width, int height);

这个帧缓冲大小函数需要一个GLFWwindow作为它的第一个参数,以及两个整数表示窗口的新维度。每当窗口改变大小,GLFW会调用这个函数并填充相应的参数供你处理。

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
	glViewport(0, 0, width, height);
}

我们还需要注册这个函数,告诉GLFW我们希望每当窗口调整大小的时候调用这个函数:

glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

当窗口被第一次显示的时候framebuffer_size_callback也会被调用。对于视网膜(Retina)显示屏,width和height都会明显比原输入值更高一点。

渲染

我们希望程序在我们主动关闭它之前不断绘制图像并能够接受用户输入。因此,我们需要在程序中添加一个while循环,我们可以把它称之为渲染循环(Render Loop),它能在我们让GLFW退出前一直保持运行。下面几行的代码就实现了一个简单的渲染循环:

while(!glfwWindowShouldClose(window))
{
	glfwSwapBuffers(window);
	glfwPollEvents();
}
  • glfwWindowShouldClose函数在我们每次循环的开始前检查一次GLFW是否被要求退出,如果是的话该函数返回true然后渲染循环便结束了,之后为我们就可以关闭应用程序了。
  • glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。
  • glfwSwapBuffers函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。
  • 双缓冲(Double Buffer):应用程序使用单缓冲绘图时可能会存在图像闪烁的问题。 这是因为生成的图像不是一下子被绘制出来的,而是按照从左到右,由上而下逐像素地绘制而成的。最终图像不是在瞬间显示给用户,而是通过一步一步生成的,这会导致渲染的结果很不真实。为了规避这些问题,我们应用双缓冲渲染窗口应用程序。前缓冲保存着最终输出的图像,它会在屏幕上显示;而所有的的渲染指令都会在后缓冲上绘制。当所有的渲染指令执行完毕后,我们交换(Swap)前缓冲和后缓冲,这样图像就立即呈显出来,之前提到的不真实感就消除了。

最后

当渲染循环结束后我们需要正确释放/删除之前的分配的所有资源。我们可以在main函数的最后调用glfwTerminate函数来完成。

glfwTerminate();
return 0;

这样便能清理所有的资源并正确地退出应用程序。现在你可以尝试编译并运行你的应用程序了,如果没做错的话,你将会看到如下的输出:

在这里插入图片描述

如果你看见了这样的一个黑色窗口,恭喜你,那就对了。

如果没有得到正确的结果,或者不知道怎样把东西放在一起,那么请参考源码:

/***
* 例程  绘制窗口 (MAKE后运行时可删除ALL_BUILD,也可以将Task-window设为默认启动工程)
* 步骤:
* 1-初始化:   GLFW窗口,GLAD。
* 2-渲染:     清空缓冲,交换缓冲区检查触发事件后释放资源
*/

#include <iostream>
#include "glad/glad.h"
#include "GLFW/glfw3.h"

// 屏幕宽,高
int screen_width = 1280;
int screen_height = 720;

int main() {
	glfwInit();                                                     // 初始化GLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);                  // OpenGL版本为3.3,主次版本号均设为3
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);  // 使用核心模式(无需向后兼容性)
	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);            // 如果使用的是Mac OS X系统,需加上这行
	glfwWindowHint(GLFW_RESIZABLE, false);						    // 不可改变窗口大小

	// 创建窗口(宽、高、窗口名称)
	auto window = glfwCreateWindow(screen_width, screen_height, "window", nullptr, nullptr);
	if (window == nullptr) {                                        // 如果窗口创建失败,输出Failed to Create OpenGL Context
		std::cout << "Failed to Create OpenGL Context" << std::endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);                                 // 将窗口的上下文设置为当前线程的主上下文

	// 初始化GLAD,加载OpenGL函数指针地址的函数
	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	// 指定当前视口尺寸(前两个参数为左下角位置,后两个参数是渲染窗口宽、高)
	glViewport(0, 0, screen_width, screen_height);

	// 渲染循环
	while (!glfwWindowShouldClose(window)) {
		// 交换缓冲并且检查是否有触发事件(比如键盘输入、鼠标移动等)
		glfwSwapBuffers(window);
		glfwPollEvents();
	}

	// 清理所有的资源并正确退出程序
	glfwTerminate();
	return 0;
}
在这里插入代码片

更改背景色

我们要把所有的渲染(Rendering)操作放到渲染循环中,因为我们想让这些渲染指令在每次渲染循环迭代的时候都能被执行。代码将会是这样的:

	// 渲染循环
	while (!glfwWindowShouldClose(window)) {

		// 清空颜色缓冲
		glClearColor(0.0f, 0.34f, 0.57f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		// 交换缓冲并且检查是否有触发事件(比如键盘输入、鼠标移动等)
		glfwSwapBuffers(window);
		glfwPollEvents();
	}

为了测试一切都正常工作,我们使用一个自定义的颜色清空屏幕。在每个新的渲染迭代开始的时候我们总是希望清屏,否则我们仍能看见上一次迭代的渲染结果(这可能是你想要的效果,但通常这不是)。我们可以通过调用glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲,可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。由于现在我们只关心颜色值,所以我们只清空颜色缓冲。

glClearColor(0.0f, 0.34f, 0.57f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

注意,除了glClear之外,我们还调用了glClearColor来设置清空屏幕所用的颜色。当调用glClear函数,清除颜色缓冲之后,整个颜色缓冲都会被填充为glClearColor里所设置的颜色。在这里,我们将屏幕设置为了一种好看的蓝色。效果如下:

在这里插入图片描述

完整代码:

/***
* 例程  绘制窗口 (MAKE后运行时可删除ALL_BUILD,也可以将Task-window设为默认启动工程)
* 步骤:
* 1-初始化:   GLFW窗口,GLAD。
* 2-渲染:     清空缓冲,交换缓冲区检查触发事件后释放资源
*/

#include <iostream>
#include "glad/glad.h"
#include "GLFW/glfw3.h"

// 屏幕宽,高
int screen_width = 1280;
int screen_height = 720;

int main() {
	glfwInit();                                                     // 初始化GLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);                  // OpenGL版本为3.3,主次版本号均设为3
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);  // 使用核心模式(无需向后兼容性)
	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);            // 如果使用的是Mac OS X系统,需加上这行
	glfwWindowHint(GLFW_RESIZABLE, false);						    // 不可改变窗口大小

	// 创建窗口(宽、高、窗口名称)
	auto window = glfwCreateWindow(screen_width, screen_height, "window", nullptr, nullptr);
	if (window == nullptr) {                                        // 如果窗口创建失败,输出Failed to Create OpenGL Context
		std::cout << "Failed to Create OpenGL Context" << std::endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);                                 // 将窗口的上下文设置为当前线程的主上下文

	// 初始化GLAD,加载OpenGL函数指针地址的函数
	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	// 指定当前视口尺寸(前两个参数为左下角位置,后两个参数是渲染窗口宽、高)
	glViewport(0, 0, screen_width, screen_height);

	// 渲染循环
	while (!glfwWindowShouldClose(window)) {
		// 清空颜色缓冲
		glClearColor(0.0f, 0.34f, 0.57f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		// 交换缓冲并且检查是否有触发事件(比如键盘输入、鼠标移动等)
		glfwSwapBuffers(window);
		glfwPollEvents();
	}

	// 清理所有的资源并正确退出程序
	glfwTerminate();
	return 0;
}
计算机图形学 实验三 OpenGL 的键盘交互绘制 提供此文章用于实验报告文本,代码随缘参考,书上代码+自己瞎写的,没有仔细研究,思考题大家自己想吧,不保证对就不放了,实验截图没有参考意义也不放了。 实验三OpenGL的键盘交互绘制 一、实验目的 1.理解OpenGL坐标系的概念,掌握OpenGL裁剪窗口、视区、显示窗口的概念和它们之间的关系,学会计算世界坐标和屏幕坐标。 2.学会OpenGL的简单键盘交互操作。 3.学会OpenGL的简单字符绘制。 4.进一步掌握OpenGL点、直线、多边形的绘制。 二、实验内容 1.调出实验一的源代... 阅读详情

相关推荐

【计算机图形学】一笔绘制金刚石图案

【开篇bb】 第一篇自己的优快云博客!!! 在优快云上抄了一年多作业, 终于要自己发博客啦233333,但是并没有什么含金量的其实嘤嘤嘤QAQ 想码一些作业当时做完有点成就感的作业吧,毕竟以我个人的水平和热爱学习的程度可能上学期间是我最后和计算机科学打交道的日子了orz(我的智商就不去拉低程序猿的平均水平了) //////////////////////////////////////////...

Mushroom_mg的博客 5562

21.创建一个图形窗口

简介 对鼠标移动后局部刷新图层窗口后,系统效率实现了质的飞跃。电脑上看到的图形界面都是操作系统提供相关窗口绘制功能绘制出来的。 目标 实现一个简单的消息小窗口,以窥见GUI的本质。 1.win_sheet.c //在特定窗口上绘制矩形 void sheet_fillRect(int x,int y,int width,int height,char col,SHEET *sht){ for(...

Zllvincent的博客 8857

孔令德的计算机图形学课程实验

授课总学时64,实验项目学时12  实验一  绘制任意斜率的直线(2学时)        验证性 实验内容:利用中点Bresenham算法,编程实现绘制任意斜率的直线。 基本要求: 1. 掌握中点Bresenham算法的原理和算法; 2. 使用鼠标在屏幕上绘制任意斜率的直线; 实验拓展:彩色直线与反走样直线。   实验二  交互式绘制多边形(2学时)  

klingde的专栏 1万+

如何用c语言创建一个图片窗口

c语言 用c语言创建一个简单的图片窗口

m0_70215122的博客 677

计算机图形学作业(一):利用OpenGL绘制三角形,并利用ImGUI增加颜色编辑窗口

计算机图形学作业(一):利用OpenGL绘制三角形,并利用ImGUI增加颜色编辑窗口前言绘制三角形颜色编辑窗口ImGUI的配置修改imgui_impl_opengl3.h文件 前言 OpenGL一般被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。由于OpenGL是一个图形API,并不是一个独立的平台...

看门猫的博客 3530

计算机图形学实验 实验一 OpenGL 图形编程入门

实验一 OpenGL图形编程入门 实验目的 了解和掌握OpenGL的安装。 掌握一个简单的基于OpenGL的C++程序结构。 掌握Win32程序框架。 掌握OpenGL中若干基本图形的绘制。 实验环境 硬件要求: PC:主流配置,最好为独立显卡,显存为512MB以上 软件环境 操作系统: Windows7/Windows8 语言开发工具:Microsoft Visual Studio 2010,Visual C++ 程序框架: Win32应用程序。 实验要求与内容 要求:将所有实验步骤生成的

m0_51576163的博客 3665

c语言创建绘图窗口,「分享」C语言如何编写图形界面

该楼层疑似违规已被系统折叠隐藏此楼查看此楼贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面。大家也都有回答,需要其他的库。MFC,GTK,QT。本人近期刚用GTK库加上纯C写成了第一个LINUX实用程序。现在与大家分享:主界面程序gmaxtrix.c#include#include"client_socket.h"#define MAX_BUFFER 1024static ...

weixin_36286774的博客 674

计算机图形学实验三 直线段的裁剪算法

答:在Liang-Barsky裁剪算法中,要判断窗口边界是否为入边或出边,需要计算直线段的参数化表示式与窗口边界的交点,并检查这些交点的参数值。要求解入边与直线段的交点,可使用参数化表示式计算直线段与窗口边界的交点,并取最大的t0值作为入边交点。如果直线段的左端点编码为 1,右端点编码不为 1,则直线段与左边界相交,需要进行裁剪;如果直线段的左端点编码不为 1,右端点编码为 1,则直线段与左边界相交,需要进行裁剪;如果直线段的左端点编码和右端点编码均为 1,表示直线段完全在左边界左侧,无需裁剪。

XIYOUMIN110的博客 1646

建立检测窗口matlab,MATLAB入门

matlab可以实现数值分析、优化、统计、微分方程数值解、信号处理、图像处理等若干领域的数值计算和图像显示,他将不同数学分支的算法以函数的形式分类成库,使用时直接调用函数并赋予实际参数就可以解决问题。老师说这个工具可以解决几乎所有的数建问题。一.matlab界面1.命令窗口命令窗口用于输入命令行,以实现计算以及绘图的功能。2.工作区此窗口显示当前matlab内存中使用的变量的信息,包括变量名,变量...

weixin_39966909的博客 358

【计算机图形学】实验一 直线生成算法实现(实验报告分析+截图+源码)

DDA、中点Brensenham(所有情况都囊括了)、Brensenham(仅有0

m0_55931547的博客 7954

计算机图形学基础算法实验:DDA、Bresenham、中点画圆

本文还有配套的精品资源,点击获取 简介:计算机图形学实验课程将引导学生通过实践掌握三种基础的二维图形绘制算法:DDA直线算法、Bresenham直线和圆绘制算法以及中点画圆算法。这些算法作为图形学领域的基石,在图像处理、游戏开发、CAD等多个领域有着广泛应用。学生将通过实验和代码执行深入理解这些算法,并为深入学习计算机图形学打下良好基础。 1. 计算机图形学定义与...

weixin_32306683的博客 1927

第一章 DirectX 计算机图形学(下)

创建一个Windows窗体 如果使用C++语言在Windows平台上做应用开发的话,主要有3种基本方式:第一种就是使用Windows API来进行开发。它是Windows操作系统与应用程序之间通信的基本接口。第二种使用MFC来进行开发。MFC是微软对Windows API进行封装的C++类。第三种方式就是Windows Forms。它是微软.NET开发框架的图形用户界面部分。本套课程我们使用第一种方式,使用C++语言调用Windows API直接与操作系统通信,再配上能够支持显卡硬件的图形库DirectX

konkon2012的博客 927

项目实训(四)——SAM模型的学习与部署

这里的show_mask就是我们用mask的prompt进行分割,show_points就是我们用points进行分割,show_box就是通过box进行分割,这是SAM的三种prompt的方式。总的来说,Meta AI 的 Segment Anything 模型为我们提供了一种全新的物体识别和分割方式,其强大的泛化能力和广泛的应用前景将极大地推动计算机视觉领域的发展。这里有vit_h、vit_b、vit_l三种权重模型,这里可以根据自己的需要下载相应的权重模型。我们是下载的vit_h权重模型。

yyyyyyyx_的博客 1421

计算机图形学完整笔记(一):图形学概论

文章目录第一章 计算机图形学概论1.1 全书概述1.2 计算机图形学定义1.3 计算机图形学研究内容1.4 计算机图形学的发展历史1.5 计算机图形学的应用领域1.6 计算机图形系统组成1.7 图形显示设备1.8 图形学相关概念1.9 图形图像的区别及存储格式 第一章 计算机图形学概论 1.1 全书概述 图形学基本知识 光栅图形学 扫描转换、区域填充、裁减、反走样、消隐 二维、三维图形变换及观察 几何造型 参数曲线曲面基本概念、Bezier曲线曲面、B样条曲线等 真实感图形学 颜

lucius-liu.cn 1万+

卫星载荷应用方案

本文将从技术和应用层面探讨卫星载荷的应用方案,分析各个领域的特点和挑战,以期为卫星载荷的应用提供一定的指导和参考。卫星载荷应用方案涵盖了通信、地球观测、气象预报、导航定位等诸多领域在每一个领域中,都存在着不同的技术挑战和应用需求。随着技术的进步和需求的变化,卫星载荷应用方案将不断发展和完善,为人类社会的进步和发展做出更大的贡献。用户可以通过接收多颗卫星的信号,计算自身的位置和速度信息。在覆盖扩展方面,可以采用多星座、MEO、GEO 等不同轨道高度的卫星布局,结合卫星的特点和应用需求,实现覆盖范围的扩展。

muyangjun的专栏 905

12-RK平台U-Boot启动流程

先看概述,把这一章要回答的问题摆出来,带着问题听。RK 特有的 BootROM -> MiniLoader -> SPL -> U-Boot -> Kernel。这是因为 RK 平台使用闭源的 DDR 初始化固件,需要通过 MiniLoader 来加载和运行。为什么多一层?这是 RK 平台的特殊性决定的。RK 平台使用闭源的 DDR 初始化固件,这段代码 Rockchip 不开源,只能以二进制形式提供,它需要一个载体来加载和运行,这个载体就是 MiniLoader。

内核笔记 1150

计算机图形学 实验一 OpenGL基本绘制【OpenGL】

文章目录实验1.1的配置理论背景着色器与OpenGL着色器的编译绘制简单图形的代码解析实验 1.2实验 1.2习题实验一实验一 最终成品展示: 包括了实验1.1 1.2和实验一以及对应代码的解析 实验1.1的配置 配置详细见配置环境的文件,我这里顺便上传一下好了 理论背景 OpenGL的含义 OpenGL是一种应用程序编程接口(Application Programming Interface,API),它是一种可以对图形硬件设备特性进行访问的软件库。OpenGL最新的4.3版本包含了超过500个不同的命令

weixin_43757333的博客 1万+

【软考】数据库系统工程师备考指南(一)

目录一、数据库系统工程师简介二、考试要求三、考试目标四、考试范围(一)信息系统知识(二)数据库系统设计与管理 一、数据库系统工程师简介 数据库系统工程师考试属于全国计算机技术与软件专业技术资格(水平)考试(简称计算机软件水平资格考试)中的一个中级考试。考试不设学历与资历条件,也不论年龄和专业,考生可根据自己的技术水平选择合适的级别合适的资格,但一次考试只能报考一种资格。考试采用笔试形式,考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试办法。笔试安排在一天之内。 2022 年数据库系统工程

邓邓子的博客 3861

计算机图形学 实验1 《实验环境配置和基本图元绘制》

计算机图形学 实验1 《实验环境配置和基本图元绘制》 一、实验目的 配置基本实验环境、安装软件包、建立工程和绘制基本图元,要求学会点、线、三角形、四边形的绘制方法,学会消息传递和响应机制,用一个实例完成上述要求。 二、实验内容 1、配置OpenGL绘图环境; 2、绘制点、线、三角形、四边形等基本图元。 三、实验方法 以Visual Studio 2019为开发环境,合理配置第三方glut相关文件(部署glut头文件、glut动态链接库、glut.lib类型库),并且使用OpenGL的基本绘制模式(包括GL_

Atlas 5425

AHB—SRAMC项目(结构图,核心代码、Testbench架构)

文章目录一、AHB_SRAMC项目介绍1.1.AHB总线控制单元(ahb_slv_if.v)1.2.SRAM控制单元(sramc_top.v)1.3.主要的传输路径二、结构框图2.1.AHB_SRAMC结构图(重点)2.2.总线控制单元与SRAM控制单元结构图三、部分核心代码(重点理解)四、SystemVerilog Testbench架构(重点)五、目录结构 一、AHB_SRAMC项目介绍 本项...

Mr.翟的博客 3万+

GPU 运维实战:H100/H800/B300 换卡与压测

(烧多久、看什么、什么算合格)。文末还给了一个能直接跑的验收判定脚本,三个真实场景的裁决输出都在。

老韩的Linux云计算架构师进阶之路 281

计算机图形学 | 实验三:绘制一个四边形

计算机图形学 | 实验三:绘制一个四边形

ProgramNovice的博客 942

【系统移植】 移植主线U-Boot(v2024.01-rc3)到RK3399

[系统移植] 移植主线U-Boot(v2024.01-rc3)到RK3399

Systemcall名屋 1006

计算机图形学 | 实验二:绘制一个三角形

计算机图形学 | 实验二:绘制一个三角形

ProgramNovice的博客 1529

uniapp - 应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准(uniApp开发安卓APP上架应用市场审核被拒绝驳回,详细解决方案)

uniApp应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准。uniapp vue2 vue3解决软件在运行时,未见向用户告知权限申请的目的,华为等上架被拒问题,关于华为应用市场上架需要同步告知使用权限的解决方案,uniApp应用软件在运行时,不符合华为应用市场审核标准。解决方案合集!app上架-您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机)等权限,不符合华为应用市场审核标准。华为应用市场审核新规(未同步告知权限申请的使用目

🏆 前端领域优质创作者 4167

Camera2Demo

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

计算机图形学——Bezier曲线绘制

利用OpenGl进行Bezier曲线绘制 #include <windows.h> #include <math.h> #include <gl/GL.h> #include <gl/glut.h> int SCREEN_HEIGHT = 480; int NUMPOINTS = 0; //定义点对象数组 class Point { public: float x, y; void setxy(float x2, float y2) {

weixin_44054883的博客 2259

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: 计算机图形学 | 搭建OpenGL环境
下一篇: 计算机图形学 | 实验二:绘制一个三角形
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值