OpenGL实现左侧三维瀑布图棒状条 1实现左侧三维瀑布图棒状条。2瀑布图显示效果达到图示。懂的人指点,非常感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方法太多了把一个长方形不断渲染不就可以了吗?至于颜色的渐变。可以贴图实现,也可以shader动态生成 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(); } } } 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); } 如何开发出OpenGL读取数据绘制出这种效果来,这样的成果如何? 创建绘图控件窗体,通过渲染线程去刷新,主要就是windows坐标和OpenGL坐标之间的转换问题。不建议用绘图控件去读取业务数据,建议有业务数据后按固定格式往绘图控件输入,这样绘图代码可以和业务数据分离。 创建绘图控件窗体,通过渲染线程去刷新,主要就是windows坐标和OpenGL坐标之间的转换问题。不建议用绘图控件去读取业务数据,建议有业务数据后按固定格式往绘图控件输入,这样绘图代码可以和业务数据分离。就是分离,自己开发了绘制的算法,读取数据转换的算法,用mfc做的,可以旋转视角,后续xp扩展也方便。这种论文不多,和商业的效果没有差别,性能上很快,千万级数据量读取和绘制。这种成果发什么期刊? 用PNG图片怎么动态生成HTML??在线等..谢谢!! 怎么让程序在任务栏没有项 一个输入输出流问题。 如何在对话框下触发一个播放事件 学习网络编程应该看那些书呀?? 各位GG、JJ帮忙啊,小弟不胜感激! vfp里面如何一次读取整行? 简单问题,谢谢 要对并口初始化,需要设置那些参数? joke100你的分!! 小白求大神 CGridCtrl 怎么合并单元格?
把一个长方形不断渲染不就可以了吗?
至于颜色的渐变。可以贴图实现,也可以shader动态生成
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();
}
}
}
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);
}
不建议用绘图控件去读取业务数据,建议有业务数据后按固定格式往绘图控件输入,这样绘图代码可以和业务数据分离。
不建议用绘图控件去读取业务数据,建议有业务数据后按固定格式往绘图控件输入,这样绘图代码可以和业务数据分离。就是分离,自己开发了绘制的算法,读取数据转换的算法,用mfc做的,可以旋转视角,后续xp扩展也方便。这种论文不多,和商业的效果没有差别,性能上很快,千万级数据量读取和绘制。这种成果发什么期刊?