OPENGL(14) c++曲面构造 网格线

C++出黑科技了!程序员大牛开发基于OpenGL的模拟3维空间模型 新一代三维GIS技术体系,以二三维一体化技术为基础框架,进一步拓展二三维一体化数据模型,融合倾斜摄影、BIM、激光点云等多源异构数据,推动三维GIS实现室外室内一体化、宏观微观一体化、空天/地表/地下一体化,赋能全空间的三维GIS应用。 这是一款用OpenGL模拟的一个3维空间模型,用VC++源码实现,一个模拟的3维视图,随着鼠标移动会改变视图,VC++6下可直接编译代码,仅此参考。 ... 阅读详情
发信人: yxy (田丝丝#冬眠的小肥鹰), 信区: GAME_Designer
标 题: OPENGL(14)
发信站: BBS 水木清华站 (Tue Feb 17 16:24:53 1998)

曲面的构造可以是网格线和填充曲面形式,其实与曲线很类似只是变为
二维而已。
1.曲面定义
void glMap2{fd}(GLenum target,TYPE u1,TYPE u2,GLint ustride,GLint uorder,
TYPE v1,TYPE v2,GLint vstride,GLint vorder,TYPE points);
target的定义同上次介绍的曲线中target的定义。
U V是二维曲面坐标
uorder,vorder;ustride,vstride的定义都类似曲线定义。
points是控制点坐标

2.曲面任意一点的计算
void glEvalCoord2{fd}[v](TYPE u,TYPE v);
以曲线坐标U V来计算曲面内任意一点的世界坐标的位置

3.曲面绘制的控制
void glMapGrid2{fd}(GLenum nu,TYPE u1,TYPE u2,GLenum nv,TYPE v1,TYPE v2);
定义曲面参数空间均匀网格,从u1到u2分为等间隔nu步,从v1到v2分为等间隔nv步。

下面给出一个以网格线描绘曲面的例子:
////////////////////////////////////////////////////////////
//sample.cpp
#include "glos.h"
#include
#include
#include "windows.h"
void myinit(void);
void CALLBACK display(void);
void CALLBACK reshape(GLsizei w,GLsizei h);

//控制点坐标
GLfloat points[4][4][3]={
{{-1.5,-1.5,2.0},{-0.5,-1.5,2.0},
{0.5,-1.5,-1.0},{1.5,-1.5,2.0}},
{{-1.5,-0.5,1.0},{-0.5,1.5,2.0},
{0.5,0.5,1.0},{1.5,-0.5,-1.0}},
{{-1.5,0.5,2.0},{-0.5,0.5,1.0},
{0.5,0.5,3.0},{1.5,-1.5,1.5}},
{{-1.5,1.5,-2.0},{-0.5,1.5,-2.0},
{0.5,0.5,1.0},{1.5,1.5,-1.0}}};

//为了清楚显示控制点而设置的一组颜色
GLfloat color[4][3]={
{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,1.0,1.0}};

void myinit(void)
{

auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("sample1");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);

//利用glEnable()来启用曲面模式
glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&points[0][0][0]);
glEnable(GL_MAP2_VERTEX_3);

glMapGrid2f(20,0.0,1.0,20,0.0,1.0);

glEnable(GL_DEPTH_TEST);
}

void CALLBACK reshape(GLsizei w,GLsizei h)
{

glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if(w<=h)
glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0);
else
glOrtho(-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0,-5.0,5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}


void CALLBACK display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(0.0,0.0,1.0);
glPushMatrix();
glRotatef(35.0,1.0,1.0,1.0);
//用直线段的连接描绘曲面结构
glBegin(GL_LINE_STRIP);
int i,j;
//在U V方向各画出8条网格线,用以构造曲面结构
for(j=0;j<=8;j++)
{
//在U方向用30条直线段描绘一条曲线
glBegin(GL_LINE_STRIP);
for(i=0;i<=30;i++)
glEvalCoord2f((GLfloat)i/30.0,(GLfloat)j/8.0);
glEnd();

//在V方向用30条直线段描绘一条曲线
glBegin(GL_LINE_STRIP);
for(i=0;i<=30;i++)
glEvalCoord2f((GLfloat)j/8.0,(GLfloat)i/30.0);
glEnd();
}

//用不同的颜色把控制点显示出来
glPointSize(4.0);
glBegin(GL_POINTS);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
glColor3fv(color[i]);
glVertex3fv(&points[i][j][0]);
}
glEnd();

