SDL,opengl制作地形的问题

mading0817 2012-05-03 12:07:16
大家好。
我在用2d的灰度图制作3D地形图。
遇到了不少问题。
步骤如下:
1.读取图像:
SDL_surface *terrainHeightMap=IMG_Load("heightMap_sand.png");

2.用这个图像创建一个高度图(height map array)float数组
3.……
问题做到第二步就卡住了。
怎么才能把这个图像的不同的灰度值赋给我的高度图数组?
假设我的灰度图是一个256 * 256的png图像。那么这256×256的每一个点都有一个灰度值,然后赋给我的array,问题就在于我怎么把这个灰度值从我的terrainHeightMap中调出来?还是我的理论方法就不对?
谢谢大伙!劳动节快乐!
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
s2753468 2012-05-04
  • 打赏
  • 举报
回复
load_image 函数如下:
SDL_Surface *load_image( std::string filename )
{

SDL_Surface* loadedImage = NULL;


SDL_Surface* optimizedImage = NULL;


loadedImage = IMG_Load( filename.c_str() );

if(!loadedImage) {
printf("IMG_Load: %s\n", IMG_GetError());

}


if( loadedImage != NULL )
{

optimizedImage = SDL_DisplayFormat( loadedImage );


SDL_FreeSurface( loadedImage );
}


return optimizedImage;
}
s2753468 2012-05-04
  • 打赏
  • 举报
回复
找资料的时候看到你发的这个帖子 赫赫 这是我的代码你调试一下 我觉得应该是这样搞

struct Vec4{
float r,g,b,a;

public:
Vec4::Vec4(float r, float g, float b, float a){
this->r = r;
this->g = g;
this->b = b;
this->a = a;

};

typedef std::vector<Vec4> Mesh;

Vec4 Core::getpixel24(SDL_Surface *surface, int x, int y)
{
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * surface->format->BytesPerPixel;
#if defined(__MACH__) && defined(__APPLE__)
float b = p[0];
float g = p[1];
float r = p[2]; // Big endian
#else
float b = p[2];
float g = p[1];
float r = p[0]; // little endian
#endif
float result[] = {r, g, b, 1};
return Vec4(result[0],result[1],result[2],result[3]);
}

void Core::preprocess()
{
SDL_Surface *terrainHeightMap;
terrainHeightMap = load_image("heightMap_sand.png");

//得到每个像素的灰度值,cout为了检验结果
for(int i=0;i<terrainHeightMap->clip_rect.w;i++){
for(int j=0;j<terrainHeightMap->clip_rect.h;j++){
cout<<"(I:"<<i<<","<<"j:"<<j<<")"<<getpixel24(terrainHeightMap,i,j).r<<endl;
cout<<"(I:"<<i<<","<<"j:"<<j<<")"<<getpixel24(terrainHeightMap,i,j).g<<endl;
cout<<"(I:"<<i<<","<<"j:"<<j<<")"<<getpixel24(terrainHeightMap,i,j).b<<endl;
cout<<"(I:"<<i<<","<<"j:"<<j<<")"<<getpixel24(terrainHeightMap,i,j).a<<endl;
cout<<"---------------------------------------"<<endl;
}
}

}
mading0817 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

load_image 函数如下:
SDL_Surface *load_image( std::string filename )
{

SDL_Surface* loadedImage = NULL;


SDL_Surface* optimizedImage = NULL;


loadedImage = IMG_Load( filen……
[/Quote]hahahah高盟吧!
mading0817 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

图像的256*256像素点对应于地形上的256*256网格,读取出每个像素的灰度值赋给地形上网格中的点。
[/Quote]
问题就在,怎么读出来像素的灰度值啊?
ryfdizuo 2012-05-03
  • 打赏
  • 举报
回复
图像的256*256像素点对应于地形上的256*256网格,读取出每个像素的灰度值赋给地形上网格中的点。
ri_aje 2012-05-03
  • 打赏
  • 举报
回复
SDL_surface 有读取单个像素值的函数吗?有的话一个一个的读就行了。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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