1實作左側三維瀑布圖棒狀條。
2瀑布圖顯示效果達到圖示。
懂的人指點,非常感謝!
uj5u.com熱心網友回復:
方法太多了把一個長方形不斷渲染不就可以了嗎?
至于顏色的漸變。可以貼圖實作,也可以shader動態生成
uj5u.com熱心網友回復:
不要當3D圖畫,只要先畫左邊和后邊的墻,再從左往右逐潭訓漸變圖棒即可呈現3D效果。uj5u.com熱心網友回復:
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();
}
}
}
uj5u.com熱心網友回復:
1、左側色帶畫法實際繪出效果
2、三維瀑布實際繪出效果
uj5u.com熱心網友回復:
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);
}
uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
如何開發出OpenGL讀取資料繪制出這種效果來,這樣的成果如何?uj5u.com熱心網友回復:
創建繪圖控制元件表單,通過渲染執行緒去重繪,主要就是windows坐標和OpenGL坐標之間的轉換問題。
不建議用繪圖控制元件去讀取業務資料,建議有業務資料后按固定格式往繪圖控制元件輸入,這樣繪圖代碼可以和業務資料分離。
uj5u.com熱心網友回復:
就是分離,自己開發了繪制的演算法,讀取資料轉換的演算法,用mfc做的,可以旋轉視角,后續xp擴展也方便。這種論文不多,和商業的效果沒有差別,性能上很快,千萬級資料量讀取和繪制。這種成果發什么期刊?uj5u.com熱心網友回復:
麻煩刪帖了!管理員轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/46976.html
標籤:圖形處理/算法