glPopMatrix();
glFlush();
}
void main(void)
{
myinit();

auxReshapeFunc(reshape);
auxMainLoop(display);
}
//end of sample
///////////////////////////////////////////////////////


应用中常常不满足曲面的框架结构。下面就介绍填充曲面的绘制方法:

void glEvalMesh2(GLenum mode,GLint p1,GLint p2,GLint q1,GLint q2);
把用glMapGrid2{fd}()设置的网格应用到已经启用的曲面计算上。
mode可以是GL_POINT GL_LINE GL_FILL。顾名思义,GL_FILL就是生成填充曲面

这里给出一个有光照处理的BEZIER曲面的例子(这个曲面除了绘制方法不同,数学
形式和前面的是一样的)。
///////////////////////////////////////////////////////
//sample.cpp
#include "glos.h"
#include
#include
#include "windows.h"
void myinit(void);
void CALLBACK display(void);
void CALLBACK reshape(GLsizei w,GLsizei h);

GLfloat points[4][4][3]={
{{-1.5,-1.5,2.0},{-0.5,-1.5,2.0},
{0.5,-1.5,-1.0},{1.5,-1.5,2.0}},
{{-1.5,-0.5,1.0},{-0.5,1.5,2.0},
{0.5,0.5,1.0},{1.5,-0.5,-1.0}},
{{-1.5,0.5,2.0},{-0.5,0.5,1.0},
{0.5,0.5,3.0},{1.5,-1.5,1.5}},
{{-1.5,1.5,-2.0},{-0.5,1.5,-2.0},
{0.5,0.5,1.0},{1.5,1.5,-1.0}}};
GLfloat color[4][3]={
{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,1.0,1.0}};

//初始化光照、材质的过程
void initlights(void)
{
GLfloat ambient[]={0.4,0.6,0.2,1.0};
GLfloat position[]={0.0,1.0,3.0,1.0};
GLfloat mat_diffuse[]={0.2,0.4,0.8,1.0};
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={80.0};
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0,GL_AMBIENT,ambient);
glLightfv(GL_LIGHT0,GL_POSITION,position);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
}

void myinit(void)
{

auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("sample1");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);

glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&points[0][0][0]);
glEnable(GL_MAP2_VERTEX_3);
glEnable(GL_AUTO_NORMAL);
// glEnable(GL_NORMALIZE);
glMapGrid2f(20,0.0,1.0,20,0.0,1.0);

glEnable(GL_DEPTH_TEST);
//初始化光照、材质
initlights();
// glShadeModel(GL_FLAT);
}

void CALLBACK reshape(GLsizei w,GLsizei h)
{

glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if(w<=h)
glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0);
else
glOrtho(-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0,-5.0,5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}


void CALLBACK display(void)
{
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(0.0,0.0,1.0);
glPushMatrix();
glRotatef(35.0,1.0,1.0,1.0);

//将原来网格的绘制部分注释掉,代替以填充曲面的绘制方法
glEvalMesh2(GL_FILL,0,20,0,20);
int i,j;
/* for(j=0;j<=8;j++)
{
glBegin(GL_LINE_STRIP);
for(i=0;i<=30;i++)
glEvalCoord2f((GLfloat)i/30.0,(GLfloat)j/8.0);
glEnd();

glBegin(GL_LINE_STRIP);
for(i=0;i<=30;i++)
glEvalCoord2f((GLfloat)j/8.0,(GLfloat)i/30.0);
glEnd();
}
*/


glPointSize(4.0);
glBegin(GL_POINTS);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
glColor3fv(color[i]);
glVertex3fv(&points[i][j][0]);
}
glEnd();
glPopMatrix();
glFlush();


}
void main(void)
{
myinit();

auxReshapeFunc(reshape);
auxMainLoop(display);
}
//end of sample
////////////////////////////////////////////////////////////////
一个真正具有实体的曲面就展现出来乐。控制点的不同,可以控制曲面的形状
可以看出OPENGL的强大功能,只用很少的原代码就产生真实的3D效果。
在以此篇结束复杂建模前,给出一个绘制NURBS曲面(非均匀B样条曲面)的例子,
这里用到乐一些OPENGL实用库提供的专门函数。所有的新东东都在程序中做乐注
释,注释给出过程的含义,具体函数的操作可以详细查阅联机手册。
///////////////////////////////////////////////////////////////
//sample.cpp
#include "glos.h"
#include
#include
#include "windows.h"

