OpenGL实现左侧三维瀑布图棒状条

归林真人 2019-01-21 05:47:00
1实现左侧三维瀑布图棒状条。 2瀑布图显示效果达到图示。 懂的人指点,非常感谢!
...全文
742 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
归林真人 2019-05-17
  • 打赏
  • 举报
回复
麻烦删帖了!管理员
归林真人 2019-01-30
  • 打赏
  • 举报
回复
引用 8 楼 小西2016 的回复:
[quote=引用 7 楼 归林真人 的回复:]
如何开发出OpenGL读取数据绘制出这种效果来,这样的成果如何?

创建绘图控件窗体,通过渲染线程去刷新,主要就是windows坐标和OpenGL坐标之间的转换问题。
不建议用绘图控件去读取业务数据,建议有业务数据后按固定格式往绘图控件输入,这样绘图代码可以和业务数据分离。[/quote]就是分离,自己开发了绘制的算法,读取数据转换的算法,用mfc做的,可以旋转视角,后续xp扩展也方便。这种论文不多,和商业的效果没有差别,性能上很快,千万级数据量读取和绘制。这种成果发什么期刊?
小西2016 2019-01-30
  • 打赏
  • 举报
回复
引用 7 楼 归林真人 的回复:
如何开发出OpenGL读取数据绘制出这种效果来,这样的成果如何?

创建绘图控件窗体,通过渲染线程去刷新,主要就是windows坐标和OpenGL坐标之间的转换问题。
不建议用绘图控件去读取业务数据,建议有业务数据后按固定格式往绘图控件输入,这样绘图代码可以和业务数据分离。
小西2016 2019-01-29
  • 打赏
  • 举报
回复
1、左侧色带画法实际绘出效果

2、三维瀑布实际绘出效果
小西2016 2019-01-29
  • 打赏
  • 举报
回复
1、左侧色带画法
glBegin(GL_LINES);
for (int iLoop = 0; iLoop <= nHeight; iLoop++)
{
//红绿蓝根据高度进行三基色算法,算出渐变值
glColor3ub(RedVal, GreenVal,BlueVal);
//m_fDyPixel OpenGL在Y轴上的像素归一化值 m_fDyPixel = (float)2 / m_nHeight;
glVertex2f(fX0,fY0 + iLoop*m_fDyPixel);
glVertex2f(fX1, fY0 + iLoop*m_fDyPixel);
}
glEnd();


上述是二维色带画法,如果三维加上固定的Z值即可,效果如下:

2、三维瀑布画法

#define ZCOUNT 40
//画线,Z轴截面画,先画出Z轴上每个Z像素点对应得曲线图
for (int iLoop = 0; iLoop < ZCOUNT; iLoop++)
{
glBegin(GL_LINE_STRIP);
for (UINT jLoop = 0; jLoop < m_nCount_Display; jLoop++)
{
if (jLoop % 2 == 0)
glColor4ub(RedVal, GreenVal, BlueVal, 255);
glVertex3f(m_pXData[jLoop], m_pYData[iLoop * Count_Display_Max + jLoop], -1.0 + 2.0 / (ZCOUNT - 1) * iLoop);
}
glEnd();
}
//三维模型图,4点一面构造,填充各曲线之间的缝隙
for (int iLoop = 0; iLoop < ZCOUNT - 1; iLoop++)
{
for (UINT jLoop = 0; jLoop < m_nCount_Display - 1; jLoop++)
{
if (m_pFlag[iLoop * Count_Display_Max + jLoop])
{
glBegin(GL_POLYGON);

glColor4ub(RedVal, GreenVal, BlueVal, 255);
//X,Y,Z第一个有效点 Y轴对应幅度值
glVertex3f(m_pXData[jLoop], m_pYData[iLoop * Count_Display_Max + jLoop], -1.0 + 2.0 / (ZCOUNT - 1) * iLoop);
//X+1,Y,Z第二个有效点 Y轴对应幅度值
for (int i = jLoop + 1; i < m_nCount_Display - 1; i++)
{
if (m_pFlag[iLoop * Count_Display_Max + i])
{
nColor = m_pYDataColor[iLoop * Count_Display_Max + i];
glColor4ub(RedVal, GreenVal, BlueVal, 255);
glVertex3f(m_pXData[jLoop + 1], m_pYData[iLoop * Count_Display_Max + i], -1.0 + 2.0 / (ZCOUNT - 1) * iLoop);
break;
}
}
//X+1,Y,Z+1第三个有效点 Y轴对应幅度值
for (int i = jLoop + 1; i < m_nCount_Display - 1; i++)
{
if (m_pFlag[(iLoop + 1) * Count_Display_Max + i])
{
nColor = m_pYDataColor[(iLoop + 1) * Count_Display_Max + i];
glColor4ub(RedVal, GreenVal, BlueVal, 255);
glVertex3f(m_pXData[jLoop + 1], m_pYData[(iLoop + 1) * Count_Display_Max + i], -1.0 + 2.0 / (ZCOUNT - 1) * (iLoop + 1));
break;
}
}
//X,Y,Z+1第四个有效点 Y轴对应幅度值
for (int i = jLoop; i < m_nCount_Display - 1; i++)
{
if (m_pFlag[(iLoop + 1) * Count_Display_Max + i])
{
nColor = m_pYDataColor[(iLoop + 1) * Count_Display_Max + i];
glColor4ub(RedVal, GreenVal, .BlueVal, 255);
glVertex3f(m_pXData[jLoop], m_pYData[(iLoop + 1) * Count_Display_Max + i], -1.0 + 2.0 / (ZCOUNT - 1) * (iLoop + 1));
break;
}
}
glEnd();
}
}
}
归林真人 2019-01-29
  • 打赏
  • 举报
