求将dem导入opengl,生成三维地形图的代码。这是一个老问题了, SeainBlue(爱海)等以前回答过的朋友再帮个忙。也请其他的朋友帮助一下。谢谢了。
解决方案 »
- VC 如何禁止鼠标拖动标题栏程序窗口
- PushFramework是什么?
- [求助]关于MSCOMM控件的事件触发函数
- float 小数点有效位数为6位,取决于语言还是实现?
- 为什么在MFC下 dialog上显示不出png的图片,在win32下可以显示出png图片就可以?
- 虚心请教大家一个关于 recv 接收数据不完全的问题
- 请高手帮忙看看怎么编这个程序
- 请问用什么函数实现判断一个文件的路径是否有效果.谢谢.不如C:\\CSDN.HTML
- 很简单的问题:怎么把鼠标形状改回系统默认的箭头?
- hi
- 寻求使CFormView视图的边框显示的时候不下陷的方法 翻遍了CSDN之前的帖子,都没有找到答案 ...
- form怎么初始化
按照三角带组织成显示数据,绘制效率比较高
http://www.cs.arizona.edu/topovista/
A DEM viewer with source code, plus a paper on Right-triangulated Irregular Networks.
http://www.vterrain.org/Elevation/dem.html
{
int m,n;
double kx,ky;
CPoint3D tDP;
int Cm0,Cn0,Cm,Cn;
lShowRelution = (int)(Env.RoamGesture.DistStareEye/(30 * dStepX));
if(lShowRelution < 1) lShowRelution = 1;
Cm0 = (int)((Env.LookSizeLB.x - DemOriPoint3D.x)/dStepX);
Cm0 = (int)(Cm0/lShowRelution) * lShowRelution;
if(Cm0 < 0) Cm0 = 0;
if(Cm0 > lColDem) return;
Cm = (int)((Env.LookSizeUR.x - DemOriPoint3D.x)/dStepX) +1;
if(Cm > lColDem) Cm = lColDem;
if(Cm < 0) return; Cn0 = (int)((Env.LookSizeLB.y - DemOriPoint3D.y)/dStepY);
Cn0 = (int)(Cn0/lShowRelution) * lShowRelution;
if(Cn0 < 0) Cn0 = 0;
if(Cn0 > lRowDem) return;
Cn = (int)((Env.LookSizeUR.y - DemOriPoint3D.y)/dStepY) +1;
if(Cn > lRowDem) Cn = lRowDem;
if(Cn < 0) return; if(Cn == Cn0 || Cm == Cm0) return;
if(lShowRelution > (Cn-Cn0)/2) lShowRelution = (Cn-Cn0)/2;
if(lShowRelution > (Cm-Cm0)/2) lShowRelution = (Cm-Cm0)/2;
if(lShowRelution < 1) lShowRelution = 1;
//打开纹理映射开关
glDisable(GL_COLOR_MATERIAL);
glEnable(GL_TEXTURE_2D);
if(pTextureInfo == NULL) pTextureInfo = Env.pDefTex;
glBindTexture(GL_TEXTURE_2D,pTextureInfo->uiBindID);
kx =1.0/(pTextureInfo->lCol*dResolution);
ky =1.0/(pTextureInfo->lRow*dResolution);
tDP = DemOriPoint3D - TexOriPoint3D;
for(n=Cn0;n<Cn-lShowRelution;n += lShowRelution)
{
glBegin (GL_TRIANGLE_STRIP);
for(m=Cm0;m<Cm;m += lShowRelution)
{
glNormal3fv(pppfNorVec[n+lShowRelution][m]);
glTexCoord2d((m*dStepX+tDP.x)*kx, ((n+lShowRelution)*dStepY+tDP.y)*ky);
glVertex3dv(pppdCoords[n+lShowRelution][m]);
glNormal3fv(pppfNorVec[n][m]);
glTexCoord2d((m*dStepX+tDP.x)*kx,(n*dStepY+tDP.y)*ky);
glVertex3dv(pppdCoords[n][m]);
}
if(m != Cm)
{
m -= lShowRelution;
glNormal3fv(pppfNorVec[n+lShowRelution][Cm-1]);
glTexCoord2d(((Cm-1)*dStepX+tDP.x)*kx, ((n+lShowRelution)*dStepY+tDP.y)*ky);
glVertex3dv(pppdCoords[n+lShowRelution][Cm-1]);
glNormal3fv(pppfNorVec[n][Cm-1]);
glTexCoord2d(((Cm-1)*dStepX+tDP.x)*kx,(n*dStepY+tDP.y)*ky);
glVertex3dv(pppdCoords[n][Cm-1]);
}
glEnd();
}
if(n != Cn- lShowRelution)
{
n -= lShowRelution;
glBegin (GL_TRIANGLE_STRIP);
for(m=Cm0;m<Cm;m += lShowRelution)
{
glNormal3fv(pppfNorVec[Cn-1][m]);
glTexCoord2d((m*dStepX+tDP.x)*kx,((Cn-1)*dStepY+tDP.y)*ky);
glVertex3dv(pppdCoords[Cn-1][m]);
glNormal3fv(pppfNorVec[n][m]);
glTexCoord2d((m*dStepX+tDP.x)*kx,(n*dStepY+tDP.y)*ky);
glVertex3dv(pppdCoords[n][m]);
}
if(m != Cm)
{
m -= lShowRelution;
glNormal3fv(pppfNorVec[Cn-1][Cm-1]);
glTexCoord2d(((Cm-1)*dStepX+tDP.x)*kx,((Cn-1)*dStepY+tDP.y)*ky);
glVertex3dv(pppdCoords[Cn-1][Cm-1]);
glNormal3fv(pppfNorVec[n-lShowRelution][Cm-1]);
glTexCoord2d(((Cm-1)*dStepX+tDP.x)*kx,((n-lShowRelution)*dStepY+tDP.y)*ky);
glVertex3dv(pppdCoords[n-lShowRelution][Cm-1]);
}
glEnd();
}
}