void myinit(void);
void CALLBACK display(void);
void CALLBACK reshape(GLsizei w,GLsizei h);

//定义一组控制点的存储空间
GLfloat points[4][4][3];
//定义一个指向NURBS曲面对象的指针
GLUnurbsObj *theNurb;


//用来生成控制点的过程,取代被注释掉的原来直接赋值方式生成控制点
void init_surface(void)
{
int u,v;
for(u=0;u<4;u++)
{
for(v=0;v<4;v++)
{
points[u][v][0]=2.0*((GLfloat)u-1.5);
points[u][v][1]=2.0*((GLfloat)v-1.5);
if((u==1||u==2)&&(v==1||v==2))
points[u][v][2]=3.0;
else
points[u][v][2]=-3.0;
}
}
}
/*
GLfloat points[4][4][3]={
{{-1.5,-1.5,2.0},{-0.5,-1.5,4.0},
{0.5,-1.5,3.0},{1.5,-1.5,2.0}},
{{-1.5,-0.5,3.0},{-0.5,1.5,4.0},
{0.5,0.5,2.0},{1.5,-0.5,-1.0}},
{{-1.5,0.5,2.0},{-0.5,0.5,4.0},
{0.5,0.5,5.0},{1.5,-1.5,1.5}},
{{-1.5,1.5,-2.0},{-0.5,1.5,3.0},
{0.5,0.5,1.0},{1.5,1.5,-1.0}}};
*/
GLfloat color[4][3]={
{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,1.0,1.0}};


void initlights(void)
{
GLfloat ambient[]={0.4,0.6,0.2,1.0};
GLfloat position[]={0.0,1.0,3.0,1.0};
GLfloat mat_diffuse[]={0.2,0.4,0.8,1.0};
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={80.0};
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0,GL_AMBIENT,ambient);
glLightfv(GL_LIGHT0,GL_POSITION,position);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
//首先初始化控制点
init_surface();
//创建一个NURBS曲面的对象
theNurb=gluNewNurbsRenderer();
//修改此曲面对象的属性
gluNurbsProperty(theNurb,GLU_SAMPLING_TOLERANCE,25.0);
gluNurbsProperty(theNurb,GLU_DISPLAY_MODE,GLU_FILL);
}

void myinit(void)
{

auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("sample1");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);

glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&points[0][0][0]);
glEnable(GL_MAP2_VERTEX_3);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glMapGrid2f(20,0.0,1.0,20,0.0,1.0);

glEnable(GL_DEPTH_TEST);
initlights();
// glShadeModel(GL_FLAT);
}

void CALLBACK reshape(GLsizei w,GLsizei h)
{

glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if(w<=h)
glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0);
else
glOrtho(-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0,-5.0,5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}


void CALLBACK display(void)
{
//B样条曲面(NURBS)的控制向量,可以参阅图形学的相关书籍
GLfloat knots[8]={0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0};

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(0.0,0.0,1.0);
glPushMatrix();
glRotatef(35.0,1.0,1.0,1.0);
glRotatef(-60.0,1.0,0.0,0.0);
glScalef(0.5,0.5,0.5);

//注释掉原来的曲面绘制函数,代之以新的NURBS曲面绘制函数
// glEvalMesh2(GL_FILL,0,20,0,20);
//定义曲面的数学模型,确定其形状
gluNurbsSurface(theNurb,
8,knots,
8,knots,
4*3,
3,
&points[0][0][0],
4,4,
GL_MAP2_VERTEX_3);
//结束曲面的绘制,此结构很类似于标准的glBegin()...glEnd()
gluEndSurface(theNurb);

int i,j;
glPointSize(4.0);
glBegin(GL_POINTS);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
glColor3fv(color[i]);
glVertex3fv(&points[i][j][0]);
}
glEnd();
glPopMatrix();
glFlush();


}
void main(void)
{
myinit();

auxReshapeFunc(reshape);
auxMainLoop(display);
}
//end of sample
//////////////////////////////////////////////////////////////////
至此,复杂建模告于段落。下次介绍特殊光照

--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.74.90]
Qt Charts实战:手把手教你打造一个可交互的折线图配置工具(附完整源码) 本文详细介绍了如何使用Qt Charts模块从零构建一个功能完备的可交互折线图配置工具。通过实战代码演示,涵盖UI设计、动态数据绑定、样式自定义、多序列管理等核心功能,并提供了性能优化、工程化实践等进阶技巧,帮助开发者快速掌握Qt Charts在数据可视化中的应用。 阅读详情