回复
如何开发出OpenGL读取数据绘制出这种效果来,这样的成果如何?
zgl7903 2019-01-29
  • 打赏
  • 举报
回复
引用 4 楼 小西2016 的回复:
1、左侧色带画法实际绘出效果

2、三维瀑布实际绘出效果



小西2016 2019-01-29
  • 打赏
  • 举报
回复
3D图初始化观察者视角
glClearColor(0.9, 0.95, 1, 0.3);
//清屏命令。
glClear(GL_COLOR_BUFFER_BIT);
if (!b)//第一次进入初始化观察者视角
{
b = true;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.5, 1.5, -1.8, 1, -10, 10);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.3, 0.3, 0.5, 0.0, 0.0, 0.0, 0.0, 0.8, 0.0);
}
赵4老师 2019-01-24
  • 打赏
  • 举报
回复
不要当3D图画,只要先画左边和后边的墙,再从左往右逐条画渐变图棒即可呈现3D效果。
WJN92 2019-01-23
  • 打赏
  • 举报
回复
方法太多了
把一个长方形不断渲染不就可以了吗?
至于颜色的渐变。可以贴图实现,也可以shader动态生成
代码下载地址: https://pan.quark.cn/s/f772f44531a5 FFmpeg 是一款功能丰富的开源命令行软件,能够对多种类型的多媒体数据,涵盖音频及视频内容,进行操作。它具备多种能力,例如进行格式转换、合并不同媒体、分割文件、执行编码与解码处理、以及实现流媒体传输等。在此特定情境下,主要探讨如何运用 FFmpeg 来处理 MP4 文件的播放难题,特别是那些无法通过流式传输正常播放的文件。MP4 文件播放时可能遇到的障碍,可能是由播放器不兼容的编码方式、容器结构错误、元数据位置设置不当,或是缺少必要的流信息所导致。FFmpeg 能够协助我们识别并修正这些问题。 1. **针对 MP4 文件的检测与修复**:借助 FFmpeg 的 `-i` 参数,可以获取 MP4 文件的详细资料,例如: ``` ffmpeg -i problematic.mp4 ``` 若发现编码方式、时间轴或容器结构存在问题,可尝试对文件进行重新封装(remuxing)或重新编码(transcoding)。例如,通过简单的重新封装操作: ``` ffmpeg -i problematic.mp4 -c copy fixed.mp4 ``` 此指令将维持视频和音频流的原状,仅更换文件的容器格式。 2. **应对流传输挑战**:当文件无法以流方式播放时,通常是因为流信息未正确嵌入文件头部。FFmpeg 可用于解决该问题: ``` ffmpeg -i problematic.mp4 -movflags +faststart output.mp4 ``` ...
内容概要:本文提出了一种基于TOGI-SOGI混合积分器的光储并网谐波自适应抑制方法,并提供了完整的Simulink仿真实现方案。该方法通过融合三阶广义积分器(TOGI)与二阶广义积分器(SOGI),构建高性能混合结构,显著提升了对电网电压畸变中谐波成分的检测精度与动态响应能力,进而实现并网电流谐波的高精度自适应补偿控制。文中系统阐述了混合积分器的设计原理、谐波提取机制、自适应控制策略及其在光伏储能并网系统中的集成应用,突出其在改善电能质量、增强系统稳定性和抗干扰能力方面的优势。配套的Simulink仿真模型充分验证了该方法在不同电网工况下的有效性、鲁棒性与工程应用潜力。; 适合人群:具备电力电子、新能源并网或自动控制等相关专业知识背景,从事光伏储能系统、逆变器控制、电能质量治理等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握TOGI-SOGI混合积分器在谐波检测中的设计原理与实现方法;②深入理解光储并网系统中谐波抑制的控制架构与自适应补偿机制;③复现、验证并优化所提供的Simulink仿真模型,服务于学术论文撰写、课题研究或实际工程项目的开发与测试。; 阅读建议:建议结合提供的Simulink模型文件进行同步仿真操作,细致分析各功能模块的参数配置与信号流向;重点关注混合积分器的频率自适应特性与谐波分离性能,并可通过设置不同的电网畸变场景来测试和评估控制策略的鲁棒性与动态性能。

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