相关推荐

Qt图形视图框架实战:Scene-View-Item协同原理与性能优化

QGraphicsScene、QGraphicsView和QGraphicsItem是Qt中面向复杂交互图形的核心抽象,其本质并非简单画布与元素关系,而是基于坐标系映射、事件分发与渲染管线协同工作的图形操作系统。理解sceneRect设置规则、绘图效率瓶颈及线程安全边界,是解决实时曲线刷新、百节点拓扑编辑与大图查看等工业级场景的关键。该框架通过矩阵变换统一管理世界坐标与屏幕像素,以Item自治化降低主线程负担,并支持GPU加速、瓦片渲染与零拷贝更新等工程化手段,在SCADA、HMI与嵌入式看板中持续验证稳定

weixin_34043301的博客 359

利用求值器绘制双三次Bezier曲面

根据我的上一篇博客,已经可以利用求值器绘制三次Bezier曲线了,今天我要探索利用求值器绘制双三次的B曲面 其实学会了之前的现在就简单很多了,这里利用的是 glMap2 — 定义了一个二维求值器 void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloa

拉风小宇的博客 4553

OpenGL俄罗斯方块源码解析:从编译到渲染全流程避坑指南

在图形学与游戏开发的入门路径中,OpenGL凭借其跨平台特性和对渲染管线的完整支持,始终是理解GPU工作原理的经典起点。从顶点着色器到片元着色器,从缓冲区绑定到状态切换,一个小型游戏项目往往能串联起整个知识链条。俄罗斯方块这类逻辑清晰、画面元素简单的游戏,恰好成为实践OpenGL的最佳载体:通过固定步长主循环控制游戏节奏,借助VBO与VAO高效绘制方格,再以uniform或纹理调色板实现颜色区分,完整覆盖了渲染、输入与碰撞检测的核心环节。无论你是面对一份老旧源码包无从下手,还是希望把经典项目改造成自己的作品

weixin_42581846的博客 6

Part11 贝赛尔曲面

       传统的曲线或者曲面的生成方式是使用一些极短或者极小的直线和平面来逼近曲线和曲面,这种方式一方面需要消耗较多的资源且生成过程相对比较复杂,另一方面使用这种方式生成的曲线和曲面的最终效果好坏取决于用于逼近的线段和平面。贝赛尔曲线是这样的一种曲线,他使用一系列的点来控制一条曲线的各个部分,使之根据贝赛尔模型形成一个光滑完整的曲线。使用贝赛尔曲线不仅系统开销小而且由于整个曲线是基于一个数学模

Phil.Z's Program Blog 4022

【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行(一)

OSG是一个基于 OpenGL 的开源、跨平台、高性能 3D 图形渲染引擎/场景图中间件,用标准 C++ 编写,充分利用 STL 和设计模式。核心思想:把三维世界组织成一棵树状的“场景图”(Scene Graph,有向无环图),节点包括 Group、Transform、Geode、LOD、Switch、Camera 等,每个节点可挂状态集(StateSet)、回调和自定义数据。开发者只需声明“场景长什么样”,引擎自动处理渲染顺序与资源生命周期。性能优化。

ocy的博客 239

opengl绘制3维网格线,曲面

win32编程需要 连接基本的 opengl库

OPENGL(14) c++曲面构造 网格线

<br />发信人: yxy (田丝丝#冬眠的小肥鹰), 信区: GAME_Designer <br />标 题: OPENGL(14) <br />发信站: BBS 水木清华站 (Tue Feb 17 16:24:53 1998) <br />曲面的构造可以是网格线和填充曲面形式,其实与曲线很类似只是变为 <br />二维而已。 <br />1.曲面定义 <br />void glMap2{fd}(GLenum target,TYPE u1,TYPE u2,GLint ustride,GLint uord

dqmengxiang的专栏 1923

opengl显示网格模型

在opengl环境下,读取自定义的三维曲面网格模型,有点,线和曲面三种显示方式,能够缩放、旋转、平移,并加入了光照,反走样等,是很好的opengl入门程序,并适合在此程序基础上做一些图形方面的课题研究。

OPENGL(14) c++曲面构造 网格线 (转)

OPENGL(14) c++曲面构造 网格线 (转)[@more@]发信人: yxy (田丝丝#冬眠的小肥鹰), 信区: GAME_Designer 标 题: OPENGL(14) 发信站: BBS 水木清华站 (Tue Feb...

csd3176的博客 271

量化策略分享之首板低开

这个量化策略的核心是选择在低位、首次涨停后次日低开的股票,开盘时买入,上午有盈利就卖出,没有就拿到尾盘在卖出;策略优点在于选择的股票在低位,风险较低,并且刚启动首板,有大资金介入,第二天能快速跑路。

qq_29301281的博客 1463

ArcGIS符号库下载 | 制图规范、三调、1:1万地形图、土地利用总体规划图.....

最近整理了一些符号库 涉及的类型比较多 包含有三调的(二调的也加上去了),一些点线面符号库,1:1万地形图,1:5万土地利用,土地利用总体规划图

qq_43173805的博客 2万+

解决Docker拉取镜像报错:Get https://registry-1.docker.io/v2/: 报错

解决Docker拉取镜像报错: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection问题描述Get "https://registry-1.docker.io/v2/"是docker官方的镜像源,下载很慢的,一般会自己指定国内映射的加速镜像源。

qq_33650333的博客 4172

OpenGL.tutorial06键盘和鼠标

1、这个图是用 Excel画的 简单示意图(单元格边框,视图-->网格线)  1.1、中间的 正立方体 处于 X/Y/Z轴的中心,边长为2   ZC:代码中 原版是 人物在 (0,0,5)处,水平夹角180°(即 horizontalAngle为180°[弧度为π]),相当于 人物向后转了(应该是 绕向量(0,1,0)逆时针旋转的)  1.2、代码为:E:\OpenGL_somet...

weixin_30788731的博客 161

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4542

pikachu靶场: 暴力破解第四关(token防爆破)

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 同时将此 Token 返回给客户端。此外,Token 是有时效的,一段时间之后或下一次请求时用户需要重新验证。

X_shiguang的博客 1720

C++实战:从零开发五子棋游戏,掌握SFML图形库与游戏架构设计

C++作为一门高性能的系统级编程语言,在游戏开发、图形界面和底层系统构建中扮演着核心角色。其核心原理在于对内存、硬件资源的直接控制能力,结合面向对象编程范式,能够构建出高效、可维护的复杂软件。在游戏开发领域,C++的价值尤为突出,它常与图形库结合,用于实现从逻辑到渲染的完整控制流程。典型的应用场景包括2D/3D游戏引擎、桌面应用和性能敏感的工具开发。本文以开发一个经典的五子棋游戏为具体实践,深入讲解如何运用C++和SFML图形库,实现从游戏逻辑、**胜负判定算法**到图形界面交互的完整闭环,并分享**开发环

weixin_34391445的博客 352

深度强化学习在机器人控制中的应用

非常感谢您提供如此详细的任务要求和约束条件。作为一位世界级的人工智能专家和计算机领域大师,我将全身心投入到这篇技术博客的撰写中。 深度强化学习在机器人控制中的应用 1. 背景介绍 近年来,随着人工智能技术的飞速发展,深度学习和强化学习在各个领域都得到了广泛应用,尤其是在机器人

AI天才研究院 1323

C++手搓坐标图:从数据映射到实时刷新的工程实践

在嵌入式HMI与工业上位机开发中,C++图形化坐标图常用于资源受限环境下的实时数据可视化。其核心在于建立数据空间到屏幕空间的仿射变换,通过Nice Numbers算法生成刻度,并利用双缓冲与环形队列实现无闪烁刷新。QPainter作为常用绘图引擎,配合坐标变换与性能优化,可支撑缩放、平移与数值查看等交互。本文围绕坐标变换、绘图骨架、实时刷新与踩坑记录,系统梳理了C++坐标图从能用到好用的实现路径。

weixin_34151004的博客 238

基于STM32设计的ECG+PPG人体参数测量系统(华为云IOT)(217)

该系统的核心是基于STM32F103RCT6微控制器,这是一种高性能、低功耗的嵌入式处理器,适用于各种复杂的控制和数据处理任务。系统利用先进的传感器技术,如光电传感器PulseSensor模块来准确测量人体脉搏血氧饱和度及心率(PPG),同时采用AD8232生物电信号采集模块捕捉并处理人体的心电图信号(ECG),从而全面反映用户的心脏活动状态。

1万+

基于 YOLOv26 的陶瓷产品缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习模型的陶瓷产品智能缺陷检测系统。该系统针对陶瓷生产中的裂纹、气泡、釉面缺陷等8类常见质量问题,采用YOLOv26目标检测算法实现高精度自动化检测。系统架构包含数据采集、预处理、YOLOv26检测和后处理四个模块,具有多类别分类、实时推理和强鲁棒性等技术优势。文章详细介绍了数据预处理与增强方法,并提供了Python代码实现示例。该方案可显著提升陶瓷产品质量检测效率,替代传统人工检测方式,为陶瓷制造业提供智能化质检解决方案。

一键难忘的博客 788

QCustomPlot嵌入式实时绘图实战:轻量、可控、可调试

QCustomPlot是一款基于Qt原生QPainter的轻量级C++图表库,其核心原理是通过静态链接、零外部依赖与懒绘制策略实现极致资源控制。相比QChart和PyQtGraph,它在嵌入式场景下展现出显著内存优势(运行时峰值仅14MB)与确定性性能(60FPS稳定帧率),技术价值在于完全暴露绘图链路——从坐标变换、事件分发到像素渲染全程可调试、可定制。典型应用场景包括工业传感器监控、医疗设备波形显示、边缘网关数据可视化等对实时性、资源敏感度和长期稳定性要求严苛的系统。本文聚焦QCustomPlot在AR

weixin_34006965的博客 366

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Qt for HarmonyOS_PC 图表组件鸿蒙PC开发实战

本文介绍了一个基于Qt QML Canvas API开发的HarmonyOS图表组件库,实现11种常见图表类型(折线图、柱状图、饼图等)。项目采用响应式网格布局设计,支持动态数据更新和高DPI显示。核心功能通过Canvas 2D绘制技术实现,包括图表渲染和性能优化。技术栈包含Qt 5.x、QML/JavaScript和CMake构建工具,适用于HarmonyOS/PC平台。项目结构清晰,包含多种图表组件模块,展示了在Qt for HarmonyOS环境下的自定义图形绘制能力。

2511_94246476的博客 1059

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

QT图表开发核心决策:QPainter vs QChart vs 第三方库

图表可视化是工业监控、嵌入式仪表盘等本地应用的关键能力。其本质是将数据映射为像素坐标的数学过程,涉及逻辑坐标系与设备坐标系的精确换算、双Y轴坐标绑定、实时重绘效率等底层原理。技术选型直接决定系统稳定性、离线可用性与长期可维护性:QPainter提供毫秒级响应和完全控制,适合资源受限场景;QChart封装了数据-视图分离架构,显著降低工程复杂度;而QCustomPlot等第三方库则在性能与功能间取得平衡。本文聚焦QT原生图表开发中高频卡点——如qt绘图效率比较、qchart实现图片缩放、qt逻辑坐标系设备坐标

weixin_34197488的博客 401

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Altium Designer 17安装深度指南:系统级适配与工程化部署

Altium Designer是电子设计自动化(EDA)领域的核心PCB设计工具,其安装远非常规软件部署,而是涉及Windows权限模型、.NET运行时兼容性、Visual C++库版本锚定及许可证服务架构等系统级工程问题。尤其AD17.0.6作为稳定型主力版本,对Windows 10 1709+、.NET Framework 4.6.1、VC++ v14.24等环境存在精确依赖,安装偏差将直接引发DRC校验异常、铺铜卡死、Gerber层缺失等量产级故障。本文从操作系统内核调度、内存管理机制、注册表隔离策略

weixin_33978044的博客 162

Qt图形视图框架核心原理与高性能实践

QGraphicsScene、QGraphicsView和QGraphicsItem构成Qt中唯一原生支持坐标变换、事件分发与空间索引的图形架构。其本质并非简单绘图工具,而是基于逻辑坐标系、四叉树索引与状态机设计的交互式图形系统。通过合理划分数据层(Scene)、表现层(View)与原子单元(Item),可高效支撑流程图编辑、电子地图缩放、Figma式图层管理等复杂场景。尤其在工业HMI、SCADA系统及嵌入式界面开发中,该框架凭借纯C++实现、零外部依赖与GUI线程安全机制,显著降低CPU占用并提升响应实

weixin_34409357的博客 400
上一篇: Tomcat-Apache HOWTO Tomcat+Apache HOWTO
下一篇: c 删除文件中指定的部分内容
hem
hem
博客等级 码龄26年 19粉丝 287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值